腾讯CDG金融科技面经(已意向书)
一面 2021/9/17 16:00 1h
- 自我介绍
-
我看你意向部门是腾讯广告,其他部门你会考虑吗?
-
Java 里面有三个关键字长得非常接近,final、finally 和 finalize,你说一下对这三个关键字的认识?
-
finally 语句块里面一般做什么事情?
-
比如说你打开了一个 JDBC 连接,在 JDBC 里面取到了字段的一个值,比如说 String 类型的值 123,然后你需要返回,你在 try 里面 return,还有在 finally 里把连接 close,那么他执行时候是先 close 还是先 return?
-
你说一下 Java 的基本类型和引用类型你是怎么理解的?
-
基本类型和引用类型做参数传递的时候他们有什么区别?引用类型的值存放在哪里?
-
基本类型 int 和引用类型 Integer 有什么区别?
-
int 和 Integer 是怎么相互转换的?
-
自动装箱是怎么实现的?
-
你说一下 Java 里的深浅拷贝?
-
你需要实现一个 Car 类,创建 car 对象,要对它做一个浅复制,你要怎么写呢?那如果我要实现一个深复制呢?
-
Java 的集合类你用过哪些?
-
说一下 HashMap 是怎么用的,描述一下项目里的实际场景,或者说需求、功能,你的场景为什么非要用 HashMap,不用他可不可以?这种实现方式有什么缺点?
-
ArrayList 和 LinkedList 有什么不同?可以解释一下为什么 ArrayList 的查询时间复杂度是 O(1) 吗?假如你是 JVM,为什么这种方式就可以达到 O(1) 的时间复杂度呢?偏移量是怎么算的呢?
-
泛型你用过吗?说一下使用的场景,你认为他有什么好处?
-
你介绍一下 JVM 的垃圾回收?引用计数法和可达性分析算法的优缺点是什么?
-
多线程有了解过吗?说一下多线程你的理解是怎么样的?实际工作有用到过多线程吗?
-
说一下 Java 的反射?通过反射创建对象和通过 new 创建对象有什么区别?优缺点是什么?性能方面你认为他们有什么区别?
-
数据库用什么居多?说一下 MySQL 的索引?B+ 树的叶子结点存放的是什么?你用索引的时候,比如说给一个列加索引,加完之后用这个列去查,你知道索引失效有哪些情况吗?为什么 like % 会造成索引失效?索引是怎么匹配的?那 like 123% 是怎么匹配的?
-
你说一下数据库的事务?在项目中事务用的多吗?
-
操作系统用哪个居多?
-
Linux 常见命令用过哪些?看日志怎么看?
-
Linux 定时器知道吗?
-
你们学校在哪个城市?想来深圳吗?
-
算法题:实现一个函数,入参是一个整形数组,找到第二小的数字并返回
反问:
-
你们这边做什么业务
-
面试流程分为几面
面试官多次向我确认意向部门,是不是非广告不可,其实我对金融也很感兴趣,但是改不了了。面试问的比较细,可以看出面试官的水平很高,面试的节奏把握的也不错,没有给人压迫感,面试体验很不错。
二面 2021/9/18 17:00 56min
-
自我介绍
-
技术栈从两方面总结一下,基础知识、语言,到哪个水平了?了解(听过名词不知道里面的东西)、有一定的理解的、很熟练的。
-
没有很熟悉的吗,我们先聊很熟悉的?
-
JUC 知道吧,ReentrantLock 知道吧,CountDownLatch、信号灯、Queue 都知道吧,CopyOnWrite 干啥的,有什么好处?无锁队列知不知道?先把 JUC 包下常见的类都过了一遍,然后开始问底层实现。
-
ReentrantLock 底层 AQS 也知道?经过偏向、自旋到重量级锁知不知道?我一开始说这些是 synchronized 的机制,面试官说 synchronized 抄他的,synchronized 比较晚,ReentrantLock 1.4 就出现了,我说 1.5,面试官查了一下,确实是 1.5,面试官说不错。
-
讲一下 ReentrantLock 或者 synchronized 锁晋升过程?重量级锁是怎么体现的?为什么阻塞等待就叫重?
-
怎么把线程挂起,CPU 不给他资源,CPU 为什么不给他资源,我写一个线程,你怎么把他挂起来?
-
有没有看过 AQS 源码,刚开始检查头里面有没有东西,这时候是无锁状态变为偏向锁,别人来抢的时候,发现这个锁被别人占用了,然后循环几次,发现都不行,这时候就是重量级锁了,这里的源码有没有看过,怎么挂起他的?插入队列不等于挂起吧,怎么挂起的?答了 LockSupport 的 park() 方法,又追问 park() 方法调的啥?
-
应用层呢,比如说写一些增删改查,写一些小工具啊有没有毛病?自信一点,花两分钟介绍一下,假如让你写一个返回 JSON 的,查询 DB 的,说一些关键的代码?
-
MyBatis 怎么操作的?代码怎么写的?动态 SQL 有没有用过?什么标签?
-
有没有了解过微服务相关的知识,服务治理相关的一些理念知不知道?有没有写过?用过哪些组件?
-
用过 Feign 是吧,你也知道 Feign 写一个接口就能调用了,怎么实现的?假如我不懂 Java,我问你这个接口都没有子类实现,他怎么发起调用的?
-
Spring Boot 的 starter 机制知道吗?你能写一个 starter 吗?比如你给我提供一个 SDK 功能,零配置、maven 一引入,自动跑起来?
-
总结一下之前几个问题,Spring、MyBatis 使用非常熟练,JUC 包也没问题。
-
JVM 内存布局、对象布局简练介绍一下?说一下关键字就行了。
-
我现在有一个对象,里面有个 int 型数据,你大概猜测一下,他在内存里面占多大?
-
对象里的对齐是什么?
-
JVM 的内存回收 GC 了解吗?知道两个区交换、清空?有没有看过 GC?一个应用什么时候发生 GC?GC效果怎么样?为什么发生GC?
-
SQL 这些熟吗?相关原理熟吗,ACID 知道,可重复读怎么实现的?undo log、redo log 知不知道?
-
存储和索引结构呢?为什么用 B+ 树?
-
比如说我有一条记录,我有一个 text 类型字段,查他的时候发生几次 IO?面试官说可以啊,很厉害,这个都能答出来。
-
很好奇你还会不会更高级的东西,MySQL 单机部署不可靠,你了解他的高可用的部署方案的原理吗?主从能保证数据准确吗?主从一定会有数据延迟的。我给你很多机器,你要尽可能保证数据不丢,你可以说一下多种情况的优缺点?假如给你 5 台机器,你可以分布在不同城市,你可以分布在不同机房,你做稳定就行了,要求就是我一直查,保证我有数据,机器我给他炸掉了,还能找到。我答了一下三地五中心。追问三地五中心怎么保证一个数据两个地方都会有的?同步模式是什么?半同步复制,同步复制。
-
最近有没有刷题?
-
看一下上一个面试官评语是啥,上一个面试官说你多线程了解不多,有没有反驳?
-
又开始聊多线程,volatile、Atomic 这些东西知道吗?
-
内存珊栏知道吗?
-
操作系统熟不熟?内存管理这一块,一个对象 new 出来怎么存储到物理内存上去,又是怎么找出来的?
-
从逻辑地址到线性地址到物理地址的转换过程清楚吗?
-
除了 CountDownLatch 和信号灯,CyclicBarrier 会不会?
-
调度了解吗?你现在的操作系统用的什么调度算法?说一下常见调度算法?短作业,怎么命名为短?怎么知道他短?
-
TCP 除了拥塞控制、超时重传还有哪些高级特性比较熟?
-
有没有了解网络编程?select、eopll 调用细节知道吗?有没有网络编程经验,会用 Netty 吗?
-
阿里这边实习有学到什么东西吗?
-
现在写代码是能写点了?给你个需求,只要不是太难的,自己能够独立分析他,设计他,写出来交付?
-
阿里中间件研究过哪一个,觉得有点心得?面试官说阿里有很多优秀的框架比如 Dubbo、HSF、Rocket MQ、Nacos。
反问:
-
你们这边主要做什么业务?
-
你们这边是什么部门?
-
用什么语言?面试官说换个语言你怕吗?
刚开始的时候面试官说赶快面了,好休息,中秋节来了。强调了校招比较喜欢看基础知识,实习经验、实习的项目有没有学到什么东西,语言基础等。面试的过程面试官经常认可我,不断说不错,面试体验很好,面完就过了。我说对于 GC 只停留在理论上,面试官说这个回答很好,你要是随便回答一下就尴尬了,不像别的公司,要求你讲 JVM 调优。
面试官说复试的时候很看重基础的,最好看一下 Linux 相关的编程,Linux 系统函数,select、epell 、mmap、零拷贝、sendfile 这些常用的。面试官评价说答的都挺好,AQS 结合 Linux 说会更好,可以看看 park() 调 Linux 哪个函数。sleep 做什么的?为什么会睡眠?sleep(10) 一定是精确 10s 吗?为什么不一定?sleep 背后也是 C 函数,都是结合 Linux C 编程来说的。
三面 2021/9/23 11:20 27min
-
自我介绍
-
讲述一下 JVM 内存的垃圾回收机制的原理?
-
对于 Java 多线程编程应该注意哪些事项?
-
对于 MySQL 的 Inno DB 引擎底层有过了解吗?
-
聚簇索引是个什么机制,访问数据是个什么样的过程?
-
MySQL 事务隔离级别有几种?
-
在可重复读的场景下,我们去访问一条用户记录,用户记录里边有两个关键字段,一个是状态,一个是余额,A、B 两个事务同时在第一秒去读,读出来的余额都是 100,在第二秒,事务 A 把他的余额加了 100,现在的余额为 200,那 B 事务在第三秒时候也加 100,因为他第一秒读出来是 100,所以他也 set 为 200,那这样就丢了 100 块钱,那你觉得正确的做法应该是怎么做呢?
-
对网络编程有过了解吗?Socket 里面有个 IO 多路复用,select 和 epoll 有什么区别?epoll 的 ET 触发和 LT 触发的区别是什么?
-
那这样的一个情况下,ET 触发模式下,比如说我去读数据,假设那里边有 10M 的数据,我读了 5M 的时候被信号中断了,那应该怎么做呢?
-
如果这个网络服务器是个应答式的,就我发了一个包,我等待回答,那前面的一直没有回来,那是不是就卡死一个线程挂在这里了?
-
对于后台这种服务器,比如说网络服务器的多线程模型有了解过吗?就是比如说线程池类似这样的一些?
-
谁负责收发网络包,数据进来是个什么过程?也就是说有一组线程是负责网络处理的,比如说把外面的一组文件描述符收下来,网络包收下来,是这个意思吗?也就说每进来一个就是一个独立的线程来应对,从网络收发包、到处理、再到回包,都是一个线程?
-
TCP 和 UDP 的区别是什么,为什么 TCP 是可靠的,他的可靠性体现在哪些方面?
-
三次握手连接的时候,为什么是三次?他起到什么样的作用?
-
IPC 通信除了 Socket 通信之外,还有哪些方式?
-
我用共享内存的话,比如说我分配了 10G 的共享内存,用于存储用户的一些信息,比如说我每条用户的信息是 1K,那就是这 10G 的共享内存就形成了一个数组,那现在我有多个进程访问的时候,假设某个进程读某条记录的时候,其他的进程可以去读,不能去写,如果某一个线程在去写的时候,其他的线程都不能读也不能写,但是每一条记录之间的访问是互相隔离的,那在 Linux 下,有哪一些机制可以实现这样粒度的一个读写锁?
-
对信号量的原理有了解吗,信号量是一个什么样的机制?
-
再详细介绍一下你的项目
-
数据库怎么保存多层的树结构的?
-
客户端访问的时候,你的会话信息是怎么做的?
-
评论也是存在数据库里边的吗?MySQL 里面对这种很长的评论是怎么处理的?有过了解吗?超过 255 的字段他会做什么处理?MySQL 对这种长的字段类型,底层是怎么做的?
-
Redis 做缓存的时候,怎么保证 Redis 和底层数据库的数据是一致的?如果最后一次删缓存失败了呢?
-
你平时都喜欢看什么类型的书籍?
-
你平常业务爱好是什么?
反问:
-
事务型开发和后台开发的界限
-
哪些方面需要提升一下
-
用什么语言,用什么框架
-
后续的面试流程
面试官反馈说理论知识掌握的还行,网络编程知道一些原理,但是缺乏网络编程的实战经验。腾讯的流程真的快,四个工作日走完三轮技术面,下午更新到了 HR 面。
HR面 2021/9/26 10:30 29min
-
从以下三个维度来总结一下自己,从出生到上大学、大学时光以及实习经历、职业规划?
-
在实习中成长最大的事情?
-
你是本科是吧,22 年毕业,有读研的打算吗?为什么不读研?
-
过往有没有重大疾病史?
-
有没有亲属在腾讯?
-
家里有兄弟姐妹吗?
-
你是哪里人?
-
你父母对你工作有什么看法?
反问:
-
新人培养
-
晋升机制
-
可以提前实习吗
-
结果多久能出来
三面完那天晚上发了测评,做完之后约了 HR 面,HR 面完之后下午更新到了录用评估中,不得不说腾讯效率真的高,四个工作日走完了三轮技术面,许愿 OC!