Java面试题总结(一)

以下是我根据学长学姐以及网上经过面试的学长学姐而总结出的一些面试官会问到的问题以及参考回答思路。祝愿正在准备面试的小伙伴们包括我自己能够顺利通过面试,拿到满意的offer。

一、谁说堆和栈

答:JVM是基于堆栈的虚拟机,JVM为新创建的线程都分配一个堆栈,也就是说,对于一个Java程序来说,它的运行就是通过对堆栈的操作来完成的。堆栈以帧为单位保存线程的状态。JVM对堆栈只进行两种操作,以帧为单位的压栈和出栈操作。

堆栈的差异:

  1. 堆内存用来存放由new创建的对象和数组。
  2. 栈内存是用来存放方法或者局部变量等。
  3. 堆是先进先出,后进后出。
  4. 栈是先进后出,后进先出。
  5. 共享性不同:a、栈内存是线程私有的。b、堆内存是所有线程共有的。

二、说说死锁是什么?如何避免?

答:所谓死锁,是指两个线程都在等待对方完成,造成了程序的停滞状态。(举个例子,小明在A房间拿着B房间的钥匙,小红在B房间手里却拿着A房间的钥匙,这个时候小红和小明都在等待对方交出钥匙才能出去,这样就造成了死锁)。死锁只有同时满足以下四个条件才会发生:(1)互斥条件;(2)持有等待条件;(3)不可剥夺条件;(4)环路等待条件。

避免死锁的方法:

  1. 破坏“互斥条件”:系统里取消互斥,若资源一般不被一个进程独占使用,那么死锁是肯定不会发生的,但一般“互斥条件”是无法破坏的,因此,在预防死锁预防主要是破坏其他三个必要条件,而不去涉及破坏“互斥条件”。
  2. 破坏“持有并等待条件”:所有的进程在开始运行之前,必须一次性的申请其在整个运行过程各种所需要的全部资源。
  3. 破坏“不可剥夺条件“”:占用部分资源的线程进一步申请其他资源时,如果申请不到,可以主动释放它占有的资源。
  4. 破坏“循环等待条件”:靠按顺序申请资源来预防。按某一顺序申请资源,释放资源则反序释放。

三、进程和线程的区别

 答:进程:进程是程序的一次动态执行过程,它经历了从代码加载、执行到执行完毕的一个完整过程,这个过程也是进程本身从产生、发展到最终消亡的过程。                                                           线程:线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程可以并发多个线程,每条线程并行执行不同的任务。

区别:

  1. 地址空间:线程共享本进程的地址空间,而进程之间是独立的地址空间。
  2. 资源:线程共享本进程的资源如内存、I/O、CPU等,不利于资源的管理和维护,而进程之间的资源是独立的,能够很好的进行资源管理和维护。
  3. 健壮性:多进程要比多线程健壮,一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。
  4. 执行过程:每个独立的进程有一个程序运行的入口、顺序执行序列和程序入口,执行开销大。线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,执行开销小。
  5. 可并发性:两者均可并发执行。
  6. 切换时:进程切换时,消耗的的资源大,效率高。所以涉及到频繁的切换时,使用线程要好于进程。同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程。
  7. 线程是处理器调度的最小单位,但是进程是操作系统资源分配的最小单位。

四、equals和==的区别

答:区别:

  1. equals是方法,而==是操作符;
  2. equals用来检测两个对象是否相等,即两个对象的内容是否相等。
  3. 运行速度==比equals()快,因为“==”只是比较引用

五、转发和重定向的区别

答:区别:

  1. 请求次数不同:重定向是浏览器向服务器发送一个请求并收到响应后再次向一个新的地址发出请求,转发是服务器收到请求后为了完成响应跳转到一个新的地址;重定向请求两次,服务器请求一次。
  2. 地址栏不同:重定向地址栏会发生变化,转发地址栏不会发生变化。
  3. 是否共享数据:重定向两次请求不共享数据,转发一次请求共享数据。(在request级别使用信息共享,使用重定向必然出错)。
  4. 跳转限制:重定向可以跳转到任意URL,转发只能跳转到本地站点资源。
  5. 发生行为不同:重定向是客户端行为,转发是服务器端行为。

 六、说说MySQL索引

答:MySQL索引的建立对于MySQL的高效运行时很重要的,索引可以大大提高MySQL的检索速度(打个比方:如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL是一个人力三轮车)。索引分为单列索引和组合索引。单列索引,即一个索引包含单个列,一个列表可以有个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列。实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。

但是索引也有缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATA、和DELETE,因为更新表时,MySQL不仅要保存数据,还要保存以下索引文件;建立索引会占用磁盘空间的索引文件。

        理解记忆、理解记忆、理解记忆!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前途无量的彪哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值