Java面经整理

Posted Barrymeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java面经整理相关的知识,希望对你有一定的参考价值。

1、TCP的优点

可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。

2、什么时候使用UDP

1.面向数据报方式
2.网络数据大多为短消息
3.拥有大量Client
4.对数据安全性无特殊要求
5.网络负担非常重,但对响应速度要求高

3、为什么使用多线程

为了解决负载均衡问题,充分利用CPU资源.为了提高CPU的使用率,采用多线程的方式去同时完成几件事情而不互相干扰.为了处理大量的IO操作时或处理的情况需要花费大量的时间等等,比如:读写文件,视频图像的采集,处理,显示,保存等

4、说下MVC架构吧

Model

  • 业务处理 :业务逻辑(Service)
  • 数据持久层:CRUD (Dao - 数据持久化对象)

View

  • 展示数据
  • 提供链接发起Servlet请求 (a,form,img…)

Controller (Servlet)

  • 接收用户的请求 :(req:请求参数、Session信息….)

  • 交给业务层处理对应的代码

  • 控制视图的跳转

5、String 、 StringBuffer 、 StringBuilder 的区别

6、Spring中使用的设计模式

Java单例模式
Java原型模式(prototype)
Java模板模式(template)
Java工厂模式
Java代理模式
Java观察者模式(Observer)
Java适配器模式(adapter)
Java装饰者模式(decorator)
Java策略模式(Strategy)

7、String类能不能被继承?为什么?

不能
因为string类是被final修饰的类,final修饰过的类不能被继承、final修饰过的变量不能被修改

8、产生死锁的必要条件

  • 互斥条件:进程要求对所分配的资源进行排它性控制,即在一段时间内某资源仅为一进程所占用。
  • 请求和保持条件:当进程因请求资源而阻塞时,对已获得的资源保持不放。
  • 不剥夺条件:进程已获得的资源在未使用完之前,不能剥夺,只能在使用完时由自己释放。
  • 循环等待条件:在发生死锁时,必然存在一个进程--资源的环形链。

9、简述动态代理和静态代理

静态代理:

程序员创建或由特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了
静态代理通常只代理一个类
静态代理事先知道要代理的是什么

动态代理:

在程序运行时,运用反射机制动态创建而成
动态代理是代理一个接口下的多个实现类
动态代理不知道要代理什么东西,只有在运行时才知道

10、解决hash冲突的方式?

拉链法
代表作:hashMap
原理:把所有hash值相同的元素放到链表中
再哈希法
原理:产生冲突时,对结果再进行一次hash,直到没有hash冲突,一般没人用,太鲁莽了,而且治标不治本,理论上永远不能彻底解决hash冲突
开放地址法
1、线性探测法
2、线性补偿探测法
3、伪随机探测

11、简述类加载机制,什么是双亲委派?

1、加载:将源文件(代码)编译成.class文件,传递给类加载器
2、验证:类加载器拿到这些字节码文件后开始执行检查(通过本地类库),确保加载进来的字节流格式符合java虚拟机要求
3、准备:对类变量(不是实例变量)分配内存,并且给一个默认初始化的值(0或者null)
4、解析:将常量池中的符号引用加载成直接引用(如string str = new string(“123”),str就是符号引用,123是直接引用)
5、初始化:对类的静态变量初始化为指定的值,执行静态代码块

双亲委派机制:如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此。
因此所有的加载请求最终都应该传送到顶层的启动类加载器中,只有当父加载器反馈自己无法完成这个加载请求(它的搜索范围中没有找到所需的类)时,子加载器才会尝试自己去加载。

以上是关于Java面经整理的主要内容,如果未能解决你的问题,请参考以下文章

面经来啦Java面经整理 | 中间件篇Redis

每日面经美团点评前端开发Java工程师最新面经速递!

2021最新Java面经整理 | 框架篇SpringCloud框架

Java面经整理---HashMap

Java面经整理

Java工程师跳槽经验分享,挥泪整理面经