手机进入网站自动识别深圳企业做网站公
2025/12/30 10:42:01 网站建设 项目流程
手机进入网站自动识别,深圳企业做网站公,常见c2c网站有哪些,重庆网站设计软件一、基础篇 1、 Java语言有哪些特点#xff1f; 简单易学、有丰富的类库面向对象#xff08;Java最重要的特性#xff0c;让程序耦合度更低#xff0c;内聚性更高#xff09;与平台无关性#xff08;JVM是Java跨平台使用的根本#xff09;可靠安全支持多线程 2、面向…一、基础篇1、 Java语言有哪些特点简单易学、有丰富的类库面向对象Java最重要的特性让程序耦合度更低内聚性更高与平台无关性JVM是Java跨平台使用的根本可靠安全支持多线程2、面向对象和面向过程的区别面向过程是分析解决问题的步骤然后用函数把这些步骤一步一步地实现然后在使用的时候一 一调用则可。性能较高所以单片机、嵌入式开发等一般采用面向过程开发面向对象是把构成问题的事务分解成各个对象而建立对象的目的也不是为了完成一个个步骤 而是为了描述某个事物在解决整个问题的过程中所发生的行为。面向对象有封装、继承、多态的特性所以易维护、易复用、易扩展。可以设计出低耦合的系统。 但是性能上来说比面向过程要 低。3 、八种基本数据类型的大小以及他们的封装类注http://1.int是基本数据类型Integer是int的封装类是引用类型。int默认值是0而Integer默认值是null所以Integer能区分出0和null的情况。一旦java看到null就知道这个引用还没有指向某个对象再任何引用使用前必须为其指定一个对象否则会报错。2.基本数据类型在声明时系统会自动给它分配空间而引用类型声明时只是分配了引用空间必须通过实例化开辟数据空间之后才可以赋值。数组对象也是一个引用对象将一个数组赋值给另一个数组时只是复制了一个引用所以通过某一个数组所做的修改在另一个数组中也看的见。虽然定义了boolean这种数据类型但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令Java语言表达式所操作的boolean值在编译之后都使用Java虚拟机中的int数据类型来代替而boolean数组将会被编码成Java虚拟机的byte数组每个元素 boolean元素占8位。这样我们可以得出boolean类型占了单独使用是4个字节在数组中又是1个字 节。使用int的原因是对于当下32位的处理器CPU来说一次处理数据是32位这里不是指的是32/64位系统而是指CPU硬件层面具有高效存取的特点。4、标识符的命名规则。标识符的含义 是指在程序中我们自己定义的内容譬如类的名字方法名称以及变量名称等等都是标识符。命名规则硬性要求标识符可以包含英文字母0-9的数字$以及_ 标识符不能以数字开头 标识符不是关键字命名规范非硬性要求类名规范首字符大写后面每个单词首字母大写大驼峰式。 变量名规范首字母小写后面每个单词首字母大写小驼峰式。 方法名规范同变量名。5、instanceof 关键字的作用instanceof 严格来说是Java中的一个双目运算符用来测试一个对象是否为一个类的实例用法 为boolean result obj instanceof Class其中 obj 为一个对象Class 表示一个类或者一个接口当 obj 为 Class 的对象或者是其直接或间接子类或者是其接口的实现类结果result 都返回 true否则返回false。注意编译器会检查 obj 是否能转换成右边的class类型如果不能转换则直接报错如果不能确定类型则通过编译具体看运行时定。int i 0; System.out.println(i instanceof Integer);//编译不通过 i必须是引用类型不能是基本类型 System.out.println(i instanceof Object);//编译不通过 Integer integer new Integer(1); System.out.println(integer instanceof Integer);//true //false ,在 JavaSE规范 中对 instanceof 运算符的规定就是如果 obj 为 null那么将返回 false。 System.out.println(null instanceof Object);6、Java自动装箱与拆箱装箱就是自动将基本数据类型转换为包装器类型int--Integer调用方法Integer的valueOf(int) 方法拆箱就是自动将包装器类型转换为基本数据类型Integer--int。调用方法Integer的 intValue方法在Java SE5之前如果要生成一个数值为10的Integer对象必须这样进行Integer i new Integer(10);而在从 Java SE5 开始就提供了自动装箱的特性如果要生成一个数值为 10 的 Integer 对象只需要这样就可以了Integer i 10;面试题 1 以下代码会输出什么public class Main { public static void main(String[] args) { Integer i1 100; Integer i2 100; Integer i3 200; Integer i4 200; System.out.println(i1i2); System.out.println(i3i4); } }运行结果true false为什么会出现这样的结果输出结果表明 i1 和 i2 指向的是同一个对象而 i3 和 i4 指向的是不同的对象。此时只需一看源码便知究竟下面这段代码是 Integer 的 valueOf 方法的具体实现public static Integer valueOf(int i) { if(i -128 i IntegerCache.high) return IntegerCache.cache[i 128]; else return new Integer(i); }其中 IntegerCache 类的实现为private static class IntegerCache { static final int high; static final Integer cache[]; static { final int low -128; // high value may be configured by property int h 127; if (integerCacheHighPropValue ! null) { // Use Long.decode here to avoid invoking methods that // require Integers autoboxing cache to be initialized int i Long.decode(integerCacheHighPropValue).intValue(); i Math.max(i, 127); // Maximum array size is Integer.MAX_VALUE h Math.min(i, Integer.MAX_VALUE - -low); } high h; cache new Integer[(high - low) 1]; int j low; for(int k 0; k cache.length; k) cache[k] new Integer(j); } private IntegerCache() {} }从这2段代码可以看出在通过valueOf方法创建Integer对象的时候如果数值在[-128,127]之间 便返回指向IntegerCache.cache中已经存在的对象的引用否则创建一个新的Integer对象。上面的代码中i1和i2的数值为100因此会直接从cache中取已经存在的对象所以i1和i2指向的是同一个对象而i3和i4则是分别指向不同的对象。面试题2以下代码输出什么public class Main { public static void main(String[] args) { Double i1 100.0; Double i2 100.0; Double i3 200.0; Double i4 200.0; System.out.println(i1i2); System.out.println(i3i4); } }运行结果false false原因 在某个范围内的整型数值的个数是有限的而浮点数却不是。7、 重载和重写的区别重写(Override)从字面上看重写就是 重新写一遍的意思。其实就是在子类中把父类本身有的方法重新写一遍。子类继承了父类原有的方法但有时子类并不想原封不动的继承父类中的某个方法所以在方法名参数列表返回类型(除过子类中方法的返回值是父类中方法返回值的子类时)都相同的情况下 对方法体进行修改或重写这就是重写。但要注意子类函数的访问修饰权限不能少于父类的。public class Father { public static void main(String[] args) { // TODO Auto-generated method stub Son s new Son(); s.sayHello(); } public void sayHello() { System.out.println(Hello); } } class Son extends Father{ Override public void sayHello() { // TODO Auto-generated method stub System.out.println(hello by ); } }重写 总结1.发生在父类与子类之间 2.方法名参数列表返回类型除过子类中方法的返回类型是父类中返回类型的子类必须相同 3.访问修饰符的限制一定要大于被重写方法的访问修饰符 publicprotecteddefaultprivate) 4.重写方法一定不能抛出新的检查异常或者比被重写方法申 明更加宽泛的检查型异常重载Overload在一个类中同名的方法如果有不同的参数列表参数类型不同、参数个数不同甚至是参数顺序不 同则视为重载。同时重载对返回类型没有要求可以相同也可以不同但不能通过返回类型是 否相同来判断重载。public class Father { public static void main(String[] args) { // TODO Auto-generated method stub Father s new Father(); s.sayHello(); s.sayHello(wintershii); } public void sayHello() { System.out.println(Hello); } public void sayHello(String name) { System.out.println(Hello name); } }重载 总结1.重载Overload是一个类中多态性的一种表现 2.重载要求同名方法的参数列表不同(参 数类型参数个数甚至是参数顺序) 3.重载的时候返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准篇幅限制下面就只能给大家展示小册部分内容了。整理了一份核心面试笔记包括了Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafka 面试专题需要全套面试笔记及答案可以在文末获取二、JVM篇1、知识点汇总JVM是Java运行基础,面试时一定会遇到JVM的有关问题,内容相对集中,但对只是深度要求较高.其中内存模型,类加载机制,GC是重点方面.性能调优部分更偏向应用,重点突出实践能力.编译器优化 和执行模式部分偏向于理论基础,重点掌握知识点.需了解内存模型各部分作用,保存哪些数据.类加载双亲委派加载机制,常用加载器分别加载哪种类型的类.GC分代回收的思想和依据以及不同垃圾回收算法的回收思路和适合场景.性能调优常有JVM优化参数作用,参数调优的依据,常用的JVM分析工具能分析哪些问题以及使用方法.执行模式解释/编译/混合模式的优缺点,Java7提供的分层编译技术,JIT即时编译技术,OSR栈上替换,C1/C2编译器针对的场景,C2针对的是server模式,优化更激进.新技术方面Java10的graal编译器编译器优化javac的编译过程,ast抽象语法树,编译器优化和运行器优化.2、知识点详解1、JVM内存模型线程独占:栈,本地方法栈,程序计数器 线程共享:堆,方法区2、栈又称方法栈,线程私有的,线程执行方法是都会创建一个栈阵,用来存储局部变量表,操作栈,动态链接,方法出口等信息.调用方法时执行入栈,方法返回式执行出栈.3、本地方法栈与栈类似,也是用来保存执行方法的信息.执行Java方法是使用栈,执行Native方法时使用本地方法栈.4、程序计数器保存着当前线程执行的字节码位置,每个线程工作时都有独立的计数器,只为执行Java方法服务,执行 Native方法时,程序计数器为空.5、堆JVM内存管理最大的一块,对被线程共享,目的是存放对象的实例,几乎所欲的对象实例都会放在这里, 当堆没有可用空间时,会抛出OOM异常.根据对象的存活周期不同,JVM把对象进行分代管理,由垃圾回收器进行垃圾的回收管理6、方法区又称非堆区,用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译器优化后的代码等数据.1.7 的永久代和1.8的元空间都是方法区的一种实现7、JVM 内存可见性JMM 是定义程序中变量的访问规则 , 线程对于变量的操作只能在自己的工作内存中进行 , 而不能直接对主内存操作. 由于指令重排序 , 读写的顺序会被打乱 , 因此 JMM 需要提供原子性 , 可见性 , 有序性保证 .3、说说类加载与卸载加载过程其中验证,准备,解析合称链接加载通过类的完全限定名,查找此类字节码文件,利用字节码文件创建Class对象.验证确保Class文件符合当前虚拟机的要求,不会危害到虚拟机自身安全.准备进行内存分配,为static修饰的类变量分配内存,并设置初始值(0或null).不包含final修饰的静态变 量,因为final变量在编译时分配.解析将常量池中的符号引用替换为直接引用的过程.直接引用为直接指向目标的指针或者相对偏移量等.初始化主要完成静态块执行以及静态变量的赋值.先初始化父类,再初始化当前类.只有对类主动使用 时才会初始化.触发条件包括,创建类的实例时,访问类的静态方法或静态变量的时候,使用Class.forName反射类的时候,或者某个子类初始化的时候.Java自带的加载器加载的类,在虚拟机的生命周期中是不会被卸载的,只有用户自定义的加载器加载的类才可以被卸.1、加载机制-双亲委派模式双亲委派模式,即加载器加载类时先把请求委托给自己的父类加载器执行,直到顶层的启动类加载器. 父类加载器能够完成加载则成功返回,不能则子类加载器才自己尝试加载.*优点:1. 避免类的重复加载2. 避免Java的核心API被篡改2、分代回收分代回收基于两个事实:大部分对象很快就不使用了,还有一部分不会立即无用,但也不会持续很长时 间.年轻代-标记-复制 老年代-标记-清除3、回收算法a、G1算法1.9后默认的垃圾回收算法,特点保持高回收率的同时减少停顿.采用每次只清理一部分,而不是清理全部的增量式清理,以保证停顿时间不会过长其取消了年轻代与老年代的物理划分,但仍属于分代收集器,算法将堆分为若干个逻辑区域(region),一部分用作年轻代,一部分用作老年代,还有用来存储巨型对象的分区.同CMS相同,会遍历所有对象,标记引用情况,清除对象后会对区域进行复制移动,以整合碎片空间.年轻代回收: 并行复制采用复制算法,并行收集,会StopTheWorld.老年代回收: 会对年轻代一并回收初始标记完成堆root对象的标记,会StopTheWorld. 并发标记 GC线程和应用线程并发执行. 最终标记完成三色标记周期,会StopTheWorld. 复制/清楚会优先对可回收空间加大的区域进行回收b、ZGC算法前面提供的高效垃圾回收算法,针对大堆内存设计,可以处理TB级别的堆,可以做到10ms以下的回收停顿时间.着色指针读屏障并发处理基于region内存压缩(整理)roots标记标记root对象,会StopTheWorld. 并发标记利用读屏障与应用线程一起运行标记,可能 会发生StopTheWorld. 清除会清理标记为不可用的对象. roots重定位是对存活的对象进行移动,以腾出大块内存空间,减少碎片产生.重定位最开始会StopTheWorld,却决于重定位集与对象总活动集的比例. 并发重定位与并发标记类似.4、简述一下JVM的内存模型1.JVM内存模型简介JVM定义了不同运行时数据区他们是用来执行应用程序的。某些区域随着JVM启动及销毁另外一些区域的数据是线程性独立的随着线程创建和销毁。jvm内存模型总体架构图如下摘自oracle官方网站JVM在执行Java程序时会把它管理的内存划分为若干个的区域每个区域都有自己的用途和创建 销毁时间。如下图所示可以分为两大部分线程私有区和共享区。下图是根据自己理解画的一个 JVM内存模型架构图JVM内存分为线程私有区和线程共享区线程私有区1、程序计数器当同时进行的线程数超过CPU数或其内核数时就要通过时间片轮询分派CPU的时间资源不免发生线程切换。这时每个线程就需要一个属于自己的计数器来记录下一条要运行的指令。如果执行的是JAVA方法计数器记录正在执行的java字节码地址如果执行的是native方法则计数器为 空。2、虚拟机栈线程私有的与线程在同一时间创建。管理JAVA方法执行的内存模型。每个方法执行时都会创建一个桢栈来存储方法的的变量表、操作数栈、动态链接方法、返回值、返回地址等信息。栈的大小决定了方法调用的可达深度递归多少层次或嵌套调用多少层其他方法-Xss参数可以设置虚拟机栈大小。栈的大小可以是固定的或者是动态扩展的。如果请求的栈深度大于最大可用深度则抛出stackOverflowError如果栈是可动态扩展的但没有内存空间支持扩展则抛出 OutofMemoryError。 使用jclasslib工具可以查看class类文件的结构。下图为栈帧结构图3、本地方法栈与虚拟机栈作用相似。但它不是为Java方法服务的而是本地方法C语言。由于规范对这块没有强制要求不同虚拟机实现方法不同。线程共享区1、方法区线程共享的用于存放被虚拟机加载的类的元数据信息如常量、静态变量和即时编译器编译后的 代码。若要分代算是永久代老年代以前类大多“static”的很少被卸载或收集现回收废弃 常量和无用的类。其中运行时常量池存放编译生成的各种常量。如果hotspot虚拟机确定一个类 的定义信息不会被使用也会将其回收。回收的基本条件至少有所有该类的实例被回收而且装 载该类的ClassLoader被回收2、堆存放对象实例和数组是垃圾回收的主要区域分为新生代和老年代。刚创建的对象在新生代的 Eden区中经过GC后进入新生代的S0区中再经过GC进入新生代的S1区中15次GC后仍存在就进入老年代。这是按照一种回收机制进行划分的不是固定的。若堆的空间不够实例分配则 OutOfMemoryError。Java面试题目录多线程并发篇46道面试题篇幅限制下面就只能给大家展示小册部分内容了。整理了一份核心面试笔记包括了Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafka 面试专题需要全套面试笔记及答案可以点击下方名片获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询