以下内容来自于应聘者回忆整理
很多同学都想得到百度的实习或者校招机会。那从过来人的角度谈谈,要通过百度的实习、校招面试,都有哪些经验和注意事项呢?今天就跟大家分享一下。
1、 自我介绍
2、针对简历进行提问
比如,你觉得你项目中最大的亮点是什么
3、数据库的慢查询日志、执行计划、索引、B 树和 B+树的区别
4、Java 有哪些数据类型,分别占多少个字节?
Java一共有8种基本数据类型:int占4字节,short占2字节,long占8字节,byte占1字节,float占4字节,double占8字节,char占2字节,boolean占1字节。
5、抽象类与接口之间的区别
抽象类和接口的区别: 默认的方法实现 抽象类可以有默认的方法实现完全是抽象的。接口根本不存在方法的实现。 抽象类中可以有已经实现了的方法,也可以有被abstract修饰的方法(抽象方法),因为存在抽象方法,所以该类必须是抽象类。但是接口要求只能包含抽象方法,抽象方法是指没有实现的方法。所以就不能像抽象类那么无赖了,接口就根本不能存在方法的实现。
6、 Redis 的集群
Redis 集群没有使用一致性 hash,而是引入了哈希槽【hash slot】的概念。
Redis 集群有16384 个哈希槽,每个 key 通过 CRC16 校验后对 16384 取模来决定放置哪个槽。集群的每个节点负责一部分hash槽。
所有的 redis 节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。
节点的 fail 是通过集群中超过半数的节点检测失效时才生效。
客户端与 Redis 节点直连,不需要中间代理层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。
7、数据库的悲观锁、乐观锁
乐观锁( Optimistic Locking ) 是相对悲观锁而言的,乐观锁假设数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让返回用户错误的信息,让用户决定如何去做。 相对于悲观锁,在对数据库进行处理的时候,乐观锁并不会使用数据库提供的锁机制。
8、手撕堆排序以及一个死锁的案
9、 JVM 内存区域
JVM 内存区域主要分为线程私有区域【程序计数器、虚拟机栈、本地方法区】、线程共享区域【JAVA 堆、方法区】、直接内存。 线程私有数据区域生命周期与线程相同, 依赖用户线程的启动/结束 而 创建/销毁.
10、 说一下二叉搜索树如何转变为链表
11、 讲一下关键词 native
native关键字说明其修饰的方法是一个原生态方法,方法对应的实现不是在当前文件,而是在用其他语言(如C和C++)实现的文件中。
12、讲一下 JDK、JRE、JVM 分别是什么以及他们之间的关系
JDK ,全称 Java Development Kit,是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的 Java 应用程序。 JDK 是整个 Java 开发的核心。 JRE ,全称 Java Runtime Environment,是指 Java 的运行环境
JDk、JRE内部都包含JAVA虚拟机JVM,JAVA虚拟机内部包含许多应用程序的类的解释器和类加载器
13、数据库中的搜索引擎了解吗?说一下有什么以及他们的区别
搜索引擎是一种计算机程序,它是特定的搜索策略,用在文件、信息记载或数据库中进行搜索,并且它的核心模块一般包括爬虫、索引、检索和排序等。
有MyISAM、InnoDB、MERGE、MEMORY (HEAP)、BDB (BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE。
14、 聊一下集合类
集合类是可以往里面保存多个对象的类,存放的是对象,不同的集合类有不同的功能和特点,适合不同的场合,用以解决一些实际问题。 集合类是用来存放某类对象的
15、聊了下设计模式,单例和观察者模式,代理模式等等,一般会问你熟悉哪些代理模式
代理模式分为静态代理、动态代理。 静态代理是由程序员创建或工具生成代理类的源码,再编译代理类。 所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了。
16、 死锁的四个必要条件
(1)互斥条件:一个资源每次只能被一个进程使用。 (2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。 (3)不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。 (4) 循环等待
17、讲一下类加载有哪些类型,以及 class 类加载和 forname 加载有哪些区别
在我们使用一个类之前,JVM需要先将该类的字节码文件(.class文件)从磁盘、网络或其他来源加载到内存中,并对字节码进行解析生成对应的Class对象,这就是类加载器的功能。我们可以利用类加载器,实现类的动态加载。
区别:(1)Class.forName除了将类的.class文件加载到jvm中之外,还会对类进行解释,执行类中的static块。 (2)而classloader只干一件事情,就是将.class文件加载到jvm中,不会执行static中的内容,只有在newInstance才会去执行static块。
18、 说一下 KMP 算法
KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息。KMP算法的时间复杂度O(m+n)
19、 一致性 hash
一致性hash就是 计算每个分布式服务器落点的算法 假设,服务器都在一个线上或则环上,缓存请求落点顺时针寻找最近的服务器,这样的好处就是,如果一台服务器down了,只会影响一段缓存,其他的不受影响,加减服务器成本降到最低,如果是余数散列算法,只要down掉一台缓存失败率上升至少80%,所以memcache分布式,都是用一致性hash算法来计算服务器散列位置的,你用php的memcached扩展,add服务器,可以选择散列算法,默认是一致性hash,也可以选择余数。
一致性hash的使用在PHP中有三种选择分别是原生的memcache扩展,memcached扩展,还有一个是网上比较流行的 Flexihash类。前两者都适用于memcache 但不适合Redis
Flexihash 是一个小型PHP库,实现了一致的哈希,这在分布式缓存中最有用。
想要更多百度实习、校招的机会,请点击这里