暑期实习+秋招的面经汇总(阿里、腾讯、头条、国企等)

楼主女,学校在北京,所投岗位:后端Java开发。整体战略方案:暑期大厂实习 - > 秋招拿户口,也算完成目标了,实习在北京-阿里妈妈,秋招找了一所北京中学当计算机老师~

在牛客上得到过不少帮助,一直想写个面经贴来回馈,秋招结束之后好久才想起来,特来报道,内容多时间紧,可能会有疏漏,敬请谅解。【第一次发,格式总是不太对😫,预览对的发上去就变了,大家将就下

接下来分为两个部分:暑期实习部分(面向互联网)和秋招部分(面向国企等),记录问题全靠脑子,按公司来分类,可能不太全,某些问题当时回答的不太满意于是过后自己查了答案,也一并奉上,多字预警!写完贴子就告别牛客啦,祝愿大家都能拿到心仪的offer哦~

一、暑期实习

1.阿里巴巴-蚂蚁金服

  • 介绍项目
  • 线程池
  • 数据库连接池 什么时候会满,原因
  • 前后端交互问题
  • 数据库表设计
  • JVM了解多少
  • 数据库查询一整个流程
  • 滑动窗口问题
    【答】:
  1. 提供TCP可靠性:对发送的数据进行确认
  2. 流量控制:窗口大小随链路变化
    TCP中窗口大小是指tcp协议一次传输多少个数据。因为TCP是一个面向连接的可靠的传输协议,既然是可靠的就需要传输的数据进行确认。TCP窗口机制有两种,一种是固定窗口大小,另一种是滑动窗口。数据在传输时,TCP会对所有数据进行编号,发送方在发送过程中始终保持着一个窗口,只有落在发送窗口内的数据帧才允许被发送;同时接收方也始终保持着一个接收窗口,只有落在窗口内的数据才会被接收。这样通过改变发送窗口和接收窗口的大小就可以实现流量控制。
    当窗口过大时,会导致不必要的数据来拥塞我们的链路,但是窗口太小时,会造成很大的延时,比如为1时,发送方每发送一个数据,接收方就会返回一个ack报文,在发送方未接收到接收方的确认报文ack之前不会进行下一次发送。
  • 数据库异常怎么处理
  • 数据量大怎么办

【答】可以有两种方式,一种是分表,另一种是分区
首先是分表,就像你自己所说的,可以按月分表,可以按用户ID分表等等,至于采用哪种方式分表,要看你的业务逻辑了,分表不好的地方就是查询有时候需要跨多个表。然后是分区,分区可以将表分离在若干不同的表空间上,用分而治之的方法来支撑无限膨胀的大表,给大表在物理一级的可管理性。将大表分割成较小的分区可以改善表的维护、备份、恢复、事务及查询性能。分区的好处是分区的优点:
1 增强可用性:如果表的一个分区由于系统故障而不能使用,表的其余好的分区仍然可以使用;
2 减少关闭时间:如果系统故障只影响表的一部分分区,那么只有这部分分区需要修复,故能比整个大表修复花的时间更少;
3 维护轻松:如果需要重建表,独立管理每个分区比管理单个大表要轻松得多;
4 均衡I/O:可以把表的不同分区分配到不同的磁盘来平衡I/O改善性能;
5 改善性能:对大表的查询、增加、修改等操作可以分解到表的不同分区来并行执行,可使运行速度更快;
6 分区对用户透明,最终用户感觉不到分区的存在。

  • 导致节点插入时间非常慢的原因:

【答】 1、连接数据库的问题:建立连接和关闭连接的次数太多,导致IO访问次数太频繁。
2、应该使用批量插入和批量修改的方法,而不是有一条数据就进行插入,这样会导致访问数据库的实际特别的慢。
3、在建立库的时候要建立适当的索引:如主键、外键、唯一等,优化查询效率。

  • 数据库怎么优化

【答】提高数据库运行效率的办法
在系统硬件和系统软件条件确定的情况下,必须从数据库系统级优化、数据库设计级优化、程序实现级优化,这三个层次上同时下功夫。
在数据库物理设计时,降低范式,增加冗余,少用触发器, 多用存储过程。
当计算非常复杂、而且记录条数非常巨大时(例如一千万条),复杂计算要先在数据库外面,以文件系统方式用C++语言计算处理完成之后,最后才入库追加到表中去。这是电信计费系统设计的经验。发现某个表的记录太多,例如超过一千万条,则要对该表进行水平分割。水平分割的做法是,以该表主键PK的某个值为界线,将该表的记录水平分割为两个表。若发现某个表的字段太多,例如超过八十个,则垂直分割该表,将原来的一个表分解为两个表。
对数据库管理系统DBMS进行系统优化,即优化各种系统参数,如缓冲区个数。
在使用面向数据的SQL语言进行程序设计时,尽量采取优化算法。

如果进行更新表的数据量较大,例如,更新的字段的值,需要重新从子表查询,且是全表查询

2.腾讯-TEG

  • 进程和线程的区别

  • 快排的时间复杂度、稳定性,最坏时间复杂度
  • 什么是时间复杂度
  • 算法:二叉树深度(递归非递归)
  • 欠拟合、过拟合
  • 关系型数据库和非关系型数据库,用过非关系型数据库吗 比如mangoDB

  • http\https

  • String StringBuffer StringBuilder

  • ios七层模型

  • redis数据类型

  • 线程安全的理解

  • 有没有用过socket这样的

  • 数据库事务

  • 给一个十进制数字转为K进制(短除法)

  • 给一个数组找出所有的不重复全排列

  • http状态码

  • 几种排序算法(冒泡、选择、快速排序)要具体说出思想,尤其是快速排序

  • 二叉树的遍历方式

  • Java内存的垃圾回收机制

  • Java内存结构

  • 【答】java内存模型(JMM)是线程间通信的控制机制.JMM定义了主内存和线程之间抽象关系。线程之间的共享变量存储在主内存(main memory)中,每个线程都有一个私有的本地内存(local memory),本地内存中存储了该线程以读/写共享变量的副本。本地内存是JMM的一个抽象概念,并不真实存在。它涵盖了缓存,写缓冲区,寄存器以及其他的硬件和编译器优化

  • 程序计数器

    【答】内存空间小,字节码解释器工作时通过改变这个计数值可以选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理和线程恢复等功能都需要依赖这个计数器完成。

  • JVM结构
  • 数据库一级索引二级索引
  • B树和B+树区别

  • 数据库查询语句执行(执行过程)
  • LInux系统命令:查看CPU使用情况
  • 面试能给自己的加分地方

  • Linux操作系统根目录下还有哪些目录

  • 介绍一下项目、代码量,你完成的地方


3.阿里巴巴-阿里妈妈

  • 微服务了解吗
  • 类加载器、用过自定义的类加载器吗 怎么使用

【答】自定义类加载器有很多好处,它让Java代码更加灵活,应用场景:

    • 可以用来加密Class文件,然后解密Class文件进行再加载,提高系统安全性
    • 从网络中加载Class文件
  • 进程线程区别
  • 线程创建方式
  • ThreadLocal了解吗

【答】ThreadLocal 是线程的局部变量, 是每一个线程所单独持有的,其他线程不能对其进行访问。

当使用ThreadLocal维护变量的时候 为每一个使用该变量的线程提供一个独立的变量副本,即每个线程内部都会有一个该变量,这样同时多个线程访问该变量并不会彼此相互影响,因此他们使用的都是自己从内存中拷贝过来的变量的副本, 这样就不存在线程安全问题,也不会影响程序的执行性能。但是要注意,虽然ThreadLocal能够解决上面说的问题,但是由于在每个线程中都创建了副本,所以要考虑它对资源的消耗,比如内存的占用会比不使用ThreadLocal要大。

  • 分布式之类的了解吗
  • 数据库索引原理
  • 索引越多越好吗

【答】列经常出现在where子句或者连接条件中,表数据频繁更新,oracle会频繁的重新改动索引,这样反而会降低数据库的性能。

  • 如何用两个栈实现队列
  • 介绍一下jvm内存管理和垃圾回收机制
  • 最近有在读Java源码吗
  • Java在用哪个版本
  • Java新版本有什么改进吗
  • 介绍一下多线程里面的锁
  • 围绕项目问

  • springboot\springMVC你都用过,说一说之间的区别,自动配置bean

  • 后端消息传递,session\cookie区别应用场景

  • 多线程有在项目中使用过吗

  • WebSocket用过吗,这个有点没听清

  • session集群方法

  • 研究生阶段超出预期的成长和没有满足预期的地方

  • 项目中难度所在

  • 红黑树应用场景

  • Java接下来打算学习的技术栈

  • 收获最大,对自己最满意的地方

  • 未来的职业规划

  • 项目难点、解决方法

  • 使用的框架,springmvc springboot为什么使用这个

  • 写过的代码量

  • 你用到过什么Java命令行

4.字节跳动-未知部门(忘了投的哪个了。。。)

  • 介绍你知道的设计模式

  • 进程线程和携程,cpu最小的运行单元是什么

  • TCP,UDP区别,TCP三次握手

  • Java三大特性

  • 几种数据库引擎、以及区别

  • 数据库索引你要怎么建

  • 写sql语句

  • 实现一个栈、找到栈内最大值

  • 实现一个队列,找到队列最大值

  • 操作系统相关问题

  • Java多态

  • http状态码500

  • DNS解析过程

【答】1、当应用过程需要将一个主机域名映射为IP地址时,就调用域名解析函数,解析函数将待转换的域名放在DNS请求中,以UDP报文方式发给本地域名服务器;2、本地的域名服务器查到域名后,将对应的IP地址放在应答报文中返回。

  • 线程、子线程父线程,父死了子怎么办

【答】父线程死了之后子线程的新上级归为init(),子进程继承父进程

  • 数据库,mysql b+树实现,逻辑存储与物理存储对应吗
  • b+索引怎么存的,怎么找的主键
  • 如果存进random怎么办
  • 类引用和接口引用区别

【答】应该优先使用接口而不是类来引用对象。如果有适合的接口类型存在,那么对于参数、返回值、变量和域来说,就都应该使用接口类型进行声明。只有当你利用构造器创建某个对象的时候,才真正需要引用这个对象的类。如果没有适合的接口存在,完全可以用类而不是接口来引用对象。例如值类,比如String和BigInteger。记住,值类很少会用多个实现编写。他们通常是final的,并且很少有对应的接口。使用这种值类作为参数、变量、域或者返回类型是再合适不过了。更一般地讲,如果具体类没有相关联的接口,不管他是否表示一个值,你都没有别的选择,只有通过他的类来引用他的对象。Random类就属于这汇总情形。 不存在适当接口类型的第二种情形是,对象属于一个框架,而框架的基本类型就是类,不是接口。如果对象属于这种基于类的框架,就应该用相关的基类(往往是抽象类)来引用这个对象,而不是用他的实现类。java.util.TimerTask抽象类就属于这种情形。不存在适当接口类型的最后一种情形是,类实现了接口,但是他提供了接口中不存在的额外方法——例如LinkedHashMap。如果程序依赖于这些额外的方法,这种类就应该只被用来引用他的实例。他很少应该被用作参数类型。实际上,给定的对象是否具有适当的接口应该是很显然的。如果是,用接口引用对象就会使程序更加灵活;如果不是,则使用类层次结构中提供了必要功能的最基础的类。

  • 蛇形打印树

  • 链表对折


5.美团点评-基础平台事业部

  • tcp滑动窗口介绍

  • 数据库四种隔离事务

  • 幻读、解决幻读的方法

  • 行锁、间隙锁

  • 当前读、快照读

  • 聚集索引、非聚集索引

  • 字长

  • MTU、MSS,两种之间的关系

  • 索引种类

  • 五瓶药丸、有一瓶变质,找出哪瓶

  • 算法:连续和最大子数组

  • 对美团的了解,是否关注技术博客

  • Linux常用命令,查看文件内容,文件目录,删除文件目录

  • Linux管道

【答】管道是Linux由Unix那里继承过来的进程间的通信机制,它是Unix早期的一个重要通信机制。其思想是,在内存中创建一个共享文件,从而使通信双方利用这个共享文件来传递信息。由于这种方式具有单向传递数据的特点,所以这个作为传递消息的共享文件就叫做“管道”。

  • int占几个字节,为什么,和计算机32/64位什么关系

  • 你用过哪些设计模式、单例模式使用场景

  • 死锁场景、产生的四个条件

  • 排序方法的稳定性,堆排序的时间复杂度

  • 线程安全的对象

  • concurrentHashMap工作原理、CAS

  • String StringBuffer StringBuilder

  • java的类加载机制

  • 打印菱形

  • 20000对夫妇生女则停生男则继续直到有女儿,求男女比例


6.京东-数据中台

  • servlet原理,输入http:\\8080之后做了什么处理

【答】

1、首先,从浏览器中发送请求,是从当前工程中的路径与servlet-mapping标签中的url-pattern的标签值进行匹配。 2、根据这个映射值,找到servlet-mapping标签中的servlet-name的值与servlet标签中的servlet-name进行匹配 3、匹配到以后,找到servlet标签中的servlet-class标签中对应servlet类的src文件夹下的全路径。 4、从而调用并执行相应的servlet类。

tomat是一个servlet容器,来处理http请求。在平时的使用中我们都会在浏览器中输入http地址来访问服务资源,比如格式http://localhost:8080。从浏览器到服务端的一次请求都遵循http协议,在网络上其实走仍然是tcp协议,即我们常使用的socket来处理客户端和服务器的交互。根据输入的http地址可以知道服务器的IP地址和端口,根据这两个参数就可以定位到服务器的唯一地址。tomcat根据http地址端口后面的资源路径就可以知道反馈什么样的资源给浏览器。

  • Tomcat Server处理一个HTTP请求的过程:

【答】1、用户点击网页内容,请求被发送到本机端口8080,被在那里监听的Coyote HTTP/1.1 Connector获得。

2、Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的回应。

3、Engine获得请求localhost/test/index.jsp,匹配所有的虚拟主机Host。

4、Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机),名为localhost的Host获得请求/test/index.jsp,匹配它所拥有的所有的Context。Host匹配到路径为/test的Context(如果匹配不到就把该请求交给路径名为“ ”的Context去处理)。

5、path=“/test”的Context获得请求/index.jsp,在它的mapping table中寻找出对应的Servlet。Context匹配到URL PATTERN为*.jsp的Servlet,对应于JspServlet类。

6、构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet()或doPost().执行业务逻辑、数据存储等程序。

7、Context把执行完之后的HttpServletResponse对象返回给Host。

8、Host把HttpServletResponse对象返回给Engine。

9、Engine把HttpServletResponse对象返回Connector。

10、Connector把HttpServletResponse对象返回给客户Browser。

  • Springboot框架、springmvc整个流程、各自优势

  • 索引了解吗,联合索引的原则

  • 消息中间件用过吗

  • 微服务用过吗

  • 集合类的使用

  • arraylist\linkedlist的区别

  • 并发、多线程了解吗


7.快手-未知部门(忘了投的哪个了。。。)

  • 你常用的集合类,是否线程安全

  • 怎么理解为什么需要线程安全

  • 基本类型对应包装类,包装类是什么,有什么作用

  • hsahmap为什么下标通过hashcode &(len - 1)来计算,为什么用到链表结构,相比红黑树呢

  • hashmap put() 为什么有链表,查找时时间复杂度

  • final是否线程安全

  • ArrayList LinkedList区别 时间复杂度

  • 基本数据类型

  • select * 为什么全表扫描

  • 问我的项目数据表有没有用到状态

  • 主键索引、普通索引关系

  • 索引原理

  • 索引种类

  • final是否线程安全

  • 大数相加(负数情况)

  • sql语句


二、秋招

国企问题比较杂,时间较短,一般在30分钟内,短的甚至10分钟,可能偏重些个人素质,面了挺多但基本没记录,过后实在想不起了。。。

通用问题:

  • 对项目整体设计的一个感受(面试官可能会让你画系统的架构图)
  • 在这个项目中你负责了什么、做了什么、担任了什么角色
  • 从这个项目中你学会了那些东西,使用到了那些技术,学会了那些新技术的使用
  • 另外项目描述中,最好可以体现自己的综合素质,比如你是如何协调项目组成员协同开发的或者在遇到某一个棘手的问题的时候你是如何解决的又或者说你在这个项目用了什么技术实现了什么功能比如:用redis做缓存提高访问速度和并发量、使用消息队列削峰和降流等等。

1.联通云数据

  • restful了解多少,使用过吗?怎么用
  • 分库分表用过吗,什么情况下分库分表
  • Java反射了解吗
  • sql调优怎么做
  • 什么样的列适合做索引
  • 用没用过全局索引
  • 实习时项目使用什么框架什么技术

2.移动研究院

  • hashmap了解多少
  • 扩容因子为什么是0.75
  • 红黑树介绍一下
😀END-BYE😀
#实习##面经##秋招##阿里巴巴##腾讯#
全部评论
楼主好厉害,可以问一下自己的项目是准备的什么类型的吗?对于中间件的了解是必要的吗?
点赞 回复
分享
发布于 2020-12-21 12:38

相关推荐

10 76 评论
分享
牛客网
牛客企业服务