字节跳动(视频面)2019.5.28
投的是 后台开发。
面试官很准时。因为是视频面,所以就早早回宿舍了,在宿舍面试的。听师兄师姐说 字节跳动的有好多是问的算法,不过,这次是我运气好吧,算法问了一道单链表逆置,然后写了出来,就是给的那个编译界面不是很好。然后我尝试运行 最后出现了问题,scanner 需要导包,然后面试官还给我说,可以百度一下,看看是导的哪个包。总之,不管过不过吧,也想记录下来。
面试了一个小时,然后面试官说我这两个项目挺简单的。
1.项目中涉及了安卓,然后安卓的四大控件说一下:
activity; service; content.provider ; broadcast.receiver
都用过哪些?只用过 activity
然后 如何向 ui这个界面传递消息:handler,可以用其他方式?
2.虚拟机中垃圾回收机制:
判断一个对象是否存活的方法:引用计数算法,GCRoots
可以自己写一个 这样的算法吗?(引用链如何实现)
3.java中有内存泄露吗(https://www.cnblogs.com/camile123/p/8472349.html)
内存泄漏是指不再被使用的对象或者变量一直被占据在内存中。但是java中有垃圾回收机制,它能够将不再被使用的对象,自动从内存中清除。
即使这样,java中也存在着内存泄漏的情况:
一:当长生命周期的对象持有短生命周期的对象的引用,就很可能发生内存泄漏。尽管短生命周期的对象已经不再需要,但是长生命周期的对象一直持有它的引用导致其无法被回收。例如,缓存系统;加载一个对象放在缓存系统中,一直不去使用这个对象,但是它一直被缓存引用,所以不会被回收导致缓存泄漏。
检查java中的内存泄漏,一定要将程序各个分支情况都完成执行至结束,然后看其是否被使用过,如果没有才能判定这个对象属于内存泄漏。
二:当一个对象被存储进HashSet集合中,就不可修改这个对象中用于计算哈希值的属性了。否则,对象修改后的哈希值与刚添加进HashSet集合时的哈希值不一样,此时如果将当前对象的引用作为参数,用contains方法判断对象是否存在,则会返回找不到对象的结果。这会导致无法从HashSet单独删除当前对象,造成内存泄漏
4.wait() notify()
5.ndk
6.TCP 四次挥手的最后一个 time_wait的作用:
确保 最后一个ack能够到达服务端,如果服务端没有接受到 ack时候,客户端可以再次发送。
7.TCP和UDP的区别
基于连接和无连接; 对系统资源要求(tcp的多,udp较少);upd程序简单;流模式和数据报模式;tcp保证数据正确性,udp可能丢包;tcp保证了数据的顺序性。
8.TCP是如何保证安全的
数据包校验;超时重传机制;应答机制;对失序数据包重排序;流量控制
9.HTTPs的连接过程
10.post和get的区别
get被强制服务器支持;浏览器对url的长度有限制,所以get请求不能代替post请求发送的大量数据;
get请求发送的数据更小;get请求是不安全的;get请求是幂等的;post请求相对get请求来说是安全的。
11.用户登录一个页面之后,然后跳转到另外一个页面,服务器是如何判断该用户是同一个用户?
用户登录 跟 session和cookie有关, session是存放在服务器上,cookie是存放在 浏览器中,但是 session_id 存放在 cookie中,这样用户登录的时候服务器就能判断 是不是同一个用户。
12. 给100亿个整型数据,对该数据进行排序?
对这100亿个数据遍历,同时,分到桶里面,桶之间是有序的;
对每个桶里面的数据,使用哈希进行存储,保证了桶里面的数据是有序的。
13.写一个单链表逆置
14.B 和B+树的区别
- 有k个子结点的节点必然有 k个关键码
- 非叶子节点具有索引功能,跟记录有关的信息存储在叶子节点中
- 叶子节点构成有序链表,可以按关键码顺序的次序遍历全部记录
15.进程和线程的区别
- 通信方式不同:进程是 管道,信号量,消息队列,信号,套接字;线程是 锁机制,信号量机制,信号机制
- 调用方式:线程不必通过内核调度,不占用资源;进行需要内核调用,占用资源。
16.为什么线程比进程更轻量?
线程
线程在linux中有时被称为轻量级进程(LightweightProcess,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源(共享整个虚拟地址空间)。