• 棒谷科技Java面试


    初面

    1、JVM的垃圾回收器有哪些?

    Serial、Parallel、CMS、G1

    2、MyBatis 中 # 和 $ 的区别?

    # 预编译后生成占位符,$ 类似于字符串拼接;# 比较安全,$ 容易造成 SQL 注入

    3、什么是 SQL 注入?(我给忘了)

    sql注入是一种将sql代码添加到输入参数中,传递到sql服务器解析并执行的一种攻击手法

    4、知道内存溢出吗?

    OOM 的话,有栈内存溢出,举个例子像递归忘记写递归出口,就容易造成栈内存溢出;堆内存溢出的话主要是堆内存空间不足,比如对象太多垃圾回收器处理不过来,而且都是强引用

    5、生产上 OOM 怎么排查?(有一点印象但还是不会)

    (1)通过top命令找出CPU占比最高的进程;
    (2)jps -l 找到后台 Java 程序;
    (3)定位到具体线程或代码 ps -mp 进程 -o THREAD, tid, time
    (4)将该线程id转成16进制
    (5)jstack 进程id | grep tid -A60找到具体代码

    6、JVM常用参数有哪些?

    -Xmx:最大堆内存空间;-Xms:初始化堆内存

    7、生产上有千个接口,但客户说太卡了,怎么排查哪个接口有问题?

    不太懂......但感觉是用 Spring AOP 切入各个接口

    8、JVM 堆内存是怎么样的?

    堆内存主要有新生代和老年代,其中新生代分为 Eden、S0区、S1区。新生代中主要发生 Minor GC,老年代主要是 Full GC

    9、你有什么想问的?

    如果有幸加入贵司需要做什么?需要学什么技术?我的面试情况来看您觉得我还有什么欠缺的?

    二面:

    先是问我大学学了什么课程,然后面试官列举了几个:计算机原理?计算机网络?数据库?数据结构与算法?操作系统?我都说有,他说那来聊聊。

    1、平时都有啥兴趣爱好?

    内心OS:这就是想看看我有没有学技术吧,但是不能直接说。

    回答:我平时喜欢健身看书,有看一些文学类的书也有技术类的书。

    2、都看什么技术书?

    内心OS:其实我啥都没看过,我得挑个比较会的

    回答:《深入理解Java虚拟机》

    3、为什么看这书?

    想要提高自己的技术,觉得不能只是当一个只会CRUD的程序员,而且这属于Java 的底层技术,作为一个即将从事Java的人来说必须要学。

    4、那说说JVM的内存结构

    线程共享的有 堆、方法区;线程私有的有 栈、本地方法栈、程序计数器。

    5、什么叫线程共享?

    线程共有的话是每个线程都能访问,比如堆中的对象还有方法区中的常量池;而像栈那样的,每个线程都独有一份栈空间,存放各自的局部变量表和操作数栈等,这就是线程私有。

    6、垃圾回收算法知道哪些?

    复制算法,主要发生在新生代,在需要回收的时候,将S0区的存活对象复制到S1区,清除可回收对象;

    标记清除算法:标记存活对象,清除可回收对象,可能造成内存碎片;

    标记整理算法:和前面类似,标记存货对象,清除可回收对象,整理存活对象,不会造成内存碎片,但多了整理的过程,效率比前面的差一点;

    分代收集算法:按照不同的代,使用不同的算法;一般来说,新生代使用复制算法;老年代使用标记清除火标记整理。

    7、你怎么理解计算机网络的模型的?

    我比较熟的是传输层,所以这个问题回答的断断续续,面试官实在受不了了,直接打断我。

    8、TCP和UDP的区别?UDP怎么传输的?TCP怎么保证可靠传输的?WebSocket的特点?

    参考:https://mp.weixin.qq.com/s/7RfH74cGEjNKJxeRs2eSkw

    9、数据库脏读和幻读的区别?

    脏读:读取了已经修改但未提交的数据;幻读:读取到了新增列

    10、BIO 和 NIO ?是那个层面的实现?

    BIO 阻塞 IO;NIO 非阻塞 IO。IO是操作系统层面实现的,在进行IO操作时不是直接操作物理硬件,而是通过缓冲区的复制进行的,一般来说是用户缓冲区和内核缓冲区之间复制。BIO 像 read 操作需要等数据准备好才会接着往下执行;NIO 则是通过轮询,若没有准备好则去处理别的事,偶尔查看,如果备好了就往下执行。

    11、来说说数据结构吧,说一下线性结构有哪些?

    数组,栈、队列等。

    12、数组和链表区别?

    数组是顺序结构,即在物理层面,数据之间存储是相邻的;链表是链式存储结构,它会存储下一个数据所在地址;在查询上数组支持随即查找,效率更高,插入和删除操作需要移动空间,效率相对较低;而链表则相反。

    13、你从计算机原理的角度说一下为什么数组查找更快?(不会)

    CPU和内存的读取速度差异使得Cache出现,Cache会把一片连续的内存空间读入, 因为数组结构是连续的内存地址,而链表的节点是分散在堆空间里面的,所以数组全部或者部分元素被连续存在Cache,而链表则需要去内存查找,速度较慢。

    14、算法思想?(没搞懂,说不会)

    枚举、贪心、动态规划、递归、分治等

    15、了解 Java 并发包吗?讲一下都知道什么?

    ConcurrentHashMap,分1.7和1.8给面试官讲了一下;说完准备说原子类的时候被打断了问下一个

    16、Java Web有什么组件?(不会)

    Servlet,Filter,Listener

    17、MVC是什么?为什么这么设计?

    M:model,分装数据相关;V:view,视图层;C:controller,控制层,一般处理逻辑,作为连接 M 和 C 的“桥梁”。这么设计使得相关模块分层,增加了程序的可拓展性和维护性。

    18、有什么想问的?

    和一面问的差不多......多了一个问题:下面还有面试吗?面试官说接下来不是技术面了。

    如果觉得对你有帮助,可以关注公众号:Max的日常操作,或扫码关注

                              

  • 相关阅读:
    Java集合框架
    常见异常--被解码的 URI 不是合法的编码
    BigDecimal使用以及异常处理
    文章标题--再识HTML5
    【转】解决$Proxy0 cannot be cast to java.sql.Connection异常
    Response-->cookie的添加和删除
    自定义标签---TLD约束文件格式说明
    XML约束文件---DTD文件
    JavaScript——注册表单参考模板(含参数格式校验)
    java的可序列化(转载)
  • 原文地址:https://www.cnblogs.com/lyuzt/p/12520837.html
Copyright © 2020-2023  润新知