当前位置: 首页 > news >正文

服装网站建设可行性分析小程序建站公司

服装网站建设可行性分析,小程序建站公司,中国有名的营销策划公司,网页视频下载用什么软件最好暑期实习面试在即#xff0c;这几天八股和算法轮扁我_ 八股部分打算先找学习视屏跟着画下思维导图#xff0c;然后看详细的面试知识点#xff0c;最后刷题 其中导图包含的是常考的题#xff0c;按照思维导图形式整理#xff0c;会在复盘后更新 细节研究侧重补全这几天八股和算法轮扁我_  八股部分打算先找学习视屏跟着画下思维导图然后看详细的面试知识点最后刷题 其中导图包含的是常考的题按照思维导图形式整理会在复盘后更新 细节研究侧重补全会收集不会的偏怪点 最后刷题部分记录自己不会的错题 导图 首先梳理总结过了一遍 细节研究 JDK和JRE JDKJava Development Kit它是功能齐全的 Java SDK是提供给开发者使用能够创建和编译 Java 程序的开发套件。它包含了 JRE同时还包含了编译 java 源码的编译器 javac 以及一些其他工具比如 javadoc文档注释工具、jdb调试器、jconsole基于 JMX 的可视化监控⼯具、javap反编译工具等等。 JREJava Runtime Environment 是 Java 运行时环境。它是运行已编译 Java 程序所需的所有内容的集合主要包括 Java 虚拟机JVM、Java 基础类库Class Library。 不过从 JDK 9 开始就不需要区分 JDK 和 JRE 的关系了取而代之的是模块系统JDK 被重新组织成 94 个模块 jlinkopen in new window 工具 (随 Java 9 一起发布的新命令行工具用于生成自定义 Java 运行时映像该映像仅包含给定应用程序所需的模块) 。并且从 JDK 11 开始Oracle 不再提供单独的 JRE 下载。 编译型和解释型 我们可以将高级编程语言按照程序的执行方式分为两种 编译型 会通过编译器open in new window将源代码一次性翻译成可被该平台执行的机器码。一般情况下编译语言的执行速度比较快开发效率比较低。常见的编译性语言有 C、C、Go、Rust 等等。解释型解释型语言open in new window会通过解释器open in new window一句一句的将代码解释interpret为机器代码后再执行。解释型语言开发效率比较快执行速度比较慢。常见的解释性语言有 Python、JavaScript、PHP 等等。 Java 语言既具有编译型语言的特征也具有解释型语言的特征。因为 Java 程序要经过先编译后解释两个步骤由 Java 编写的程序需要先经过编译步骤生成字节码.class 文件这种字节码必须由 Java 解释器来解释执行。 JDK 9 引入了一种新的编译模式 AOT(Ahead of Time Compilation) 。和 JIT 不同的是这种编译模式会在程序被执行前就将其编译成机器码属于静态编译C、 CRustGo 等语言就是静态编译。AOT 避免了 JIT 预热等各方面的开销可以提高 Java 程序的启动速度避免预热时间长。并且AOT 还能减少内存占用和增强 Java 程序的安全性AOT 编译后的代码不容易被反编译和修改特别适合云原生场景。 关键字 default 这个关键字很特殊既属于程序控制也属于类方法和变量修饰符还属于访问控制。 在程序控制中当在 switch 中匹配不到任何情况时可以使用 default 来编写默认匹配的情况。在类方法和变量修饰符中从 JDK8 开始引入了默认方法可以使用 default 关键字来定义一个方法的默认实现。实际主要用于接口中。它允许在接口中定义具有实现体的方法即默认方法。这样实现接口的类可以不用实现这些默认方法。 interface MyInterface {// 默认方法default void defaultMethod() {System.out.println(这是一个默认方法);}// 抽象方法void regularMethod(); }class MyClass implements MyInterface {// 实现抽象方法public void regularMethod() {System.out.println(实现了抽象方法);} } 在访问控制中如果一个方法前没有任何修饰符则默认会有一个修饰符 default但是这个修饰符加上了就会报错。 native关键字用于表示一个方法的实现是由本地Native代码提供的而不是由Java代码实现的。当一个方法被声明为native时它的实现将由外部的非Java代码提供。 通常情况下native方法是用来调用底层操作系统或其他外部库的功能。这样的方法可以让Java程序与底层系统进行交互执行一些特定的操作比如访问硬件设备、调用C/C编写的库等。要声明一个native方法只需在方法定义中使用native关键字不需要提供具体的实现。 public class NativeExample {// 声明一个native方法public native void nativeMethod(); }然后需要使用Java Native InterfaceJNI来提供这个native方法的实现。JNI允许Java代码与本地代码如C或C代码进行交互使得Java程序可以调用本地方法并获得本地方法的返回值。要使用JNI需要在本地代码中实现native方法并将其编译成与Java程序兼容的动态链接库.dll文件或.so文件。然后通过Java代码加载本地库并调用其中的native方法。 需要注意的是使用native方法会牺牲一些Java的特性比如跨平台性和安全性因为本地方法的行为取决于底层操作系统和硬件平台。因此应该谨慎使用native方法并确保在必要时进行适当的安全性和跨平台性检查。 strictfp关键字用于声明在类、接口或方法中的浮点运算采用严格的浮点计算规则。这个关键字主要用于确保浮点运算在不同的平台上产生相同的结果以保证Java程序的可移植性。 当一个类被声明为strictfp时该类中所有的方法以及其中的内部类都将使用严格的浮点计算规则执行。如果一个方法被声明为strictfp那么该方法中所有的浮点运算都会使用严格的浮点计算规则。 strictfp关键字通常用于确保在进行浮点计算时不会因为底层硬件或编译器的不同而导致结果不一致。这对于需要高精度计算或涉及金融、科学计算等领域的程序特别重要。 transient关键字用于修饰类的成员变量。当一个成员变量被声明为transient时它表示该变量不参与序列化过程。 在Java中序列化是将对象转换为字节流的过程以便将其保存到文件、数据库或通过网络传输。而反序列化则是将字节流重新转换为对象的过程。通过序列化和反序列化可以在不同的Java虚拟机之间或不同的应用程序之间传输对象。 然而并非所有的成员变量都适合被序列化。例如一些敏感信息如密码、临时数据如计算结果、线程相关数据等可能不希望被序列化和传输。在这种情况下可以使用transient关键字来标记这些变量使其在序列化过程中被忽略。 import java.io.*;class MyClass implements Serializable {// 使用transient关键字声明不希望被序列化的成员变量transient int sensitiveData;int normalData;public MyClass(int sensitiveData, int normalData) {this.sensitiveData sensitiveData;this.normalData normalData;} }public class Main {public static void main(String[] args) throws Exception {MyClass obj new MyClass(10, 20);// 将对象序列化到文件ObjectOutputStream out new ObjectOutputStream(new FileOutputStream(data.ser));out.writeObject(obj);out.close();// 从文件中反序列化对象ObjectInputStream in new ObjectInputStream(new FileInputStream(data.ser));MyClass newObj (MyClass) in.readObject();in.close();// 输出结果System.out.println(Sensitive Data: newObj.sensitiveData); // 序列化时被忽略System.out.println(Normal Data: newObj.normalData);} }在这个例子中sensitiveData被声明为transient因此它在序列化过程中将被忽略。只有normalData会被序列化和反序列化。 synchronized关键字用于实现线程同步确保多个线程之间对共享资源的访问是安全的。 synchronized关键字可以用来修饰方法或代码块其作用的范围可以是一个方法一个对象或者一个类。它有以下几个主要特点 互斥性Mutual Exclusionsynchronized确保了同一时间只有一个线程可以执行被 synchronized 修饰的代码块或方法。当一个线程获得了某个对象的锁之后其他线程必须等待该线程释放锁之后才能继续执行。 可重入性ReentrancyJava中的锁是可重入的即同一个线程可以多次获得同一个锁而不会发生死锁。这种机制可以避免在同一个线程中调用被 synchronized 修饰的方法或代码块时发生阻塞。 内存可见性Memory Visibilitysynchronized关键字不仅保证了代码的互斥执行还保证了共享变量的修改对所有线程的可见性。即当一个线程释放锁时它所做的修改将对其他线程可见。 使用synchronized的两种方式 同步方法Synchronized Method在方法声明中使用synchronized关键字修饰确保整个方法的执行是线程安全的。 public synchronized void synchronizedMethod() {// 该方法的代码块是线程安全的 }同步代码块Synchronized Block在代码块内部使用synchronized关键字指定一个对象作为锁确保只有持有该锁的线程才能执行该代码块。 public void someMethod() {synchronized (lockObject) {// 该代码块是线程安全的} }需要注意的是过度使用synchronized可能会造成性能问题因为每次都要获取锁可能会导致线程竞争和线程阻塞。在Java 5之后Java提供了更加灵活高效的并发工具如ReentrantLock、ReadWriteLock和Semaphore等可以更好地管理并发访问。 volatile是Java中的一个关键字。当一个变量被volatile修饰时表示这个变量可能会被多个线程同时修改因此在进行读取和写入操作时会有特殊的内存语义。 具体来说volatile有以下特性 可见性Visibilityvolatile保证了变量的修改对所有线程可见。当一个线程修改了volatile变量的值后这个新值会立即被其他线程看到即使这些线程使用的是不同的CPU缓存。 禁止指令重排序Prevents Reorderingvolatile变量的读写操作禁止了指令重排序这意味着volatile修饰的变量的赋值操作总是发生在任何后续的读操作之前。 不保证原子性No Atomicity Guaranteevolatile修饰的变量并不具备原子性。如果多个线程同时对一个volatile变量进行写操作最终结果可能与预期不符。 volatile关键字通常用于两种情况 状态标记Status Flags当一个变量用于标记程序的状态例如线程是否终止、任务是否完成等并且多个线程需要协调执行的时候可以使用volatile来确保状态的可见性。 双重检查锁Double-Checked Locking在单例模式等场景下为了确保线程安全且避免不必要的同步开销可以使用双重检查锁定模式Double-Checked Locking Pattern在其中的单例对象引用上使用volatile关键字。 需要注意的是虽然volatile能够确保变量的可见性但它并不能替代synchronized关键字因为volatile并不能保证复合操作的原子性。在需要进行复合操作的情况下仍然需要考虑使用synchronized关键字或者java.util.concurrent包提供的原子类。 instanceof是Java中的一个关键字用于检查对象是否是特定类的实例或者是否实现了特定接口。 instanceof的语法形式为 object instanceof ClassNameassert用于在代码中添加断言。它通常用于在开发和测试阶段验证程序的假设帮助检测错误和调试程序。 assert语句的语法形式为 assert condition : expression; 其中condition是一个布尔表达式如果为true则程序继续执行如果为false则抛出AssertionError异常。可选的expression用于在抛出异常时提供详细的错误信息。 在Java中默认情况下断言是禁用的。要启用断言可以使用-ea或-enableassertions选项运行Java程序。 public void process(int value) {assert value 0 : Value must be positive;// 继续执行方法 }在这个例子中如果传入的value不大于0断言条件将失败并抛出一个带有指定错误消息的AssertionError异常。 包装类 对于基本数据类型来说 比较的是值。对于包装数据类型来说 比较的是对象的内存地址。所有整型包装类对象之间值的比较全部使用 equals() 方法。 在Java中为了提高性能和节省内存一些包装类实现了缓存机制。具体来说对于Boolean、Byte、Character、Short和Integer这几个包装类Java在内部维护了一个缓存池用于存储在特定范围内的对象实例。这个范围通常是在-128到127之间可以通过Java虚拟机参数进行调整对于Boolean类型则是true和false两个实例。 当使用自动装箱时如果装箱的值在缓存范围内Java将返回缓存中的实例而不是创建一个新的对象。这样可以节省内存并提高性能因为不需要为常见的数值频繁创建新的对象。 两种浮点数类型的包装类 Float,Double 并没有实现缓存机制。 变量 成员变量和局部变量对比 语法形式从语法形式上看成员变量是属于类的而局部变量是在代码块或方法中定义的变量或是方法的参数成员变量可以被 public,private,static 等修饰符所修饰而局部变量不能被访问控制修饰符及 static 所修饰但是成员变量和局部变量都能被 final 所修饰。存储方式从变量在内存中的存储方式来看如果成员变量是使用 static 修饰的那么这个成员变量是属于类的如果没有使用 static 修饰这个成员变量是属于实例的。而对象存在于堆内存局部变量则存在于栈内存。生存时间从变量在内存中的生存时间上看成员变量是对象的一部分它随着对象的创建而存在而局部变量随着方法的调用而自动生成随着方法的调用结束而消亡。默认值从变量是否有默认值来看成员变量如果没有被赋初始值则会自动以类型的默认值而赋值一种情况例外:被 final 修饰的成员变量也必须显式地赋值而局部变量则不会自动赋值。 为什么成员变量有默认值 先不考虑变量类型如果没有默认值会怎样变量存储的是内存地址对应的任意随机值程序读取该值运行会出现意外。 默认值有两种设置方式手动和自动根据第一点没有手动赋值一定要自动赋值。成员变量在运行时可借助反射等方法手动赋值而局部变量不行。 对于编译器javac来说局部变量没赋值很好判断可以直接报错。而成员变量可能是运行时赋值无法判断误报“没默认值”又会影响用户体验所以采用自动赋默认值。 静态变量 静态变量也就是被 static 关键字修饰的变量。它可以被类的所有实例共享无论一个类创建了多少个对象它们都共享同一份静态变量。也就是说静态变量只会被分配一次内存即使创建多个对象这样可以节省内存。 静态变量是通过类名来访问的例如StaticVariableExample.staticVar如果被 private关键字修饰就无法这样访问了 通常情况下静态变量会被 final 关键字修饰成为常量。 方法 静态方法不能调用非静态成员这个需要结合 JVM 的相关知识主要原因如下 静态方法是属于类的在类加载的时候就会分配内存可以通过类名直接访问。而非静态成员属于实例对象只有在对象实例化之后才存在需要通过类的实例对象去访问。在类的非静态成员不存在的时候静态方法就已经存在了此时调用在内存中还不存在的非静态成员属于非法操作。 重载和重写 重载就是同样的一个方法能够根据输入数据的不同做出不同的处理 重写就是当子类继承自父类的相同方法输入数据一样但要做出有别于父类的响应时你就要覆盖父类方法 方法的重写要遵循“两同两小一大” “两同”即方法名相同、形参列表相同“两小”指的是子类方法返回值类型应比父类方法返回值类型更小或相等子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等“一大”指的是子类方法的访问权限应比父类方法的访问权限更大或相等。 面向对象 new 运算符new 创建对象实例对象实例在堆内存中对象引用指向对象实例对象引用存放在栈内存中。 一个对象引用可以指向 0 个或 1 个对象一根绳子可以不系气球也可以系一个气球一个对象可以有 n 个引用指向它可以用 n 条绳子系住一个气球。 关于继承如下 3 点请记住 子类拥有父类对象所有的属性和方法包括私有属性和私有方法但是父类中的私有属性和方法子类是无法访问只是拥有。子类可以拥有自己属性和方法即子类可以对父类进行扩展。子类可以用自己的方式实现父类的方法。 多态的特点: 对象类型和引用类型之间具有继承类/实现接口的关系引用类型变量发出的方法调用的到底是哪个类中的方法必须在程序运行期间才能确定多态不能调用“只在子类存在但在父类不存在”的方法如果子类重写了父类的方法真正执行的是子类覆盖的方法如果子类没有覆盖父类的方法执行的是父类的方法。 深拷贝和浅拷贝区别 浅拷贝浅拷贝会在堆上创建一个新的对象区别于引用拷贝的一点不过如果原对象内部的属性是引用类型的话浅拷贝会直接复制内部对象的引用地址也就是说拷贝对象和原对象共用同一个内部对象。深拷贝深拷贝会完全复制整个对象包括这个对象所包含的内部对象。 和equals区别 对于基本类型和引用类型的作用效果是不同的 对于基本数据类型来说 比较的是值。对于引用数据类型来说 比较的是对象的内存地址。 因为 Java 只有值传递所以对于 来说不管是比较基本数据类型还是引用数据类型的变量其本质比较的都是值只是引用类型变量存的值是对象的地址。 equals() 方法存在两种使用情况 类没有重写 equals()方法通过equals()比较该类的两个对象时等价于通过“”比较这两个对象使用的默认是 Object类equals()方法。类重写了 equals()方法一般我们都重写 equals()方法来比较两个对象中的属性是否相等若它们的属性相等则返回 true(即认为这两个对象相等)。 为什么重写 equals() 时必须重写 hashCode() 方法 因为两个相等的对象的 hashCode 值必须是相等。也就是说如果 equals 方法判断两个对象是相等的那这两个对象的 hashCode 值也要相等。 如果重写 equals() 时没有重写 hashCode() 方法的话就可能会导致 equals 方法判断是相等的两个对象hashCode 值却不相等。 三个字符串类 线程安全性 String 中的对象是不可变的也就可以理解为常量线程安全。AbstractStringBuilder 是 StringBuilder 与 StringBuffer 的公共父类定义了一些字符串的基本操作如 expandCapacity、append、insert、indexOf 等公共方法。StringBuffer 对方法加了同步锁或者对调用的方法加了同步锁所以是线程安全的。StringBuilder 并没有对方法进行加同步锁所以是非线程安全的。 性能 每次对 String 类型进行改变的时候都会生成一个新的 String 对象然后将指针指向新的 String 对象。StringBuffer 每次都会对 StringBuffer 对象本身进行操作而不是生成新的对象并改变对象引用。相同情况下使用 StringBuilder 相比使用 StringBuffer 仅能获得 10%~15% 左右的性能提升但却要冒多线程不安全的风险。 对于三者使用的总结 操作少量的数据: 适用 String单线程操作字符串缓冲区下操作大量数据: 适用 StringBuilder多线程操作字符串缓冲区下操作大量数据: 适用 StringBuffer 异常 不要在 finally 语句块中使用 return! 当 try 语句和 finally 语句中都有 return 语句时try 语句块中的 return 语句会被忽略。这是因为 try 语句中的 return 返回值会先被暂存在一个本地变量中当执行到 finally 语句中的 return 之后这个本地变量的值就变为了 finally 语句中的 return 返回值。 面对必须要关闭的资源我们总是应该优先使用 try-with-resources 而不是try-finally。随之产生的代码更简短更清晰产生的异常对我们也更有用。try-with-resources语句让我们更容易编写必须要关闭的资源的代码若采用try-finally则几乎做不到这点。 Java 中类似于InputStream、OutputStream、Scanner、PrintWriter等的资源都需要我们调用close()方法来手动关闭一般情况下我们都是通过try-catch-finally语句来实现这个需求如下 //读取文本文件的内容 Scanner scanner null; try {scanner new Scanner(new File(D://read.txt));while (scanner.hasNext()) {System.out.println(scanner.nextLine());} } catch (FileNotFoundException e) {e.printStackTrace(); } finally {if (scanner ! null) {scanner.close();} }
http://www.zqtcl.cn/news/447340/

相关文章:

  • 股票网站怎么做动态表格live2d看板娘wordpress
  • 班级网站建设开题报告企业创新平台建设
  • 网站建设有什么要求建设电子商务网站的步骤
  • 百度推广和哪些网站有合作专业网站开发多少钱
  • 相城区住房建设局网站做网站开发电脑配置
  • 成都网站建设制作photoshop网页制作视频教程
  • 深圳网站做的好的公司广州外贸营销网站建设公司
  • 网站你懂我意思正能量晚上不用下载直接进入微信公众号免费模板素材网站
  • 网站设计模板之家南宁seo外包平台
  • 免费舆情网站遵义市双控体系建设网站
  • 企业做网站得多少钱wordpress get_posts
  • 轻淘客网站怎么做申请个人网址
  • 新的网站的建设步骤购物网站首页源码
  • 龙岗网站建设费用明细中山 灯饰 骏域网站建设专家
  • 做catalog的免费网站网站开发一般采用什么框架
  • 网站建设海淀区网站特殊字体
  • 电子商务网站建设情况国风网页设计欣赏
  • 海拉尔网站建设+网站设计徐州模板建站定制网站
  • 做网站诱导充值犯法吗折叠分类目录模板wordpress
  • 企业网站建设的平台怎样建网站买东西
  • 免费推广工具有哪些上海优化营商环境
  • 模板网站怎么修改下载的字体如何安装到wordpress
  • 中国建设资格注册中心网站杭州市建设信用网官网
  • 国外网站搭建平台wordpress+行间距插件
  • 做网站买那种服务器wordpress商店插件
  • dw网站开发流程做影视网站怎么
  • 建好的网站在哪里免费的app软件大全
  • 建设银行信用卡境外网站盗刷电子商务专业是学什么的
  • asp.net做电商网站设计徐州做网站费用
  • 网站怎么发布做微商wordpress 主页显示多图