"Java大厂200面试题总结及附答案,加油圆梦大厂!"

需积分: 5 6 下载量 56 浏览量 更新于2024-01-04 收藏 1.66MB DOCX 举报
final修饰类表示该类不能被继承;final修饰方法表示该方法不能被子类重写;final修饰变量表示该变量是一个常量,只能被赋值一次,赋值后数值不可改变;final修饰参数表示该参数是只读的,不能在方法内部被修改。 4、抽象类和接口有什么区别? (1)抽象类可以有普通方法的实现,接口不可以有普通方法的实现; (2)一个类只能继承一个抽象类,但是可以实现多个接口; (3)抽象类中的成员变量可以有各种修饰符,而接口中的成员变量只能是public static final的; (4)抽象类中可以包含构造方法,接口中不能包含构造方法。 5、String、StringBuffer、StringBuilder有什么区别? String是不可变的字符序列,每次对String进行修改,都会生成一个新的String对象,消耗更多的内存,效率比较低; StringBuffer和StringBuilder是可变的字符序列,对它们进行修改并不会生成新的对象,可以在原有对象的基础上进行修改,节省内存,StringBuffer是线程安全的,而StringBuilder是非线程安全的。 6、重载和重写的区别? (1)方法名称相同,参数列表不同(个数不同或类型不同或顺序不同); (2)重载是一个类中多态性的表现,同名方法可以有不同的参数列表; (3)重写是子类继承父类后对父类方法的重新定义; (4)重写方法的访问修饰符不能比被重写方法的访问修饰符更严格; (5)重写方法不能抛出比被重写方法更宽泛的异常; 7、Java 中的内存区域划分是什么? Java 的内存区域划分包括了方法区(JVM 机器级的 setup),堆,栈,程序计数器和本地方法栈。方法区用来存放 class、静态变量、常量等,堆用来存放对象,栈是线程私有的,存放基本数据类型和对象的引用,程序计数器是用来标记线程执行的位置,本地方法栈是执行 native 方法时使用的内存区域。 8、什么情况下会发生内存泄漏? (1)对象被错误的保留;(2)数据结构中的指针被意外的分配;(3)一些类加载器被保留;(4)线程被不正确的阻塞。内存泄漏的解决方法:(1)查明泄漏的原因;(2)删除泄漏对象的引用;(3)使相应的位置清零;(4)等待垃圾回收; 9、反射的作用是什么? 反射是指在Java运行时环境中,对程序的的类的属性、方法等进行访问和操作的机制。通过反射可以在程序运行时获取类的信息,如类的构造器、方法、属性,通过反射还可以在运行时调用对象的方法,对类的字段进行赋值和取值。 10、Servlet中forward和redirect的区别是什么? forward和redirect都是服务端跳转的方式,forward是服务器内部进行页面跳转,浏览器地址栏的URL不会改变,request和response都是同一个对象实例;redirect是客户端跳转,服务器会告诉浏览器重新向指定的url发起请求,这个过程是两个独立的请求,request和response不同。forward一般用于表单数据重复提交问题,redirect一般用于某个资源的访问路径已经变了。