网站设计 上海网站首页结构图
2026/1/23 7:42:55 网站建设 项目流程
网站设计 上海,网站首页结构图,医疗网站织梦,用h5开发的网站模板下载1、你是怎样理解OOP面向对象 难度系数#xff1a;⭐ 面向对象是利于语言对现实事物进行抽象。面向对象具有以下特征#xff1a; 继承#xff1a;继承是从已有类得到继承信息创建新类的过程封装#xff1a;封装是把数据和操作数据的方法绑定起来#xff0c;对数据的访…1、你是怎样理解OOP面向对象 难度系数⭐面向对象是利于语言对现实事物进行抽象。面向对象具有以下特征继承继承是从已有类得到继承信息创建新类的过程封装封装是把数据和操作数据的方法绑定起来对数据的访问只能通过已定义的接口多态性多态性是指允许不同子类型的对象对同一消息作出不同的响应2、重载与重写区别 难度系数⭐重载发生在本类重写发生在父类与子类之间重载的方法名必须相同重写的方法名相同且返回值类型必须相同重载的参数列表不同重写的参数列表必须相同重写的访问权限不能比父类中被重写的方法的访问权限更低构造方法不能被重写3、接口与抽象类的区别 难度系数⭐抽象类要被子类继承接口要被类实现接口可多继承接口但类只能单继承抽象类可以有构造器、接口不能有构造器抽象类除了不能实例化抽象类之外它和普通Java类没有任何区别抽象类抽象方法可以有public、protected和default这些修饰符、接口只能是public抽象类可以有成员变量接口只能声明常量4、深拷贝与浅拷贝的理解 难度系数⭐深拷贝和浅拷贝就是指对象的拷贝一个对象中存在两种类型的属性一种是基本数据类型一种是实例对象的引用。浅拷贝是指只会拷贝基本数据类型的值以及实例对象的引用地址并不会复制一份引用地址所指向的对象也就是浅拷贝出来的对象内部的类属性指向的是同一个对象深拷贝是指既会拷贝基本数据类型的值也会针对实例对象的引用地址所指向的对象进行复制深拷贝出来的对象内部的类执行指向的不是同一个对象篇幅限制下面就只能给大家展示小册部分内容了。整理了一份核心面试笔记包括了Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafc需要全套面试笔记及答案【点击此处即可/免费获取】​​https://docs.qq.com/doc/DQXdYWE9LZ2ZHZ1ho5、sleep和wait区别 难度系数⭐sleep方法属于Thread类中的方法释放cpu给其它线程 不释放锁资源sleep(1000) 等待超过1s被唤醒wait方法属于Object类中的方法释放cpu给其它线程同时释放锁资源wait(1000) 等待超过1s被唤醒wait() 一直等待需要通过notify或者notifyAll进行唤醒wait 方法必须配合 synchronized 一起使用不然在运行时就会抛出IllegalMonitorStateException异常#### 锁释放时机代码演示public static void main(String[] args) {Object o new Object();Thread thread new Thread(() - {synchronized (o) {System.out.println(新线程获取锁时间 LocalDateTime.now() 新线程名称 Thread.currentThread().getName());try {//wait 释放cpu同时释放锁o.wait(2000);//sleep 释放cpu不释放锁//Thread.sleep(2000);System.out.println(新线程获取释放锁锁时间 LocalDateTime.now() 新线程名称 Thread.currentThread().getName());} catch (InterruptedException e) {throw new RuntimeException(e);}}});thread.start();try {Thread.sleep(100);} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println(主线程获取锁时间 LocalDateTime.now() 主线程名称 Thread.currentThread().getName());synchronized (o){System.out.println(主线程获取释放锁锁时间 LocalDateTime.now() 主线程名称 Thread.currentThread().getName());}}Java6、什么是自动拆装箱 int和Integer有什么区别 难度系数⭐基本数据类型如int,float,double,boolean,char,byte,不具备对象的特征不能调用方法。装箱将基本类型转换成包装类对象拆箱将包装类对象转换成基本类型的值java为什么要引入自动装箱和拆箱的功能主要是用于java集合中ListInteter listnew ArrayListInteger();list集合如果要放整数的话只能放对象不能放基本类型因此需要将整数自动装箱成对象。实现原理javac编译器的语法糖底层是通过Integer.valueOf()和Integer.intValue()方法实现。区别Integer是int的包装类int则是java的一种基本数据类型Integer变量必须实例化后才能使用而int变量不需要Integer实际是对象的引用当new一个Integer时实际上是生成一个指针指向此对象而int则是直接存储数据值Integer的默认值是nullint的默认值是07、和equals区别 难度系数⭐如果比较的是基本数据类型那么比较的是变量的值如果比较的是引用数据类型那么比较的是地址值两个对象是否指向同一块内存equals如果没重写equals方法比较的是两个对象的地址值如果重写了equals方法后我们往往比较的是对象中的属性的内容equals方法是从Object类中继承的默认的实现就是使用8、String能被继承吗 为什么用final修饰 难度系数⭐不能被继承因为String类有final修饰符而final修饰的类是不能被继承的。String 类是最常用的类之一为了效率禁止被继承和重写。为了安全。String 类中有native关键字修饰的调用系统级别的本地方法调用了操作系统的 API如果方法可以重写可能被植入恶意代码破坏程序。Java 的安全性也体现在这里。9、String buffer和String builder区别 难度系数⭐StringBuffer 与 StringBuilder 中的方法和功能完全是等价的只是StringBuffer 中的方法大都采用了 synchronized 关键字进行修饰因此是线程安全的而 StringBuilder 没有这个修饰可以被认为是线程不安全的。在单线程程序下StringBuilder效率更快因为它不需要加锁不具备多线程安全而StringBuffer则每次都需要判断锁效率相对更低10、final、finally、finalize 难度系数⭐final修饰符关键字有三种用法修饰类、变量和方法。修饰类时意味着它不能再派生出新的子类即不能被继承因此它和abstract是反义词。修饰变量时该变量使用中不被改变必须在声明时给定初值在引用中只能读取不可修改即为常量。修饰方法时也同样只能使用不能在子类中被重写。finally通常放在try…catch的后面构造最终执行代码块这就意味着程序无论正常执行还是发生异常这里的代码只要JVM不关闭都能执行可以将释放外部资源的代码写在finally块中。finalizeObject类中定义的方法Java中允许使用finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在销毁对象时调用的通过重写finalize() 方法可以整理系统资源或者执行其他清理工作。11、Object中有哪些方法 难度系数⭐protected Object clone()---创建并返回此对象的一个副本。boolean equals(Object obj)---指示某个其他对象是否与此对象“相等protected void finalize()---当垃圾回收器确定不存在对该对象的更多引用时由对象的垃圾回收器调用此方法。Class? extendsObject getClass()---返回一个对象的运行时类。int hashCode()---返回该对象的哈希码值。void notify()---唤醒在此对象监视器上等待的单个线程。void notifyAll()---唤醒在此对象监视器上等待的所有线程。String toString()---返回该对象的字符串表示。void wait()---导致当前的线程等待直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法。void wait(long timeout)---导致当前的线程等待直到其他线程调用此对象的 notify() 方法或 notifyAll()方法或者超过指定的时间量。void wait(long timeout, int nanos)---导致当前的线程等待直到其他线程调用此对象的 notify()12、说一下集合体系 难度系数⭐13、ArrarList和LinkedList区别 难度系数⭐ArrayList是实现了基于动态数组的数据结构LinkedList基于链表的数据结构。对于随机访问get和setArrayList效率优于LinkedList因为LinkedList要移动指针。对于新增和删除操作add和removeLinkedList比较占优势因为ArrayList要移动数据。 这一点要看实际情况的。若只对单条数据插入或删除ArrayList的速度反而优于LinkedList。但若是批量随机的插入删除数据LinkedList的速度大大优于ArrayList. 因为ArrayList每插入一条数据要移动插入点及之后的所有数据。14、HashMap底层是 数组链表红黑树为什么要用这几类结构 难度系数⭐⭐数组 NodeK,V[] table ,哈希表根据对象的key的hash值进行在数组里面是哪个节点链表的作用是解决hash冲突将hash值取模之后的对象存在一个链表放在hash值对应的槽位红黑树 JDK8使用红黑树来替代超过8个节点的链表主要是查询性能的提升从原来的O(n)到O(logn),通过hash碰撞让HashMap不断产生碰撞那么相同的key的位置的链表就会不断增长当对这个Hashmap的相应位置进行查询的时候就会循环遍历这个超级大的链表性能就会下降所以改用红黑树篇幅限制下面就只能给大家展示小册部分内容了。整理了一份核心面试笔记包括了Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafc需要全套面试笔记及答案【点击此处即可/免费获取】​​https://docs.qq.com/doc/DQXdYWE9LZ2ZHZ1ho15、HashMap和HashTable区别 难度系数⭐线程安全性不同HashMap是线程不安全的HashTable是线程安全的其中的方法是Synchronized在多线程并发的情况下可以直接使用HashTable但是使用HashMap时必须自己增加同步处理。是否提供contains方法HashMap只有containsValue和containsKey方法HashTable有contains、containsKey和containsValue三个方法其中contains和containsValue方法功能相同。key和value是否允许null值Hashtable中key和value都不允许出现null值。HashMap中null可以作为键这样的键只有一个可以有一个或多个键所对应的值为null。数组初始化和扩容机制HashTable在不指定容量的情况下的默认容量为11而HashMap为16Hashtable不要求底层数组的容量一定要为2的整数次幂而HashMap则要求一定为2的整数次幂。Hashtable扩容时将容量变为原来的2倍加1而HashMap扩容时将容量变为原来的2倍。16、线程的创建方式 难度系数⭐继承Thread类创建线程实现Runnable接口创建线程使用Callable和Future创建线程 有返回值使用线程池创建线程#### 代码演示import java.util.concurrent.*;public class threadTest{public static void main(String[] args) throws ExecutionException, InterruptedException {//继承threadThreadClass thread new ThreadClass();thread.start();Thread.sleep(100);System.out.println(#####################);//实现runnableRunnableClass runnable new RunnableClass();new Thread(runnable).start();Thread.sleep(100);System.out.println(#####################);//实现callableFutureTask futureTask new FutureTask(new CallableClass());futureTask.run();System.out.println(callable返回值 futureTask.get());Thread.sleep(100);System.out.println(#####################);//线程池ThreadPoolExecutor threadPoolExecutor new ThreadPoolExecutor(1, 1, 2, TimeUnit.SECONDS, new ArrayBlockingQueue(10));threadPoolExecutor.execute(thread);threadPoolExecutor.shutdown();Thread.sleep(100);System.out.println(#####################);//使用并发包ExecutorsExecutorService executorService Executors.newFixedThreadPool(5);executorService.execute(thread);executorService.shutdown();}}class ThreadClass extends Thread{Overridepublic void run() {System.out.println(我是继承thread形式 Thread.currentThread().getName());}}class RunnableClass implements Runnable{Overridepublic void run(){System.out.println(我是实现runnable接口 Thread.currentThread().getName());}}class CallableClass implements CallableString {Overridepublic String call(){System.out.println(我是实现callable接口);return 我是返回值可以通过get方法获取;}}Java篇幅限制下面就只能给大家展示小册部分内容了。整理了一份核心面试笔记包括了Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafc需要全套面试笔记及答案【点击此处即可/免费获取】​​https://docs.qq.com/doc/DQXdYWE9LZ2ZHZ1ho17、线程的状态转换有什么生命周期 难度系数⭐新建状态(New) 线程对象被创建后就进入了新建状态。例如Thread thread new Thread()。就绪状态(Runnable): 也被称为“可执行状态”。线程对象被创建后其它线程调用了该对象的start()方法从而来启动该线程。例如thread.start()。处于就绪状态的线程随时可能被CPU调度执行。运行状态(Running)线程获取CPU权限进行执行。需要注意的是线程只能从就绪状态进入到运行状态。阻塞状态(Blocked)阻塞状态是线程因为某种原因放弃CPU使用权暂时停止运行。直到线程进入就绪状态才有机会转到运行状态。阻塞的情况分三种等待阻塞 -- 通过调用线程的wait()方法让线程等待某工作的完成。同步阻塞 -- 线程在获取synchronized同步锁失败(因为锁被其它线程所占用)它会进入同步阻塞状态。其他阻塞 -- 通过调用线程的sleep()或join()或发出了I/O请求时线程会进入到阻塞状态。当sleep()状态超时、join(等待线程终止或者超时、或者I/O处理完毕时线程重新转入就绪状态。死亡状态(Dead)线程执行完了或者因异常退出了run()方法该线程结束生命周期。18、Java中有几种类型的流 难度系数⭐19、请写出你最常见的5个RuntimeException 难度系数⭐java.lang.NullPointerException空指针异常出现原因调用了未经初始化的对象或者是不存在的对象。java.lang.ClassNotFoundException指定的类找不到出现原因类的名称和路径加载错误通常都是程序试图通过字符串来加载某个类时可能引发异常。java.lang.NumberFormatException字符串转换为数字异常出现原因字符型数据中包含非数字型字符。java.lang.IndexOutOfBoundsException数组角标越界异常常见于操作数组对象时发生。java.lang.IllegalArgumentException方法传递参数错误。java.lang.ClassCastException数据类型转换异常。20、谈谈你对反射的理解 难度系数⭐反射机制所谓的反射机制就是java语言在运行时拥有一项自观的能力。通过这种能力可以彻底了解自身的情况为下一步的动作做准备。Java的反射机制的实现要借助于4个类classConstructorFieldMethod;其中class代表的时类对 象Constructor类的构造器对象Field类的属性对象Method类的方法对象。通过这四个对象我们可以粗略的看到一个类的各个组成部分。Java反射的作用在Java运行时环境中对于任意一个类可以知道这个类有哪些属性和方法。对于任意一个对象可以调用它的任意一个方法。这种动态获取类的信息以及动态调用对象的方法的功能来自于Java 语言的反射Reflection机制。Java 反射机制提供功能在运行时判断任意一个对象所属的类。在运行时构造任意一个类的对象。在运行时判断任意一个类所具有的成员变量和方法。在运行时调用任意一个对象的方法21、什么是 java 序列化如何实现 java 序列化 难度系数⭐序列化是一种用来处理对象流的机制所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。序 列 化 的 实 现 将 需 要 被 序 列 化 的 类 实 现 Serializable 接 口 该 接 口 没 有 需 要 实 现 的 方 法 implements Serializable 只是为了标注该对象是可被序列化的然后使用一个输出流(如FileOutputStream)来构造一个ObjectOutputStream(对象流)对象接着使用 ObjectOutputStream 对象的 writeObject(Object obj)方法就可以将参数为 obj 的对象写出(即保存其状态)要恢复的话则用输入流。22、Http 常见的状态码 难度系数⭐200 OK //客户端请求成功301 Permanently Moved 永久移除)请求的 URL 已移走。Response 中应该包含一个 Location URL, 说明资源现在所处的位置302 Temporarily Moved 临时重定向400 Bad Request //客户端请求有语法错误不能被服务器所理解401 Unauthorized //请求未经授权这个状态代码必须和 WWW-Authenticate 报头域一起使用403 Forbidden //服务器收到请求但是拒绝提供服务404 Not Found //请求资源不存在eg输入了错误的 URL500 Internal Server Error //服务器发生不可预期的错误503 Server Unavailable //服务器当前不能处理客户端的请求一段时间后可能恢复正常

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

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

立即咨询