腾讯提前批 C++ 面经
桶排序
图的深度优先搜索和广度优先搜索 和 应用场景
DFS和BFS就不说了,参看https://www.jianshu.com/p/2c2cdcb9de9d
DFS的应用场景
利用DFS算法来检测有向图的回路,而具体的应用场景,就是性格测试,性格测试游戏的模型其实是一张有向图。一般而言,题目及答案都是作者设定好的,如果出线回路,那么游戏则不会停止。
具体做法是,如果当前元素已经访问过,那么就存在回路,在遍历过程中,记录访问过的元素
DFS算法的时间复杂度是:$O(b^m)$ (b-分支系数,m-图的最大深度),因此如果 图中节点数太多,会导致复杂度太高
如果抛开图不说,DFS 和 BFS 在搜索空间中的应用,DFS适合于深度比较小的情况下的剪枝(需要栈存储已经遍历过的节点),BFS 适合于 广度比较小的情况下的剪枝(需要queue存储当前节点的下一个节点)
延伸到思考上:深度优先搜索+剪枝这样一边发散、一边精简可能性、并将结论反馈到同层下一个分析角度的分析问题的思维方法,能避免无用功、帮助收拢发散的思路、维持分析问题逻辑的一致性。
如果使用广度,有上亿个节点,内存有不够了,怎么解决
内存不够 就用硬盘: 将queue分为三个部分,头部(内存)中间(硬盘)尾部(内存) 队列的出栈入栈 在内存中进行,限制内存中队列的大小,并行的把硬盘中队列元素送到头队列,内存中尾队列的元素送到硬盘
迭代加深搜索算法
迭代加深搜索算法 IDDFS
迭代加深是一种 每次限制搜索深度的 深度优先搜索。
它的本质还是深度优先搜索,只不过在搜索的同时带上了一个深度 ,当 达到设定的深度时就返回,一般用于找最优解。如果一次搜索没有找到合法的解,就让设定的深度 ,重新从根开始。
既然是为了找最优解,为什么不用 BFS 呢?我们知道 BFS 的基础是一个队列,队列的空间复杂度很大,当状态比较多或者单个状态比较大时,使用队列的 BFS 就显出了劣势。事实上,迭代加深就类似于用 DFS 方式实现的 BFS,它的空间复杂度相对较小。
当搜索树的分支比较多时,每增加一层的搜索复杂度会出现指数级爆炸式增长,这时前面重复进行的部分所带来的复杂度几乎可以忽略,这也就是为什么迭代加深是可以近似看成 BFS 的。
BFS DFS IDDFS 详细介绍总结 & 复杂度分析
TCP/UDP 协议 和 字段上的区别
TCP的滑动窗口的作用
top命令
如何查看内存 和 进程
top
进程是否可以查看父进程
ps -ef |grep <进程名>
ps -ef |grep <父进程[PID]>
如果Linux上没有收到服务端的请求,也没有日志报错,怎们解决
腾讯 QQ 安卓组 深圳 44min
研究生项目 ;
- 有哪些人参与 我说主要核心我做的 做算法的时候 有没有遇到什么难题:
- 一开始的策略 是不对的
- 事务图的场景不适用
- lazy counting的部分
本科项目,经历:
文本分类 weka;数模
gc roots 标记回收 CMS G1
还问了我 强引用 软引用 弱引用 虚引用 以及 软引用两次gc
hashmap
Int 和 integer
算法题 : 图的最短路径
迪杰斯特拉 贝尔曼福德 让我说细节 我说忘了 然后他说 然我从头设计 我说 深搜 从头到尾输出栈元素 题目中每条边是带权重的,因此 选择深搜,但是如果不带权重,那么选择广搜,如果图的分支非常多,把广搜改成IDDFS
问我 100张牌 随机打乱
我说 线性同余算法 他说 从头自己设计
随机数 线性同余算法
- 要求 均匀分布 和 不可预测
用处:
因为用穷举的办法判断一个数是否是素数,复杂度过高,尤其是在大素数的时候,那么可以用数量足够多的算法测试,代替穷举法,尽管不能保证一定是素数,但是是素数的可能性非常大,成为不确定性方法
1.Tomcat 2.Jboss 3.Apache 4.WebLogic 5.Nginx 6.glassfish
Apache
- Apache全球应用最广泛的http服务器,免费,出自apache基金组织
- 仅有的不足是,它本身仅提供html静态页面的功能,不支持jsp、java servlet、asp等功能
Nginx
- nginx常用做静态内容服务和代理服务器
- Apache/Nginx 应该叫做HTTP Server,Apache现在较为少用,功能也和Nginx类似
##Tomcat
- 是Apache基金会鼎力支持的Java Web容器,但也会附带 Apache
- 只能做JSP和Servlet的容器,不支持EJB, 不是完整的JavaEE容器
- 优秀的稳定性以及丰富的文档资料,广泛的使用人群,从而在开源领域受到最广泛的青睐
- Tomcat 部分是Apache的扩展,但它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行
Jboss
- Java EE应用服务器,它不但是Servlet容器,而且是EJB容器(同时支持EJB的优化版tomcat),是完整的JavaEE容器
- 受到企业级开发人员的欢迎,从而弥补了Tomcat只是一个Servlet容器的缺憾
Glassfish
- Glassfish是Oracle 开发的官方完整的JavaEE容器,收到官方控制,在支持新特性方面有优势
BEA WebLogic Server
- 不但是Servlet容器,而且是EJB容器
- weblogic不开源,虽然存在免费试用等,需要高额license费用
- 支持关键任务所必需的扩展、性能、和高可用性
POJO
- POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称
- 其中有一些属性及其getter setter方法的类,可以有一些简单运算,不能携带有connection之类的方法,没有业务逻辑。
SSM
SSM框架,是Spring + Spring MVC + MyBatis的缩写,这个是继SSH之后,目前比较主流的Java EE企业级框架,适用于搭建各种大型的企业级应用系统
Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
控制反转(IOC):利用工厂模式将对象交给容器管理,你只需要在spring配置文件中配置相应的bean,以及设置相关的属性,spring容器会生成类的实例对象以及管理对象。在spring容器启动的时候,spring会把你在配置文件中配置的bean都初始化好,然后在你需要调用的时候,就把它已经初始化好的那些bean分配给你需要调用这些bean的类(假设这个类名是A),分配的方法就是调用A的setter方法来注入,而不需要你在A里面new这些bean
面向切面(AOP):AOP只是Spring的特性,它就像OOP一样是一种编程思想,OOP允许你定义从上到下的关系,AOP适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。将程序中的交叉业务逻辑(比如安全,日志,事务等),封装成一个切面,然后注入到目标对象(具体业务逻辑)中去。
实现AOP的技术,主要分为两大类:
- 采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为
- 采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码
CVTE 牟联富面经
框架
远景面经
- 项目
- 如何学习Java的 看哪些书 哪些网站
- 学习途径有 经典书籍 参看 有些翻译不好 参看 用英文教材
- 看书的过程中 某些点 参考google上一些博客
- 某些技术 直接看官方文档 Django RDFLIb等 networksx Guava
- 关注一些技术公众号 比如 javaGuide csdn / paperWeekly,专知,等等
- 一些社区 importNew github上star 比较多的学习指导
- C++ 与 Java的对比
- 运行时类型信息
- 异常检查
- 库 Guava等
- MySQL优化
腾讯二面
1h
- 介绍项目 多元关系
- 介绍项目 MCTS黑白棋
- 如何看待 一个Java中所有的东西都是有对象的, 就算是写一个简单的程序 也需要对象
- Java JVM类加载 一个JAR包中的类会全部加载吗 什么时候主动的加载
- 多线程 线程池
- 多线程 synchronized锁
- reenactrentLock 锁
- HashMap 并发 https://blog.csdn.net/github_2011/article/details/54927531
- 安卓加载 很多图片 怎么实现 软引用
- 算法题:
- 青蛙跳 1 2 dp
- 青蛙跳 没有步数限制 怎么跳
YQQ远景面经
- currentHashMap
- 数据库 解决幻读问题
- 加意向锁
农行面经
笔试
- 笔试在上午,因为是从南京到上海进行的笔试,外地学生面试就安排在了下午
- 笔试内容主要有 英语 比较简单
- 数据库 理论的东西 比较多 以及有一些 SQL server的内容
- 计算机网络 主要有一些基础知识 不是很难
- C/C++/Java都是一些简单的基础知识
- 笔试基本都是这些 基本比较杂,有些知识比较过时,网上的说法是 笔试不刷人,觉得银行类的笔试 基本上可能不需要复习
- 农行的话 之前学姐和我说 可能会考些 农行小知识之类的 也没遇到
面试
- 群面,大概有六个面试官,最中间的一个可能是leader,主要是他发问
- 面试流程主要是先自我介绍,然后leader根据他的兴趣度开始针对每个人发问
- 自我介绍的时候,有要求每个人两分钟之内,我对于项目的介绍过于简单了,没有抓住重点,发文的时候直接被排到倒数第二个,很难受,实际上听起来我的项目含金量和工作量在这里面应该是属于比较高的了,但是因为是课题算法项目,面试官不是很关心(面腾讯的时候 明明 所有面试官 都很感兴趣)
- 以后有两分钟以内介绍项目的时候应该 突出重点
- 从底层完全自主实现
- 对于算法的改进和创新 多标签,频繁度的设计
- 算法的优化 lazy counting/ 剪枝上的取舍
- 以后有两分钟以内介绍项目的时候应该 突出重点
- 轮到我被问问题是倒数第二个了,基本上面试官比较看重框架经验
- 课题是偏研究 还是偏实现的 ,答 研究实现都是我一个人
- 进程查看 ps
- 看我写了 nginx 问我这是干嘛的,用来做负载均衡?答 在vps上搭博客 (面试官竟不知道nginx 有点失望)
- 问我Java并发 继承 thread类 和 线程池 以及 synchronized锁
- 问 GC
- 问了些图的东西 关键路径这些 问了guava图的底层实现
最自豪的事
- 从一个很逊的仔,变得还算可以,但是仍旧需要努力
- 考研成功/从运动很逊 变得 健身成功
最大的挫折
- 大一大二的时候 没有 很强的动力学习,只知道应付考试 ,感觉浪费了很多时间 相比于哪些厉害的 本科就去了 中科院直博,去了南大直博的同学 觉得有些差距
- 没有动力
- 没有长远的打算
为什么没有继续做算法,而选择做工程
做算法分两种:
- 一种是研究型 科研性质 学校 企业的一些研究院 博士
- 另一种是算法开发 和学长聊下来, 基本是 处理数据 等方面的工作,业务上 需要不断寻找新的业务增长点,技术上 比较窄
我希望自己的工作 在技术上能有更高的可扩展性;从后端入手,积累一定深度之后,大数据,底层方面 虚拟化 容器,业务上。。。都要涉及 。。。 往这个方向
可以做业务 产品。。。也可以做平台 arch这些 技术上 路越走越宽
- 本质上 作为一个计算机专业的人来说 ,算法也好 开发也好 都是写代码 不会因为 媒体吹的风就是去理智,人工智能 目前 还是弱人工智能 (数据驱动)(新的模型bert 都是 证明数据量大 算力大 更有效 )(这正是 计算机科学 所解决的问题)
秋招美团一面
- 项目
- 算法题
- top k:堆 快选
- 图中是否存在回路:深度搜索;拓扑排序
#秋招美团二面
- 新生代 老年代的垃圾回收算法:新生代 复制算法 老年代 标记整理算法 原因?
- 标记复制算法 为什么有三个区域?
- 避免hash的方法
- 左连接 右连接 全连接 自连接
- sql 聚集group by
- spring boot 注解 怎么加载进来
- 操作系统 进程 线程的区别
- CPU 进程分配算法
- 网络协议 分层
- DNS 哪一层
- volatile 原理
- 原子性 是指什么?
- Java 泛型 extend super 字节码?
- 路由器 交换机 集线器 (网段 冲突域)
- HTTP 协议 和 TCP 协议 responce时 TCP 协议怎么知道 传输的是 HTTP协议
- 概率题 贝叶斯
- 计算机网络 拥塞控制
阿里二面
计算机网络 有了MAC地址为什么还需要 IP地址
https://blog.csdn.net/hengwujun0903/article/details/12778375
mac 地址厂商分配 固定 在地理信息上 MAC地址没有关系,用户在欧洲买的MAC网卡,能在非洲使用
IP地址 DHCP分配,服务提供商 提供IP地址,地理信息相关 能够进行路由
既然每个以太网设备在出厂时都有一个唯一的MAC地址了,那为什么还需要为每台主机再分配一个IP地址呢?或者说为什么每台主机都分配唯一的IP地址了,为什么还要在网络设备(如网卡,集线器,路由器等)生产时内嵌一个唯一的MAC地址呢?主要原因有以下几点:(1)IP地址的分配是根据网络的拓朴结构,而不是根据谁制造了网络设置。若将高效的路由选择方案建立在设备制造商的基础上而不是网络所处的拓朴位置基础上,这种方案是不可行的。(2)当存在一个附加层的地址寻址时,设备更易于移动和维修。例如,如果一个以太网卡坏了,可以被更换,而无须取得一个新的IP地址。如果一个IP主机从一个网络移到另一个网络,可以给它一个新的IP地址,而无须换一个新的网卡。(3)无论是局域网,还是广域网中的计算机之间的通信,最终都表现为将数据包从某种形式的链路上的初始节点出发,从一个节点传递到另一个节点,最终传送到目的节点。
OS 进程管理 内存管理 页式 段页式
看一篇论文要多久 作报告 PPT
后端经验不足,刷题 参加开源项目
课余时间做什么
为什么选择远景实习 远景技术还可以 阿里巴巴 腾讯挖了很多人 整体远景是一家向上发展的公司