棒谷科技Java面试

Posted Lyu_zt

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了棒谷科技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、有什么想问的?

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

 

以上是关于棒谷科技Java面试的主要内容,如果未能解决你的问题,请参考以下文章

校招实习面试实战,顺丰科技Java工程师面试复盘总结

2019 龙采科技java面试笔试题 (含面试题解析)

2022 Java面试题道通科技

2022 Java面试题道通科技

2022 Java保融科技面试题

2022 Java保融科技面试题