首页 > 笔经面经 > 南京小米java研发面经

南京小米java研发面经

头像
瑶瑶135755 #小米22届提前批面试#
编辑于 2021-08-07 12:44:39 APP内打开
赞 25 | 收藏 96 | 回复19 | 浏览4576

校招一面,南京Java岗位。

面试官没开摄像头,就我这边开了,南京小米java研发。面试官人不错,就是风格和普通人不一样吧,我觉得还是蛮平易近人的。

1.     自我介绍

2. Osi的七层模型说说

3.     我一听你就是背的(是的)。这八股文你是哪里背的(GitHub的javaguide)。那我问问你八股文里面没有的。

4. 然后就问了这,Tcp三次握手中间传输了ack,syn值,那么这些值有什么用?(不知道,确实没有八股文介绍这点。)

l  通过维护这些序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。

5. Http  header里面的字段,对研发岗有用的字段。

Header

解释

示例

Accept-Ranges

表明服务器是否支持指定范围请求及哪种类型的分段请求

Accept-Ranges: bytes

Age

从原始服务器到代理缓存形成的估算时间(以秒计,非负)

Age: 12

Allow

对某网络资源的有效的请求行为,不允许则返回405

Allow: GET, HEAD

Cache-Control

告诉所有的缓存机制是否可以缓存及哪种类型

Cache-Control: no-cache

Content-Encoding

web服务器支持的返回内容压缩编码类型。

Content-Encoding: gzip

Content-Language

响应体的语言

Content-Language: en,zh

Content-Length

响应体的长度

Content-Length: 348

Content-Location

请求资源可替代的备用的另一地址

Content-Location: /index.htm

Content-MD5

返回资源的MD5校验值

Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==

Content-Range

在整个返回体中本部分的字节位置

Content-Range: bytes 21010-47021/47022

6.     银行家算法

l    当新进程进入系统时,它必须说明其可能需要的每种类型资源实例的最大数量,这一数量不可以超过系统资源的总和。当用户申请一组资源时,系统必须确定这些资源的分配是否处于安全状态,安全,则分配,不安全,那么进程必须等待其他进程释放足够资源为止。

l  为了实现银行家算法,需要定义一下几个数据结构,n表示系统进程的个数,m表示资源类型的种类:

l  available——长度为m的向量,代表每种资源的现有实例的数量。

l  max——n*m矩阵,定义每个进程的最大需求量。

l  allocation——n*M矩阵,定义每个进程现在已经分配的各类资源的实例数量。

l  need——n*m矩阵,定义每个进程还需要的剩余的资源

7.     死锁最容易破坏的两个条件是什么。

l  不可抢占:

l  如果占有某些资源的一个进程进行进一步资源请求时被拒绝,则该进程必须释放它最初占有的资源。

l  如果一个进程请求当前被另一个进程占有的一个资源,则操作系统可以抢占另外一个进程,要求它释放资源。

l  循环等待:通过定义资源类型的线性顺序来预防。

l  如果一个进程已经分配了R类资源,那么接下来请求的资源只能是那些排在R类型之后的资源类型。该方法比较低效

8.     对称加密和非对称加密。

9.     你最近在看什么有关java的书。

10.   你知道java的特点的抽象性么,用你的语言说说抽象是什么意思。

l  具体指客观存在着的或在认识中反映出来的事物的整体,是具有多方面属性、特点、关系的统一。抽象指从具体事物中被抽取出来的相对独立的各个方面、属性、关系等。两者在人的认识中互相联系和转化。认识从低级的感性的具体认识开始,经分析形成概念、判断的抽象认识,又经综合再现具有多方面属性、特点、关系的统一整体,形成高级的理性的具体认识。

11.   继承的缺点。

l  ①:父类的内部细节对子类是可见的。

l  ②:子类从父类继承的方法在编译时就确定下来了,所以无法在运行期间改变从父类继承的方法的行为。

l  ③:如果对父类的方法做了修改的话(比如增加了一个参数),则子类的方法必须做出相应的修改。所以说子类与父类是一种高耦合,违背了面向对象思想。

12.   类加载机制,解析阶段还可以再细分你也说说。

13.   八种基本数据类型和他们的包装类型。

14. Integer是不是可变的,存储在jvm哪个区域。

15.   看你简历写了GC优化,你的GC优化过程。

16.   你们是通过什么方法看gc时间,线程等关键参数的。

jstat(JVM Statistics Monitoring Tool) 使用于监视虚拟机各种运行状态信息的命令行工具。 它可以显示本地或者远程(需要远程主机提供 RMI 支持)虚拟机进程中的类信息、内存、垃圾收集、JIT 编译等运行数据,在没有 GUI,只提供了纯文本控制台环境的服务器上,它将是运行期间定位虚拟机性能问题的首选工具。  
JConsole 是基于 JMX 的可视化监视、管理工具。可以很方便的监视本地及远程服务器的 java 进程的内存使用情况。

JConsole 可以显示当前内存的详细信息。不仅包括堆内存/非堆内存的整体信息,还可以细化到 eden 区、survivor 区等的使用情况。

17.   说说AQS和Reentrantlock以及两者关系。

18. Reentrantlock的获取资源,资源有锁和没锁的情况下分别会怎么操作。

l  一个线程获取锁失败了,被放入等待队列,acquireQueued会把放入队列中的线程不断去获取锁,直到获取成功或者不再需要获取

19. Reentrantlock和syn是不是公平,可重入,syn的不公平体现在哪里。

l  Syn没有阻塞队列,Reentrantlock是有的,通过syn锁升级可知,如果无法获取资源,会sleep,等待之后唤醒再次争夺,所以是非公平。

20.   说说线程进入线程池的流程,4个流程。

21.   说说四个拒绝策略的英文,我不想听中文,中文你八股文肯定背过了。

l  ThreadPoolExecutor.AbortPolicy:抛出 RejectedExecutionException来拒绝新任务的处理。

l  ThreadPoolExecutor.CallerRunsPolicy:调用执行自己的线程运行任务,也就是直接在调用execute方法的线程中运行(run)被拒绝的任务,如果执行程序已关闭,则会丢弃该任务。

l  ThreadPoolExecutor.DiscardPolicy: 不处理新任务,直接丢弃掉。

l  ThreadPoolExecutor.DiscardOldestPolicy: 此策略将丢弃最早的未处理的任务请求。

22.   线程池参数设置,你怎么压测的?看哪些参数判断压力大小,如果什么方法看这些参数的?(我就说看cpu和内存使用情况,他直接吃惊说还能这么玩)

l  线程池活跃度计算公式为:线程池活跃度 = activeCount/maximumPoolSize。这个公式代表当活跃线程数趋向于maximumPoolSize的时候,代表线程负载趋高。事中,也可以从两方面来看线程池的过载判定条件,一个是发生了Reject异常,一个是队列中有等待任务。

l  JDK原生线程池ThreadPoolExecutor提供的几个public的getter方法,可以读取到当前线程池的运行状态以及参数。

23. MySQL命令的pk全称是什么?

24.   MySQL索引,我记得javaguide里没仔细说过这两点,那你来说说看:最左匹配和联合索引

例如索引是 key index (a,b,c)。 可以支持 a 、a,b 、a,b,c 3种组合进行查找,但不支持 b,c 进行查找。




25.   算法题一个是青蛙跳台阶剑指 Offer 10- II. 青蛙跳台阶问题 - 力扣(LeetCode) (leetcode-cn.com) ,还有就是10进制转16进制。已经在codetop提交了.许愿2面




收到反馈,已经通过了,下周一二面,gogogo!
本文参加了牛客的《秋招面经大赛 》,点个免费的赞把谢谢。


更多模拟面试

19条回帖

回帖
加载中...
话题 回帖

相关热帖

笔经面经近期热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐