admin管理员组文章数量:1568582
前言
坐标:小米base南京,百度base上海。
小米一面8.28
- 深挖项目和竞赛
主要是实验室智能机器人相关的项目(系统设计、机器人视觉、算法落地);
经典被问为什么研究算法相关的,工作要找开发(算法太难了TT);
竞赛主要是数学建模(两次国赛两次省赛)。 - 对安卓系统有哪些理解
一开始答的activity运行起来之后的一系列过程,答偏了,面试官想问自己对安卓系统的理解,坦诚没有思考过。(问点Java基础吧) - JAVA中的引用类型
- 强引用,任何时候都不会被;垃圾回收器回收,如果内存不足,宁愿抛出OutOfMemoryError
使用场景:我们平常大部分使用的场景都是使用了强引用,比如new创建对象,反射获得一个对象等。 - 软引用,只有在内存将满的时候才会被垃圾回收器回收,如果还有可用内存,垃圾回收器不会回收。
软引用可以和一个引用队列进行关联,如果这个软引用的对象被垃圾回收,就会将这个软引用加入到关联的队列中去。 可用于高速缓存。 - 弱引用(WeakReference),生命周期更短,只要垃圾回收器运行,就肯定会被回收,不管还有没有可用内存。
使用场景: 弱引用用于生命周期更短的,对内存更敏感的场景中,比如占用内存很大的Map,java api中就提供了WeakHashMap使用,就会是的大Map被及时清理掉。 - 虚引用(PhantomReference),虚引用等于没有引用,任何时候都有可能被垃圾回收。虚引用必须和引用队列联合使用,引用队列的作用和软弱引用一样。
使用场景: 我觉得他的使用场景应该在判断一个对象是否被垃圾回收了,什么时候引用队列有新的引用入队了,就说明他被回收了。
- 强引用,任何时候都不会被;垃圾回收器回收,如果内存不足,宁愿抛出OutOfMemoryError
- 栈和队列,应用场景
FILO,FIFO。使用场景答得比较随意,提了一些栈的应用(方法调用过程对应入栈出栈、安卓activity任务栈),队列主要用在一些需要公平处理的场景,消息队列。阻塞队列。
这个问题被问过很多次,每次都是随意回答一下,希望大佬们评论区指点一波怎么答最好。 - 生产者消费者问题中的锁的传递,PV操作
生产者:每次执行时先判断当前库存是否超过负载(最大库存),超过的话就wait,释放锁;否则库存自增,然后唤醒其他线程。
消费者:每次执行时先判断当前库存是否为零,是的话就wait,释放锁;否则库存自减,然后唤醒其他线程。
PV操作当时没答上来,后来查了一下应该是基于信号量的方式实现消费者生产者问题。因自己不能确保理解正确了,先丢个链接Java实现PV操作 ,有大佬理解的可以评论区讨论一下! - 宏观的描述垃圾回收的思路
先判断哪些对象需要回收,然后根据对象特性确定相应的回收算法,选用合适的垃圾回收器。 - 怎么判断对象该不该回收,说说自己的理解。如果出现循环引用怎么办
引用计数法、可达性分析法 - 可达性分析法中淘汰的对象一定会被回收吗?
即使在可达性分析算法中不可达的对象,也并非"非死不可"的,这时候他们暂时处在"缓刑"阶段。要宣告一个对象的真正死亡,至少要经历两次标记过程: 如果对象在进行可达性分析之后发现没有与GC Roots相连接的引用链,那它将会被第一次标记并且进行一次筛选,筛选的条件是此对象是否有必要执行finalize()方法。当对象没有覆盖finalize()方法或者finalize()方法已经被JVM调用过,虚拟机会将这两种情况都视为"没有必要执行",此时的对象才是真正"死"的对象。
如果这个对象被判定为有必要执行finalize()方法,那么将会被放置在一个叫做F-Queue的队列之中,并在稍后由一个虚拟机自动建立的、低优先级的Finalizer线程去执行它(这里所说的执行指的是虚拟机会触发finalize()方法)。finalize()方法是对象逃脱死亡的最后一次机会,稍后GC将对F-Queue中的对象进行第二次小规模标记,如果对象在finalize()中成功拯救自己(只需要重新与引用链上的任何一个对象建立起关联关系即可,譬如把自己(this关键字)赋值给某个类变量或者对象的成员变量),那在第二次标记时它将会被移除出"即将回收"的集合;如果对象这时候还是没有逃脱,那基本上它就是真的被回收了。 - 具体怎么做呢,挑一个垃圾回收算法谈谈自己的理解
说了复制算法。 - 复制算有什么问题
仅针对新生代效果好,浪费内存(只能用一半)转移存活对象时会导致用户线程无法定位引用对象。 - tcp怎么保证可靠性
- 序列号和确认号机制:
TCP 发送端发送数据包的时候会选择序列号,接收端收到数据包后会检测数据包的完整性,如果检测通过会响应确认号表示收到了数据包。 - 超时重发机制:
发送端发送了数据包后会启动一个定时器,如果一定时间没有收到接收端的确认,将会重新发送该数据包。 - 对乱序数据包重新排序:
从 IP 网络层传输到 TCP 层的数据包可能会乱序,TCP 层会对数据包重新排序再发给应用层。 - 丢弃重复数据:
从 IP 网络层传输到 TCP 层的数据包可能会重复,TCP 层会丢弃重复的数据包。 - 流量控制:
TCP 发送端和接收端都有一个固定大小的缓冲空间,为了防止发送端发送数据的速度太快导致接收端缓冲区溢出,发送端只能发送接收端可以接纳的数据,为了达到这种控制效果,TCP 用了流量控制协议(可变大小的滑动窗口协议)来实现。
【滑动窗口详解】
滑动窗口通俗来讲就是一种流量控制技术。
它本质上是描述接收方的TCP数据报缓冲区大小的数据,发送方根据这个数据来计算自己最多能发送多长的数据,如果发送方收到接收方的窗口大小为0的话,那么发送方将停止发送数据,等到接收方发送窗口大小不为0的数据报的到来。首次发送数据时的窗口是链路带宽决定。 - 拥塞控制:在数据传输过程中,可能由于网络状态的问题,造成网络拥堵,此时引入拥塞控制机制,在保证TCP可靠性的同时,提高性能,具体为慢启动、拥塞避免、快重传与快恢复……
- 算法题:给定一个多叉树,返回这棵树哪一层所有的节点和最大,返回层号。
本质上就是层序遍历,维护一个层节点和。多叉树第一次写hhh复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import
java.util.*;
public
class
Duochashu {
public
static
void
main(String[] args) {
TreeNode root =
new
TreeNode(
0
);
root.children.add(
new
TreeNode(
1
));
root.children.add(
new
TreeNode(
2
));
root.childr
版权声明:本文标题:面试复盘 | 小米一二面(已定SP)+百度一二三面(意向) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1726414761a1069675.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论