0
点赞
收藏
分享

微信扫一扫

步步高Java一面凉经

小亦同学321 2022-03-11 阅读 33

又一次面试被血虐,心疼自己居然还能聊半个小时,一开始就直接进入正题。

自我介绍

一.Java线程池有那些

        1.FixedThreadPool: 线程池的特点是它的核心线程数和最大线程数一样。

        2.SingleThreadExecutor:线程的特点是它的核心线程数和最大线程数均为1,我们也可以将其任务是一个单例线程池。

        3.CachedThreadPool: 线程池的特点是它的常驻核心线程数为0,正如其名字一样,它所有的县城都是临时的创建。

        4.ScheduledThreadPool:线程池是支持定时或者周期性执行任务

        5.SingleThreadScheduledExecutor:它实际和 ScheduledThreadPool 线程池非常相似,它只是 ScheduledThreadPool的一个特例。

        6.ForkJoinPool:它的主要特点是可以充分利用多核CPU , 可以把一个任务拆分为多个子任务,这些子任务放在不同的处理器上并行执行,当这些子任务执行结束后再把这些结果合并起来,这是一种分治思想。

二、线程池的核心参数

1.corePoolSize(核心线程数):
        (1)核心线程会一直存在,即使没有任务执行;
        (2)当线程数小于核心线程数的时候,即使有空闲线程,也会一直创建线程直到达到核心线程数;
        (3)设置allowCoreThreadTimeout=true(默认false)时,核心线程会超时关闭。2.queueCapacity(任务队列容量):也叫阻塞队列,当核心线程都在运行,此时再有任务进来,会进入任务队列,排队等待线程执行。
3.maxPoolSize(最大线程数)
        (1)线程池里允许存在的最大线程数量;
        (2)当任务队列已满,且线程数量大于等于核心线程数时,会创建新的线程执行任务;
        (3)线程池里允许存在的最大线程数量。当任务队列已满,且线程数量大于等于核心线程数时,会创建新的线程执行任务。
4.keepAliveTime(线程空闲时间)
        (1)当线程空闲时间达到keepAliveTime时,线程会退出(关闭),直到线程数等于核心线程数;
        (2)如果设置了allowCoreThreadTimeout=true,则线程会退出直到线程数等于零。
5.allowCoreThreadTimeout(允许核心线程超时
6.rejectedExecutionHandler(任务拒绝处理器)
        (1)当线程数量达到最大线程数,且任务队列已满时,会拒绝任务;
        (2)调用线程池shutdown()方法后,会等待执行完线程池的任务之后,再shutdown()。如果在调用了shutdown()方法和线程池真正shutdown()之间提交任务,会拒绝新任务。

三、JVM部分:

--------------------------------------------这块把我问吐了----------------------------------------------------------------

        1.jvm的存储模型:堆,栈(虚拟机栈和本地方法栈),程序计数器,方法区(jdk1.7以后删除)。

2.JVM调优指标:

        内存占用:程序正常运行需要的内存大小。

        延迟:由于垃圾收集而引起的程序停顿时间。

         吞吐量:用户程序运行时间占用户程序和垃圾收集占用总时间的比值。

3.何时需要做jvm调优?
       1. heap 内存(老年代)持续上涨达到设置的最大内存值;

        2. Full GC 次数频繁;

        3. GC 停顿时间过长(超过1秒);

        4. 应用出现OutOfMemory 等内存异常;

        5. 应用中有使用本地缓存且占用大量内存空间;

        6. 系统吞吐量与响应性能不高或下降。

4.JVM核心参数:  

-Xms10g :JVM启动时申请的初始堆内存值
-Xmx20G :JVM可申请的最大Heap值
-Xmn3g : 新生代大小,一般设置为堆空间的1/3 1/4左右,新生代大则老年代小
-Xss :Java每个线程的Stack大小
-XX:PermSize :持久代(方法区)的初始内存大小
-XX:MaxPermSize : 持久代(方法区)的最大内存大小
-XX:SurvivorRatio : 设置新生代eden空间和from/to空间的比例关系,关系(eden/from=eden/to)
-XX:NewRatio : 设置新生代和老年代的比例老年代/新生代

    四、Spring部分

       1.Spring有哪些有优点(这个很多): 方便解耦、简化开发;支持AOP;支持声明式事务处理;方便集成各种优秀框架;

      2.IOC的说一下:控制反转------创建对象的巴拉巴拉

      3:AOP在项目中用过吗?具体说一下:在异常记录的时候用过---打印方法执行异常信息

      4:Mybatis中Mapper接口和xml文件为什么能对应上:  必须指定nameSpace为Mapper的全限定类名,具体源码执行流程可以自行查看。

     5:Redis的使用场景:缓存,排行榜,热点数据,

     6:Redis集群设计思路和Redis集群下如何找到一个key 

     7.MQ:MQ的使用场景,项目中为什么要用MQ

     8.缓存穿透:当一个请求的数据,缓存中没有,数据库中也没有。

五、网络部分

     1.HTTP和TCP的区别:TCP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求。Http会通过TCP建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,Http会立即将TCP连接断开。,这个过程是很短的,所以Http连接是一种短连接,是一种无状态的连接。

  2.Http长连接和TCP长连接的区别:Http长连接 和 TCP长连接的区别在于: TCP 的长连接需要自己去维护一套心跳策略。,而Http只需要在请求头加入keep-alive:true即可实现长连接。

 3:HTTP的状态有哪些?

----------------状态??-------------------状态码!!!----------------------------------------------------------------

一、200状态码:成功2××: 成功处理了请求的状态码。
        1、200 :服务器已成功处理了请求并提供了请求的网页。
        2、204: 服务器成功处理了请求,但没有返回任何内容。
二、300状态码:重定向3×× :每次请求中使用重定向不要超过 5 次。
        1、301: 请求的网页已永久移动到新位置。当URLs发生变化时,使用301代码。搜索引擎索引中保存新的URL。
        2、302: 请求的网页临时移动到新位置。搜索引擎索引中保存原来的URL。
        3、304: 如果网页自请求者上次请求后没有更新,则用304代码告诉搜索引擎机器人,可节省带宽和开销。
三、400状态码:客户端错误4×× :表示请求可能出错,妨碍了服务器的处理。
        1、400: 服务器不理解请求的语法。
        2、403: 服务器拒绝请求。
        3、404: 服务器找不到请求的网页。服务器上不存在的网页经常会返回此代码。
        4、410 :请求的资源永久删除后,服务器返回此响应。该代码与 404(未找到)代码相似,但在资源以前存在而现在不存在的情况下,有时用来替代404 代码。如果资源已永久删除,应当使用 301 :指定资源的新位置。
四、500状态码:服务器错误5×× :表示服务器在处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错。
        1、500 :服务器遇到错误,无法完成请求。
        2、503: 服务器目前无法使用(由于超载或停机维护)。

  4.三次握手和四次挥手?为什么要四次挥手?而创建连接只需要三次?

        三次握手:满足建立可靠连接这个需求,两个标志性参数作为可靠的保证:seq和ack确认。只有双方都收到自己的seq被对方确认,才会认为这条链接是可靠的。

      四次挥手:如果在第三次挥手中客户端回复ACK后,服务器的数据还没发完但只有三挥手,服务器只能选择关闭连接,这样客户端的数据就会不完整,与TCP可靠链接初衷相违背。


反问环节

这场面试一局多余的话没有。

举报

相关推荐

0 条评论