1、网络基础,ABC网络分类及范围,主机地址网络地址掩码地址,对应的内网范围
2、正则表达式匹配
3、TCP握手挥手超详细细节
4、进程间通信方式,管道/信号量/共享区/并发
5、常见排序算法,时空复杂度,稳定性
6、SQL高级语句,单表分组,多表联合查询,EXPLAIN性能优化,EXIST/IN区别,通配符使用,SQL注入
7、大数据题目,所有数据无法一次性载入内存,考虑使用hash映射分批处理,或者使用布隆过滤器/堆求TopN。
8、MySql存储引擎底层细节不了解,区别不明确,没有详细了解过
9、
1、cookie和session如何配合,session如何存储
请求头,sessionID,session对应hash表内存
2、TCP如何确保连接安全有效
校验和(数据段相加+进位再取反,不能确保有效),序列号(字节数据编号),确认应答(ACK确定发送端下一个传送序列),超时重传(数据段/ACK延迟或者丢包,500ms指数增长强行关闭),流量控制(16位窗口大小<65535字节64k>左移M位<窗口扩大因子>,ACK将剩余缓冲区填入TCP头部,发送端窗口探测),拥塞控制(慢启动时拥塞窗口先加倍再线性取其与ACK缓冲区大小较小者,拥塞时阈值减半)
3、TLS基本原理(对称非对称加密),GET/POST请求区别
TLS过程:client hello,发送随机数A,协议版本号,支持的加密套件;
server hello,发送随机数B,协议版本号,选择的加密套件,sessionID,server证书CA;
server request certificate request,发送server证书并请求验证客户端证书,server hello done;
client校验serverCA,通过之后产生随机数C(preMasterKey),并使用serverCA公钥加密发送;
client certificate,响应server请求,发送clientCA,并使用clientCA私钥加密随机数D,随clientCA发送给server;
server根据随机数ABC使用约定的加密套件生成master key进行加密finish信息,发送给client;
client重复上一步骤发送给server;
握手完成,建立安全连接,之后的信息会使用master key来加密信息。
REST:GET用于请求资源或者列表,POST+URL+Body用于创建资源
安全:GET一般用于URL &拼接,POST用Body,但不一定,GET请求会被记录在客户端到服务器的中间节点(网关代理等)的access log,并无本质区别,GET请求可存为书签,请求幂等,POST请求不幂等。都是HTTP明文传输,不安全。
编码:GET URL一般为GBK/UTF编码,不同浏览器转换结果不同,建议使用JS先行下手,保证和后端通信正常;POST使用Body会指定Content-Type和charset。POST的表单Content-Type有针对k-v的application/x-www-form-urlencoded,也有针对二进制文件的multipart/form-data。
请求数量:有点跑题,请求数量可以由客户端和服务器约定,比如POST发送文件,服务器先读取header的文件名称/用户权限/文件大小,合格后返回100-continued继续传送Body,否则回复400错误。
URL长度:与GET/POST无关,由服务器规定,限制长度主要是为了防止第三方进行长URL攻击服务器。
4、MySQL字符集utf-8和utf-8mb4区别,排序规则utf_unicode_ci/utf_general_ci
mb4=most bytes 4,用来兼容4字节的不在基本多文本平面的 Unicode字符(更多类型的汉字/emoji表情/新增unicode),utf8只能支持3字节的字符。
utf8_unicode_ci比较准确,utf8_general_ci速度比较快。
utf8_unicode_ci的最主要的特色是支持扩展,即当把一个字母看作与其它字母组合相等时。
utf8_general_ci是一个遗留的 校对规则,不支持扩展。它仅能够在字符之间进行逐个比较。这意味着utf8_general_ci校对规则进行的比较速度很快,但是与使用utf8_unicode_ci的校对规则相比,比较正确性较差
5、5个数列从小到大排列好,每个数列不存在重复元素,找出他们的交集
6、小程序token验证问题
SpringSecurity+JWT解决,认证和授权
1、动态代理模式,Java反射调用类方法
2、B+树底层实现原理
3、ReentrantLock和Synchronized具体区别
4、Spring常用注解与含义,Spring bean生命周期
https://www.jianshu.com/p/3944792a5fff
ApplicationContext创建Bean生命周期
BeanFactory创建Bean生命周期
其他:面试官为研发组长,平时负责Java开发后台接口,团队8月成立,大部分来自知名互联网公司如阿里(15年入职P7负责学习强国)美团(金融)。
1、HTTP常见状态码
2、TCP3次握手4次挥手具体流程,一定要非常具体,CLOSE_WAIT等阶段要清楚
3、浏览器输入URL之后的原理,要很详细
4、浏览器异步加载
5、对单例模式的理解
6、多个地点访问图片效率问题?对象存储+CDN加速
7、redis/MySql数据一致性保持方法,定时任务+消息队列
8、多个用户同时点赞会怎么样?如何解决并发问题?
redis hash结构key=点赞人::被点赞人,value=1/0=点赞/取消点赞,配合Spring Task定时同步到数据库
9、token一对秘钥泄漏如何解决?(JWT还会有秘钥对泄漏问题吗,疑惑,面试官是不是听错的我的回答)
服务器同时公布多个秘钥对,定期更换新的秘钥对,一对秘钥泄漏立即启用下一套秘钥,client在上一对失败后自动尝试下一组。
面试官建议:多寻找项目性能优化的点,比如高频的点赞操作,尽量多用新的技术,直接把图片上传到后台很少人在用了现在
总结:第一次面试腾讯,体验非常nice,开头20分钟做了两道easy模式的算法题,有一道思路想错了,虽然全程体验很好,但是并不影响面试官挂我…
1、小程序及常见web开发,内网穿透
2、JPA配置文件常见参数(好无聊的问题)
3、maven依赖冲突如何解决
4、Spring Boot常见注解及其作用,@Autowired和@Resourced区别,如何加载上下文并用JUnit进行测试,JUnit常用测试方法
5、讲一下对ThreadLocal的理解,底层实现原理(HashMap
6、线程池实例化方式,4种线程池区别,常见参数以及如何配置,各种拒绝策略区别
7、HTTP请求方式,GET/POST请求区别,POST传输文件具体细节
8、MySQL常见索引分类,联合索引失效的情况(%开头,不符合最左匹配原则,未进行相等比较)
9、分布式与SpringCloud微服务,RPC,Dubbo
没有专门的HR,老板懂点技术亲自下场捞人,电话简短面试,然后2个后端+2个前端,二面的架构师在其他公司全职,给路卡兼职指导,实习待遇200一天,饭补300,交通200,租房需要1500左右。
1、介绍自己一个项目(家乡分享的小程序),你负责哪些模块
2、微信授权流程,code和openid的作用
3、微信与后台api交互如何实现授权认证(Spring Security+JWT)
4、GET/POST请求有何区别
5、HTTP如何传输文件,多文件情况呢,headers里面multipart了解吗,boundary干嘛的
6、Spring的IOC/AOP讲一下,什么是幂等性,应该怎么实现
7、点赞功能怎么设计(下边有,不赘述了)
8、MD5算法干嘛的,两个不同文件的MD5一定不同吗,为什么
9、对称非对称加密了解过吗,私钥加密公钥可以解开吗,数字证书怎么用的
10、设计一个秒杀系统/抽奖系统,从架构的层面去考虑,怎么划分模块,每个模块具体怎么去设计
1、微信用户身份认证授权,session具体存储内容
2、DAO用过分页查询吗
3、redis点赞功能如何设计,数据一致性和系统性能如何解决
答:开始用hash存储点赞信息,系统初始化是从DB载入redis,定时任务写入数据库,容器异常关闭摧毁bean时写入DB,防止数据丢失。
改进:现有方案系统启动初期耗时久,用户体验差,而且key设置不合理,建议冷热数据分开,当需要某个用户的点赞信息和点赞列表时,查DB后使用redis的list+string存储,hash存放新增点赞信息即热数据,定期把hash的新增数据同步到db即可。再完善一点可以考虑集群配置+AOF持久化。
4、线程进程区别(答了JVM线程共享私有区域以及上下文切换的资源消耗,应该还有优先级调度这些东西)
5、消息队列用过吗,怎么理解的(异步/削峰/解耦)
6、常见排序算法,然后问了两个算法的主要思想以及时空复杂度稳定性
7、TCP3次握手细节,一定要非常细,包括client和server发出接受消息后的状态
8、给定栈出栈入栈队列,计算最小容量(送分)
9、常见设计模式,结合Spring讲了一下单例/观察者/代理/工厂模式,顺带介绍了一下IOC和AOP特性
10、**流量劫持**了解过吗,讲一下分类,怎么防御(我答了CSRF)
11、你另一个项目还有什么可以改进的地方吗(数据库不符合3NF规范/前后端没有完全分离/数据传递不规范,很多冗余数据/未设计DTO/不应该使用外键)
1、看你开发过小程序,如果小程序启动初期需要从服务器加载视频播放,有什么比较好的性能优化思路,让用户感觉没有明显的加载过程(我…,面试官提示了一下从生命周期和本地存储方面去考虑,苟了半天设置CDN增加图片遮挡后台请求视频感觉也没答到点子上,面试官也不太满意,希望有大佬指点一下)
2、微信授权小程序登录流程
3、图片上传存储怎么做的
4、点赞如何设计(可能就这一个点能挖一挖了…)
5、MySQL用过哪些索引,项目中多表查询多吗,做了什么优化,有没有碰到索引失效的问题,怎么排查的(未遵循最左匹配原则导致发生全表扫描)
6、InnoDB引擎有什么优点,查count那个引擎好点,InnoDB对这个命令做了哪些优化,性别的列可以建索引吗,为什么不推荐建
7、32/64位系统有什么区别(…)
8、最近在学什么,怎么去学的,为啥学这个
唠嗑,本科什么方向,为什么读研究生,研究生什么方向,学习成绩怎么样,什么时候毕业,可以保证实习啥时候开始持续多久,有女朋友吗,日后规划在哪里工作,深圳可以接受吗,来深圳以后会遇到什么困难,你怎么去克服。
问了一下HR他们部门,做智慧旅游的,主要和政府部门合作,推进产业信息化,有一个云南啥APP已经上线运行了,进去之后应该会开发应用,疫情期间远程旅游/导览/直播,主要做2C业务,还有以下线上博物馆的应用开发(用户量8千多),推进智能化/网上购票相关,云游敦煌也是已经上线的应用。
基础问题实在分不清了,索性写在一起
1、Spring IOC AOP如何实现,结合常用设计模式讲解
2、AOP和JDK静态代理有何区别,常见应用及方法(日志捕获/异常处理)
3、TCP3次握手4次挥手详细过程(面试官说这个回答的不错,所以后边才出了算法题)
4、一道算法,不难,写的时候有点紧张,LR传的是另外新建的对象,没传指针引用进去。
反转部分单向链表
给定一个单链表,在链表中把第 L 个节点到第 R 个节点这一部分进行反转。
输入描述
n 表示单链表的长度。
val 表示单链表各个节点的值。
L 表示翻转区间的左端点。
R 表示翻转区间的右端点。
输出描述
在给定的函数中返回指定链表的头指针。
示例1
输入
5
1 2 3 4 5
1 3
输出
3 2 1 4 5
5、第二道算法,查找第k小的数,也不难,维护大顶堆限定总数量就可以了,就是太久没刷题,忘了比较器怎么写,还查了百度,尴尬。最后输入输出也没处理好…算法结束就是二面,会换一个面试官
6、用过哪些索引,联合索引失效的情况,举个例子
7、Linux命令用过哪些,查日志error并且统计行数怎么做(忘了统计行数的命令真是尴尬,只想到了cat和grep筛选error)
8、微信授权小程序登录的流程(项目有这个),wx.login产生的code作用以及生成原理
9、OAuth 2授权框架用过吗,讲讲主要授权流程
10、数据库事务ACID特性,四种事务隔离级别解释一下,InnoDB如何实现可重复读原理,MVCC原理,select操作会加锁吗,为什么(我竟然懵逼的回答了不加锁)
11、算法题,链表存储的大数相加计算结果,代码写的一般没运行,口述了思路
12、算法题,有序数组如何建立AVL,口述思路并证明。
回答:找到中点作为根节点,循环左右子树递归建立。思路正确,面试官让证明一下,提示了才想到,总节点数为n,高度 l o g 2 n log_2n log2n,按照之前的思路,左右子树高度分别为 l o g 2 ( n 2 ) log_2(\frac{n}{2}) log2(2n),数学公式可以证明左右子树高度不会超过1,不赘述了。
13、用过抖音吗,点赞操作如何设计,在我的点赞列表中可以看到所以点赞记录倒序排列如何设计数据结构,每划过一个视频如何快速判断是否点过赞,每种方案有什么优缺点。
回答:点赞在app启动初期用list存储点赞列表,然后将新增或者取消的点赞热数据存储到hash中,定期更新到MySQL,但是没办法实现判断是否存在某条点赞记录,然后想到了set,如果按照日期倒序,可以使用zset,作品id作为member,点赞日期作为score,做一个排过序的set。然后面试官说你这样启动初期会等待很久,然后问zset底层如何实现,我…
14、还是点赞的问题,数据库为什么用MySQL,redis持久化到磁盘不可以吗,其他非关系型数据库不可以吗(我只用过MySQL和Oracle reids…,而且关系型数据持久化不太好吧,有没有大佬指点一下)
15、HashMap底层实现,线程安全吗,为什么不安全,rehash是干嘛的,怎么rehash,Node在数组的索引怎么获得
16、JVM gc讲一讲,内存怎么划分,主要gc算法,分代各自采用什么算法,各种算法的优缺点
17、最后我问了他们部门做什么的,一个新APP的后台,主要技术栈是python/golang,负责APP服务端内容/基础/小视频/直播这些后台部分的设计实现。然后问了一下对我技术路线的建议,面试官觉得我自己定的路线太飘了,让我脚踏实地,多想想目前阶段的事情,现在多抓基础知识刷题准备实习,实习之后尽快熟悉业务场景锻炼自己的业务能力准备转正
本来二面面试官去叫hr了,然后hr忙着让我等一下,leader看见了就面了我一会
1、你的项目有什么亮点,自己负责哪些部分,可以继续往那个方向去完善,为什么这么完善
2、你和其他组员比有什么优势
3、你自己以后准备往哪方面去学习
4、问了个设计题,就是电梯调度系统的类结构设计,刚开始没听清还以为是写电梯调度算法,苟了半天没苟出来,尴尬,然后类设计的也不太好
5、让我问问题,我随便问了一个,我没仔细了解他们部门具体业务leader有点不满意感觉,应该是想让我多了解一下先选择一个小部门,然后leader再调整。
纯唠嗑,然后还问了项目的亮点,跟leader前几个问题差不多,吹就完事了,什么时候毕业,是不是统招,意向工作地点,到岗时间,实习时长这些。最后介绍了一下部门业务,2C的,懂车帝APP后台部分,分为社区/内容/架构/直播相关。
hr最后说今明两天出结果,然后吃完饭上官网看了状态变成了已结束,问了内推人这种就是面试挂了,还抱着侥幸以为是面试流程正常走完了,唉,啥也别说了,接着努力吧,一下午白玩,希望csig不要鸽我,只求一个offer
2020.04.21收到了字节hr的通知,面试通过,发了offer,不想等csig了,就这样吧
1、一定要多面试,前期可以先从小厂开始试,面多了知道哪些是高频问题有针对性的去记去理解,干背面经感觉没啥意义,面多了自然就有经验了
2、项目用到的技术栈尽量丰富一点,现在各种中间件分布式架构还是挺重要的,然后要有合适的技术选型原因,别为了用而用
3、问面试官问题别瞎问,问工资问流程他也做不了主,多问问部门相关的业务方向以及专业发展建议比较好
4、不知道是不是提前批快结束了,腾讯的面试感觉降低了难度,虽然截止4.22还没有oc(我可能是进了备胎池…)
5、现在的hr都喜欢问项目了吗…莫不是开发运维都转去做hr了2333