棒谷科技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、你有什么想问的?

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

[En]

What do you need to do if you are lucky enough to join your company? What skills do you need to learn? Judging from my interview, what do you think I lack?

二面:

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

[En]

First ask me what courses I took in college, and then the interviewer listed a few: computer principles? Computer network? Database? Data structure and algorithm? Operating system? I said yes, but he said let’s have a chat.

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

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

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

[En]

Answer: I usually like to exercise and read books. I read some literary books as well as technical books.

2、都看什么技术书?

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

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

3、为什么看这书?

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

4、那说说JVM的内存结构

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

5、什么叫线程共享?

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

[En]

What threads have in common is that each thread can access it, such as the objects in the heap and the constant pool in the method area, while like the stack, each thread has its own stack space, storing its own local variable table, Operand stack, and so on. This is thread private.

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

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

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

[En]

Tag removal algorithm: Mark surviving objects, clear recyclable objects, which may cause memory fragmentation

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

[En]

Tagging algorithm: similar to the previous one, marking inventory objects, clearing recyclable objects, and sorting surviving objects will not cause memory fragmentation, but with more demarcation process, the efficiency is a little less than the previous one.

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

[En]

Generation-by-generation collection algorithm: according to different generations, different algorithms are used; generally speaking, the new generation uses replication algorithm; the old age uses markers to remove fire marks.

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

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

[En]

I am familiar with the transport layer, so the interviewer can’t stand the intermittent answer to this question and interrupts me directly.

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、数组和链表区别?

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

[En]

The array is a sequential structure, that is, at the physical level, the data is stored adjacent to each other; the linked list is a linked storage structure, which stores the address of the next data; and the array supports immediate lookup on the query, which is more efficient. Insert and delete operations require mobile space and are relatively inefficient, while linked lists are the opposite.

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面试

Original: https://www.cnblogs.com/lyuzt/p/12520837.html
Author: 大数据的奇妙冒险
Title: 棒谷科技Java面试

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/114940/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

最近整理资源【免费获取】:   👉 程序员最新必读书单  | 👏 互联网各方向面试题下载 | ✌️计算机核心资源汇总