java面试题及答案(基础篇)

这篇具有很好参考价值的文章主要介绍了java面试题及答案(基础篇)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

如今IT仍是热门行业,面试程序员的人也非常多,那么,怎样才能顺利通过面试呢?2021最新java面试题及答案(基础篇),为你的面试助攻!

1、Java中的内存溢出是如何造成的?

OutOfMemoryError:

(1)PerGern Space 程序中使用了大量jar或class,使Java虚拟机装载类空间不够。

解决方案:调参XX:PermSize 和 XX:MaxPermSize 、减少jar包,减少类的重复加载

(2)Java Heap Space Java虚拟机创建了太多的对象。

解决方案:调参Xms(初始堆大小)Xmx(最大堆大小)、检查死循环或不必要创建的重复对象

(3)unable to create new native Thread JVM占用了太多内存空间,而在JVM中创建线程还要再操作系统中也创建线程。

解决方案:调整JVM中线程大小。

2、String s = “123”;这个语句有几个对象产生?

若字符串池中没有"123",则产生一个对象,并且放入常量池中,若有"123",则产生0个对象。

若是String s = new String(“123”),若常量池中没有,则在常量池中创建一个,然后在堆内存中创建一个。

3、问题:如果A和B对象循环引用,是否可以被GC?

回答:可以,现在的虚拟机基本都是通过可达性分析算法来判断对象是否存活的,而不是通过简单的引用计数法来判断对象是否存活。可达性分析算法使用一系列的“GC Roots”对象(虚拟机栈中引用的对象、静态属性引用对象)作为起始点,这些节点向下搜索的路径称为引用链,当一个对象到GC Roots没有任何引用链连接,则证明对象是不可用的。

4、Error、Exception和RuntimeException的区别,作用又是什么?

Error和Exception都是Throwable的子类,RuntimeException是Exception的子类。

Error用于指示合理应用程序不应该试图捕获的错误。

Exception指出合理的应用程序需要捕获的条件。分为已检查异常和未检查异常。

RuntimeException是未检查异常,不需要try catch或在方法上声明,主要子类:NullPointer、Arithmatic、ArrayIndexOutOfBounds、ClassCast。

5、hashCode的作用?

hashCode主要是用于快速查找,如HashMap结构中,用于定位键值对的位置。两个对象相同,则hashCode一定相同,而hashCode相同的对象则不一定相同,就相当于放在同一个框里。

6、HashMap和Hashtable的区别?

线程安全性、null值的key、效率、HashMap(Iterator快速失败迭代器)、Hashtable(enumerator迭代器)、时间推移HashMap元素位置会变

7、Reader和InputStream区别?

都是抽象类,Reader用于读取字符流(char或String),InputStream用于读取字节流(byte数组)。

8、HashMap中是否任何对象都可以做为key,用户自定义对象做为key有没有什么要求?

可以、但是要key对象必须是不可变的对象,不然在Entry被插入Map中后,再改变key值,会导致当前key值与hash值不符合,即与数组索引不符,将无法被查找到。

9、 启动一个线程是用run()还是start()?

多线程有几种实现 同步和并发是如何解决的 什么叫守护线程,用什么方法实现守护线程(Thread.setDeamon()的含义) 如何停止一个线程? 解释是一下什么是线程安全?举例说明一个线程不安全的例子。解释Synchronized关键字的作用。 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?

(1)start

(2)继承Thread类、实现Runnable接口、使用ExectuorService、Future、Callable实现由返回值的线程。

(3)同步方法、同步代码块、锁

(4)Damon线程、为其他线程的运行提供服务,如GC,Thread。setDeamon(true)。

(5)Thread.stop()不推荐(不会正确释放资源)、使用中断来停止线程。

(6)当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象是线程安全的。

(7)车票被重复卖出。

(8)同步关键词。修饰静态方法,则以类作为锁对象,同时只能有一个线程访问此类同步的静态方法;修饰普通方法,则以此对象作为锁对象,同时只能有一个线程访问此类同步的普通方法;也可以自定义锁对象同步代码块。

(9)synchronized方法不可以进入,非synchronized可以进入。

10、最新java面试题之对sql进行优化的原则有哪些?

11、Servlet的生命周期,Serlvet与CGI的区别?

生命周期:类加载、实例化(构造对象),初始化(init),服务(service),销毁(destroy)。

CGI:common gateway interface,通用网关接口,Perl语言编写,每个请求创建一个CGI对象。

Servlet:只需要实例化、初始化一次,多线程。

12、了解过哪些JDK8的新特性,举例描述下相应的特性?

(1)lambda表达式:函数式编程,方法引用

(2)Stream API

(3)接口的默认方法

(4)日期时间API的改进,新增DateTimeFormatter方法

13、StringBuffer有什么优势?为什么快?

因为StringBuffer不需要重复创建String对象,但是其实也不是这样。

比如String s = “a” + “b” + "c"操作编译器会优化,变成String s = “abc”

String s = s1 + s2 + s3编译器也会优化,变成StringBuilder的append操作,但是如果不是一次性+操作拼接完,就会反复生成String对象与StringBuilder对象,效率会很低。

14、加密解密算法了解吗?

摘要算法:MD5(128位)、SHA1(160位),是一种不可逆的过程,无论多大的数据,经过摘要算法后都生成相同长度的数据。只能通过字典进行破解。

对称加密算法:DES、AES,加密解密时使用相同的秘钥。

非对称加密算法:RSA,加密解密时使用不同的秘钥,对接支付宝使用RSA2。

15、Integer内部缓存?

Integer类内部有一个staitic 的Integer数组,存储的是一些已经完成初始化的Integer对象,一般值为(-128~127),若用==比较,则有时候会因为值不在缓存中而返回false,所以应该用equals比较。

16、ArrayList的原理?

(1)ArrayList是线程不安全的,若要线程安全,则使用CopyOnWriteList。

(2)底层是Object[]数组,内部有一个elementData引用指向数组,刚开始默认指向一个缓存空数组(transient),当要进行扩容时,会重新new一个大小为1.5倍(x + (x >>1))的新数组,然后将旧元素通过System.arraycopy这个native方法拷贝到新数组中。

(3)随机读写(get、set)方法的算法复杂度为O(1)。

(4)增加操作分为两种,add(index, value)的算法复杂度为O(n),因为要通过元素复制进行移动;而add(value)操作的算法复杂度为O(1)(若不发生扩容)。

(5)删除操作的时间复杂度为O(n),因为不管是按index进行删除还是按照object去删除,都需要通过复制去实现移动操作,删除后数组大小不会变,靠size属性来维护长度。按object进行删除时不能用new出来的对象,要通过ArrayList内对象的引用删除。

17、LinkedList的原理?

(1)底层是一个双向链表,维护着一个first指针和一个last指针。

(2)随机读写(get,set)的时间复杂度为O(n)。

(3)插入操作add(object)的时间复杂度为O(1);add(index, object)的时间复杂度为O(n)。

(4)删除操作remove(object)的时间复杂度为O(1);remove(index)的时间复杂度为O(n)。

18、解决高并发与高负载?

(1)静态页面消耗最小,尽可能的HTML静态化,采用信息发布系统CMS实现信息录入自动生成静态页面、在前端缓存不经常改变的动态数据。

(2)CDN,把CSS/JS等资源分布在不同的服务器上。

(3)负载均衡(Nginx)。

(4)缓存不常改变的数据(Redis、memcache)。

(5)图片服务器与应用服务器分离。

(6)集群。

19、Spring中@Autowire与@Resource的区别?

@Autowire默认按照类型装配,默认情况下它要求依赖对象必须存在如果允许为null,可以设置它required属性为false,如果我们想使用按照名称装配,可以结合@Qualifier注解一起使用;

@Resource默认按照名称装配,当找不到与名称匹配的bean才会按照类型装配,可以通过name属性指定,如果没有指定name属性,当注解标注在字段上,即默认取字段的名称作为bean名称寻找依赖对象,当注解标注在属性的setter方法上,即默认取属性名作为bean名称寻找依赖对象

20、线程池使用的注意事项?

(1)防止死锁。线程池中所有线程都在等待A事件发生,而没有空闲线程去执行A。

(2)防止系统资源不足。要控制线程数量。

(3)防止并发错误。

(4)防止线程泄漏,某个线程因RuntimeException或Error没有正常被捕获导致该线程异常终止,线程池失去了一个线程。

(5)避免任务过载。
 文章来源地址https://www.toymoban.com/news/detail-654205.html

到了这里,关于java面试题及答案(基础篇)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2023 年Java面试题及答案大全(持续更新)

    本文分为十九个模块,分别是:「Java 基础、容器、多线程、反射、对象拷贝、Java Web 、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、MySQL、Redis、JVM」 Java 基础 1. JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,Jav

    2024年02月08日
    浏览(36)
  • 大厂最全1100道Java面试题及答案整理(2023最新版)

    春招,秋招,社招,我们 Java 程序员的面试之路,是挺难的,过了 HR,还得被技术面,小刀在去各个厂面试的时候,经常是通宵睡不着觉,头发都脱了一大把,还好最终侥幸能够入职一个独角兽公司,安稳从事喜欢的工作至今... 近期也算是抽取出大部分休息的时间,为大家准

    2024年02月09日
    浏览(27)
  • 2023 年最新版Java面试题及答案整理(完整版,超详细)

    程序员一步入中年,不知不觉便会被铺天盖地的“危机感”上身,曾经的那个少年已经不在,时间就是这样公平。就算你能发明Java语言,随着时间的推移,你注定还是要成为慢慢变蔫的茄子,缓缓变黑的葡萄。 看着金九银十就要来临的消息,吓得我周末赶紧拿出了面试资料

    2024年02月14日
    浏览(34)
  • php面试题及答案

    1 请输出下面代码执行结果 复制 讲解:count(var)是用来统计数组或对象的元素个数的。当var是null或者空数组时,结果为0。如果var是普通变量,则返回1。正常情况下返回var中的元素或属性个数。 2 请说明php.ini中的safe_mode开启之后影响了哪些函数 答案:Safe_mode是php的安全模式。

    2024年02月11日
    浏览(29)
  • 面试题:ES的面试题及答案

    什么是ES? 答:ES是Elasticsearch的缩写,是一款开源的分布式搜索引擎。它可以快速地存储、搜索和分析大量的数据,支持全文检索、结构化查询等多种查询方式。ES的主要特点是速度快、可扩展、高可用和易于使用。 ES的主要用途是什么? 答:ES主要用于建立搜索引擎、日志

    2024年02月16日
    浏览(29)
  • 【面试题】2023前端vue面试题及答案

    前后端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库  web前端面试题库 VS java后端面试题库大全   Vue3.0 为什么要用 proxy? 在 Vue2 中, 0bject.defineProperty 会改变原始数据,而 Proxy 是创建对象的虚拟表示,并提供 set 、get 和 deleteProperty 等处理器,这些处理器可

    2024年02月06日
    浏览(33)
  • Qt经典面试题及答案

    面试题: 请解释什么是Qt框架,以及它在软件开发中的作用和优势。 请谈谈你在使用Qt进行GUI开发方面的经验和技能。 请描述Qt的信号和槽机制,并解释其在软件开发中的作用。 请介绍Qt中的模型/视图架构,并说明如何使用Qt模型/视图框架来实现数据的展示和交互。 在Qt中,

    2024年02月03日
    浏览(29)
  • 运维常用面试题及答案

    介绍一下你的运维经验和技能。 答案:在回答这个问题时,可以简要概述你的运维经验和技能,包括你的工作经历、参与的项目、使用的工具和技术等。重点突出你在系统监控、故障排除、自动化部署、容量规划和安全性等方面的经验和技能。 你在日常工作中使用过哪些自

    2024年02月15日
    浏览(29)
  • php算法面试题及答案

    1. PHP的基础知识点 PHP中类的继承属于单继承,一个子类只能继承一个父类。可见性为public protected的属性和方法可以被继承。 继承的方法或属性可以被重写,可见性越来越大。 PHP中的变量名区分大小写,但类名、函数名不区分大小写。 2. error_reporting()函数的作用 error_reporti

    2024年02月09日
    浏览(35)
  • 28道Zookeeper面试题及答案

    JAVA面试宝典,搞定JAVA面试,不再是难题,系列文章传送地址,请点击本链接。 目录 1、说说 Zookeeper 是什么? 2、ZooKeeper 有哪些应用场景? 3、说说Zookeeper的工作原理? 4、请描述一下 Zookeeper 的通知机制是什么? 5、Zookeeper 对节点的 watch 监听通知是永久的吗? 6、 Zookeeper 集

    2024年01月21日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包