字节跳动客户端开发实习一面凉经

飞书视频面 2.22, 19:00,70mins

1. String 类的不可变性

内部的char[] 或 byte[] 的修饰符为 private final,final 使其只能指向该对象数组,private修饰 同时没有提供set、 get方法导致外部类无法访问,String类的修饰符为final,无法被其他类继承,保证了以上的机制不被破坏;

2. String类为什么要设置为不可变 (不会)

百度答案:https://blog.csdn.net/weixin_45525272/article/details/127729538

3. 给的代码场景 大意是并发一百个线程 对num加1最终的结果,以及如何优化

最开始num没有加volate,并发执行num加1操作,最坏的结果可能num=2,最好的结果num=100,num的值在[2,100];

代码优化:给num加 volate关键字, 仍然不能保证结果正确,因为volate不保证原子性; 加Synchronized关键字,且锁的是类对象才能达到线程安全。面试官继续问优化-- 答了加Lock锁

4. ReentrentLock 和 Synchronized 的区别

ReentrentLock 是基于API完成的,使用了AQS队列和CAS实现,Synchronized 是基于JVM实现的,使用Monitor对象锁,答了Synchronized 的锁优化,由Monitor对象答到对象实例化的过程,对象头中MarkWord;

5. 偏向锁的过程

根据当前获得锁对象的线程是否上一个获取对象的线程id,若相同则直接操作该共享资源,id不相同则表示有两个以上线程争抢资源,将偏向锁撤掉升级为轻量级锁

6. 自旋锁的优点缺点

自旋锁会一直占用cpu资源轮询的去尝试获取对象锁,优点是不用将线程阻塞,可以很快的响应用户请求,因为线程从阻塞到再次获取cpu执行权等待的时间长,不利于低延时;缺点是当有很多线程都在自旋状态的话会大量浪费cpu资源;所以推荐当线程数比较多的情况下将自旋锁升级为重量级锁,使用AQS队列管理线程的阻塞唤醒和唤醒后的锁分配问题;

7. 还是第3个问题的场景继续优化

答了使用线程池去创建线程,而不是在一个for循环中创建100个线程;

8. 线程池的优点,几个重要的参数,如果有多个任务同时产生,线程池的执行流程

9. 单例模式

手写了懒汉式的单例模式,写了几种优化实现,从线程不安全 优化为 在方法上加 synchronized保证线程安全但是效率差,优化到 在方法内加synchronized代码块 但效率还是比较差, 再优化到 双重判断 保证线程安全和效率,最后优化为 给对象加volate 保证其有序性;

10. ThreadLocal 的理解

key为弱引用,value为强引用,答了强软弱虚的四中引用差异

11. ThreadLocal 中key为什么要设置为弱引用,value要设置为强引用 (不会)

百度答案:https://blog.csdn.net/foxException/article/details/123496254

12. hashMap 的一系列八股

hashMap 的hash算法、 为什么数组长度始终维护为2的次幂,初始化时若设置的不是2的次幂怎么把他变为为2的次幂;

13. 进程和线程区别

答了进程、线程、协程的八股;

14. 进程为什么要设置虚拟内存

答了虚拟内存的映射,面试官不满意。。

百度答案:https://www.php20.cn/article/337

15. 项目中的 SQL 调优

从不加索引的全表扫描 ,到加了一个普通二级索引的扫描索引树,到改为联合索引使得在二级索引树中就能得到需要的字段值,避免了回表的发生;

16. MySQL 的数据结构

因为加索引的目的就是为了快速查到数据所在的位置;讲了为什么不用O(1)复杂的哈希索引,排除o(1)后,就只能用O(logN),讲了为什么不用BST、AVL、红黑树、B树的缺点,最终推出了要用B+树;对比B树讲了B+树的优点;

17. easy级的算法题 二叉树的最近公共祖先;

算法菜死了,没 a 。。。

18. 反问面试评价:基础知识比较牢固,代码能力需要加强。 寄

#我的实习求职记录##字节##双非本科如何走出求职困境##24届实习#
全部评论
宇宙第一厂还是难的啊
1 回复 分享
发布于 2023-02-23 16:55 四川
菜🐶
点赞 回复 分享
发布于 2023-02-22 21:59 河南
请问一般在哪里投简历?招聘软件好多已读不回
点赞 回复 分享
发布于 2023-02-23 17:54 广东
老哥投了多久约面的
点赞 回复 分享
发布于 2023-02-23 19:49 湖北
楼主你是啥层次学校啊,我也投了这个简历关直接给我拒了
点赞 回复 分享
发布于 2023-02-24 17:25 湖南
可以试试我们
点赞 回复 分享
发布于 2023-03-06 14:23 福建
前面问的这么难,最后一个easy给挂了,太不值了
点赞 回复 分享
发布于 2023-03-07 12:03 湖北
为啥一点安卓都不问?
点赞 回复 分享
发布于 2023-03-08 20:20 重庆

相关推荐

算法题: 1, 2, 5, 10 硬币组成n元的组合方式答: 完全背包的动态规划, 但是递推公式有点问题, 没做出来, 应该是求出用不用第i硬币的加法而不是取max类似:********************************************************问题1. 上次面试有哪些不会?学了吗?2. 什么情况下数据会进入老年代?3. JVM老年代会不会被GC?4. 为什么GC要分成不同的年代?5. GC的分代内存是连续的还是零碎?各有什么好处?坏处?6. 数据链路层、网络层、传输层为啥要分层, 各层的职责7. 那为啥要分呢, 不分不是更好8. 传输层 什么是链接?9. 如果网络某一个路由器断开3s, 链接还存在吗?10. 进程间通信方式共享内存, 进程A 存放字符串的指针, 进程B读指针,然后print(指针) 会打印出什么?11. 你能讲讲你个人的优势在哪里?回答:1. 上次关于JVM进程的详解没有讲清楚, 这次详细讲解了new 一个对象的全过程● 类加载检查, 看下这个对象所属的类有没有加载、链接、初始化成功, 否则先加载类(JVM类加载具有动态加载的特性)● 分配内存, 分配方式根据内存模型的规整与否(关系GC的选择)● 内存零值赋值● 初始化对象头,包括这个对象的年龄代、字面量、属于哪个类的元数据等, 其实就是标记字段 + 类 指针● Init(), Java程序看起来,对象的创建函数,字段init(), 对象的地址分配给引用变量● JVM内存模型分为不同的年龄代, Eden Survivor Old等● 年龄代存在对象头中, 用于记录GC情况, 当一个对象对于GC Root没有被引用的地方,即不可达时, 会被标记, 后续再次会被删除2. Eden在经过一次MoniGC 还存活的对象进入S0、S1区, 年龄+1, 年龄超过GC器阈值(0 -15)可以进入老年代, 同时大对象也可以进入老年代3. 会。被回收的直接原因是因为对象的引用可达性不存了,GC一般分为部分GC和Full GC, 部分GC可以在单独的Eden、Old乃至混合区域GC,如果内存不够还会触发Full GC 引用不可达的老年代对象一样会被删除4. 不同年代内存区域有各自的适用范围, 比如Eden每时每刻都会有大量的对象死去, 适用用标记-复制, 而老年代对象存活时间较长, 用标记-清除、标记-整理更好, 分代GC效率更高5. 零碎的。零碎的好处是空间利用率高, 只需要一个逻辑标识就能知道是哪个年龄代, 坏处是没有利用好空间局部性。连续的好处是利用了空间局部性, 但是容易有碎片。6. 有点问穿, 数据链路层的基本单位是数据帧, 用于咋局域网内的物理机器地址mac传输, 网络层是在不同的子网内ip传输, 传输层是在找到了应用端间口建立的稳定或者不稳定的链接7. 。。。。我回到是耦合性, 解耦了, 不同层有不同的协议解决各自的问题, 混沌系统太复杂的很难排查, 分层每次只需要接受下层接口,给上层提供服务就行,而不用关心实现细节8. 我认为的链接是指在目标端口的过程中, 无论是IP协议会在不同路由器留下转发映射, 还是APR协议留下目标MAC IP转换, 在逻辑上是有一条通路的, 这就是链接9. 我认为如果路由器的ip映射也消失了, 就会断开链接, 如果没有不一定会断开, 还会重新去找路径链接, 如果在没有超过ACK确认的时间内找到了则不会断开(这段感觉在胡言乱语)10. 这不太会, 我答的是地址或者HashCode, 提到了很多虚拟地址的情况, C++相关的问题, 后面查资料是因为每个进程的虚拟地址空间不一样, 进程B是打印不对的11. 从个人专业学习、工程经验、团队经验、个人性格四个方面回答
查看11道真题和解析
点赞 评论 收藏
分享
02-17 11:22
已编辑
华南师范大学 C++
2/13 一面75min你的ai项目是怎么去构建的,你在其中承担了什么工作(没回答道他想要的点,反复问了好几次)2,你的项目有用到aop,请你讲讲aop,你具体是怎么在项目实现的(代码实现)3,如果不用java提供的切点表达式和通知,你该怎么实现aop4,给你一个sql语句(主键a,联合索引b,c,select a,b,c from table where b = x and c = y and a = z),请问他的索引有没有使用,请你说说他具体是怎么查找的5,上面的语句你可以怎么进行优化,在不改变mysql字段的情况下你该怎么进行代码层面的优化6,请你讲讲事务的特性,请你讲讲undolog,redolog,binlog的区别,他们在一条sql语句执行后分别会做什么7,请你讲讲事务的隔离性,请你讲讲mvcc,请你说说mvcc有哪些优点和缺点8,请问你的学习成绩怎么样,你的绩点多少9,一条https的url从按确认到数据渲染到页面这期间发生了什么10,请你说说http和https的区别11,请你说说tls用了什么加密技术,对称加密和非对称加密的优缺点12,项目中用到websocket,请你解释一下它的使用场景,它的优缺点,你是否还有其他代替使用。算法题 最长连续非重复字符串2/14 二面60min算法题 硬币组合数(写出来20分钟,讲解20分钟)你有上过哪些数学课,讲讲微积分的概念,贝叶斯定理讲讲OSI七层模型,讲讲数据链路层的主要职责,网络层的主要职责没了。。。。2/17  感谢信  二面寄
查看14道真题和解析
点赞 评论 收藏
分享
评论
5
85
分享

创作者周榜

更多
牛客网
牛客企业服务