百度-JAVA研发实习生-面试经验

以下内容来自于应聘者回忆整理

很多同学都想得到百度的实习或者校招机会。那从过来人的角度谈谈,要通过百度的实习、校招面试,都有哪些经验和注意事项呢?今天就跟大家分享一下。

总体情况:一共三次面试

【一面】

1、自我介绍

2、可以实习多久?

3、针对简历进行提问简历项目问

4、如何保证项目的线程安全的

常使用的保证线程安全的手段,使用synchronized关键字,使用显式锁,使用各种原子变量,修改数据时使用CAS机制等等。

5、 java 多线程,内存模型,生产者和消费者模式

生产者和消费者在同一时间段内共用同一存储空间,生产者向空间里生产数据,而消费者从空间里取走数据。

存在的问题:(1)当生产者比消费者快时,消费者会漏掉一部分数据;(2)当消费者比生产者快时,消费者会取走相同的数据。

解决方案(考虑到线程安全问题,解决此问题有三种方式):(1)同步代码块(2)同步方法(3)lock 锁机制, 通过创建 Lock 对象,采用 lock() 加锁,unlock() 解锁,来保护指定的代码块

内存模型:Java虚拟机规范中定义了Java内存模型(Java Memory Model,JMM),用于屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的并发效果,JMM规范了Java虚拟机与计算机内存是如何协同工作的:规定了一个线程如何和何时可以看到由其他线程修改过后的共享变量的值,以及在必须时如何同步的访问共享变量。

原始的Java内存模型存在一些不足,因此Java内存模型在Java1.5时被重新修订。这个版本的Java内存模型在Java8中仍然在使用。

Java内存模型(不仅仅是JVM内存分区):调用栈和本地变量存放在线程栈上,对象存放在堆上。

6、JVM 垃圾回收算法的种类都有什么?

(1)“标记–清除”算法;首先标记出所有需要被回收的对象,然后在标记完成后统一回收掉所有被标记的对象。(2)复制算法;将内存划分为等大的两块,每次只使用其中的一块。(3)“标记–整理”算法;(4)分代收集算法。

7、hashmap 和 hashtable 的比较

(1)Hashtable 是Dictionary的子类, HashMap 是Map接口的一个实现类;(2)Hashtable 中的方法是同步的,而 HashMap 中的方法在缺省情况下是非同步的。

8、concurrentHashmap 的线程安全的实现原理

ConcurrentHashMap在rehash的时候是有锁的,所以在rehash的过程中,其他线程无法对segment的hash表做操作,这就保证了线程安全。

9、反射攻击,序列化。

在反射型攻击中,攻击者利用了网络协议的缺陷或者漏洞进行IP欺骗,主要是因为很多协议对源IP不进行认证。

序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。. 在序列化期间,对象将其当前状态写入到临时或持久性存储区。. 以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。. 序列化使其他代码可以查看或修改,那些不序列化便无法访问的对象实例数据。. 确切地说,代码执行序列化需要特殊的权限:即指定了 SerializationFormatter 标志的 SecurityPermission。

10、JVM调优

jvm调优主要是针对垃圾收集器的收集性能优化,减少GC的频率和Full GC的次数,令运行在虚拟机上的应用能够使用更少的内存、高吞吐量、低延迟。 下面列举一些JVM调优的量化目标参考实例,注意:不同应用的JVM调优量化目标是不一样的。 调优一般是从满足程序的内存使用需求开始的,之后是时间延迟的要求,最后才是吞吐量的要求。

11、如何保证线程安全

(1)使用线程安全的类;(2)使用synchronized同步代码块,或者用Lock锁; > 由于线程安全问题,使用synchronized同步代码块 原理:当两个并发线程访问同一个对象object中的这个synchronized (this)同步代码块时,一个时间内只能有一个线程得到执行。 另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。

12、手写二分查找

13、手写一个链表的反 转算法

14、枚举和非枚举

15、手写一个单例模 式,让 写两种实现方式

16、画 JVM 的结构,堆的结构

17、反问

【二面】

总体情况:经理面,大概 1 个小时,主要问的项目经验,还有目前实习的内容,工作情况

1、没有什么难度,只要是真正实习,好好做项 目,回答这些应该都没问题。

2、例行的反问环节

【三面】

总体情况:半个多小时,技术面

1、手写了个快速排序

2、TCP 三次握手,为什么三次?

TCP为什么要三次握手?在《计算机网络》一书中其中有提到,三次握手的目的是"为了防止已经失效的连接请求报文段突然又传到服务端,因而产生错误",这种情况是: 一端 (client)A发出去的第一个连接请求报文并没有丢失,而是因为某些未知的原因在某个网络节点上发生滞留,导致延迟到连接释放以后的某个时间才到达另一端 (server)B。. 本来这是一个早已失效的报文段,但是B收到此失效的报文之后,会误认为是A再次发出的一个新... 在《计算机网络》一书中其中有提到,三次握手的目的是"为了防止已经失效的连接请求报文段突然又传到服务端,因而产生错误",

3、数组查找重复数

4、JVM 垃圾回收的过程

JVM中垃圾回收器就是通过 可达分析算法 来探索所有存活的对象 过程主要是扫描堆中的对象,看是否是 GC Root 对象所链接的对象, 如果没有与根类 (GC Root)相连,则表示可以回收,否则不会被回收 。

5、四类 java 引用作用和使用场景。

强引用:当内存不足,JVM开始垃圾回收,对于强引用的对象,就算是出现了OOM也不会对该对象进行回收,死都不收。

强引用是我们最常见的普通对象引用,只要还有强引用指向一个对象,就能表明对象还“活着”,垃圾收集器不会碰这种对象。在Java中最常见的就是强引用,把一个对象赋给一个引用变量,这个引用变量就是一个强引用。当一个对象被强引用变量引用时,它处于可达状态,它是不可能被垃圾回收机制回收的,即使该对象以后永远都不会被用到JVM也不会回收。因此强引用是造成Java内存泄漏的主要原因之一。

软引用:软引用是一种相对强引用弱化了一些的引用,需要用java.lang.ref.SoftReference类来实现,可以让对象豁免一些垃圾收集。对于只有软引用的对象来说,当系统内存充足时它不会被回收,当系统内存不足时它会被回收。软引用通常用在对内存敏感的程序中,比如高速缓存就有用到软引用,内存够用的时候就保留,不够用就回收! 这一点可以很好地用来解决OOM的问题,并且这个特性很适合用来实现缓存:比如网页缓存、图片缓存等。软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被JVM回收,这个软引用就会被加入到与之关联的引用队列中。

弱引用:弱引用需要用java.lang.ref.WeakReference类来实现,它比软引用的生存期更短

对于只有弱引用的对象来说,只要垃圾回收机制一运行,不管JVM的内存空间是否足够,都会回收该对象占用的内存。

应用场景:如果一个对象是偶尔的使用,并且希望在使用时随时就能获取到,但又不想影响此对象的垃圾收集,那么应该用 Weak Reference 来记住此对象。或者想引用一个对象,但是这个对象有自己的生命周期,你不想介入这个对象的生命周期,这时候就应该用弱引用,这个引用不会在对象的垃圾回收判断中产生任何附加的影响。

虚引用:虚引用需要java.lang.ref.PhantomReference类来实现。

顾名思义,就是形同虚设,与其他几种引用都不同,虚引用并不会决定对象的生命周期。

如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收,它不能单独使用也不能通过它访问对象,虚引用必须和引用队列(ReferenceQueue)联合使用。

虚引用的主要作用是跟踪对象被垃圾回收的状态。仅仅是提供了一种确保对象被finalize以后,做某些事情的机制。PhantomReference的get方法总是返回nul,因此无法访问对应的引用对象。其意义在于说明一个对象已经进入finalization阶段,可以被gc回收,用来实现比finalization机制更灵活的回收操作。换句话说,设置虚引用关联的唯一目的,就是在这个对象被收集器回收的时候收到一个系统通知或者后续添加进一步的处理。Java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。虚引用必须和引用队列关联使用,当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会把这个虚引用加入到与之 关联的引用队列中。程序可以通过判断引用队列中是否已经加入了虚引用,来了解被引用的对象是否将要被垃圾回收。如果程序发现某个虚引用已经被加入到引用队列,那么就可以在所引用的对象的内存被回收之前采取必要的行动。

6、流量控制的机制

最基本的流量控制技术是IEEE 802.3定义的以太Pause机制:当网络中的下游设备发现其流量接收能力小于上游设备的发送能力时,会主动发Pause帧给上游设备,要求上游设备暂停流量发送,等待一段时间后再继续发送。 但是以太Pause机制是将链路上所有的流量都暂停,即流量暂停是针对整个接口。

7、大小顶堆

计算机中的“大顶堆”就是把数据放在一颗完全二叉树中,形状看上去跟我们提到的“土堆”,“垃圾堆”差不多。

8、找数组前 n 大元 素

9、滑动窗口和选择重传

若从滑动窗口的观点来统一看待1比特滑动窗口、后退n及选择重传三种协议,它们的差别仅在于各自窗口尺寸的大小不同而已。 1比特 滑动窗口协议 :发送窗口=1,接收窗口=1;后退n协议:发送窗口>1,接收窗口=1;选择重传协议:发送窗口>1,接收窗口>1。

10、对未来的规划

11、家是哪儿的

12、你和你同学比有什么优势?

13、你认为华三,华为这样的通信企业和互联网公司有什么区别?比较下两个公司的主营业务,你认为 有什么不同

华为是全球领先的信息与通信技术(ICT)解决方案供应商,专注于ICT领域,坚持稳健经营、持续创新、开放合作,在电信运营商、企业、终端和云计算等领域构筑了端到端的解决方案优势,为运营商客户、企业客户和消费者提供有竞争力的ICT解决方案、产品和服务。

华为聚焦ICT基础设施领域,围绕政府及公共事业、金融、能源、电力和交通等客户需求持续创新,提供可被合作伙伴集成的ICT产品和解决方案,帮助企业提升通信、办公和生产系统的效率,降低经营成本。

华为产品和解决方案涵盖移动、宽带、IP、光网络、网络能源 、电信增值业务和终端等领域,致力于提供全IP融合解决方案,使最终用户在任何时间、任何地点都可以通过任何终端享受一致的通信体验,方便人们的沟通和丰富人们的生活。

杭州华三通信技术有限公司(简称华三通信), 主要提供IT基础架构产品及方案的研究、开发、生产、销售及服务。华三通信在中国设有38个分支机构,目前公司有员工5000人,其中研发人员占55%。

H3C不但拥有全线路由器和以太网交换机产品,还在网络安全、云存储、云桌面、硬件服务器、WLAN、SOHO及软件管理系统等领域稳健成长,H3C已经从单一网络设备供应商转变为多产品IToIP解决方案供应商。

14、反问

想要更多百度实习、校招的机会,请点击这里


  • 1、刺猬实习遵循行业规范,任何转载的稿件都会明确标注作者和来源
  • 2、刺猬实习的原创文章,请转载时务必注明"来源:刺猬实习",不尊重原创的行为刺猬实习或将追究责任
  • 3、作者投稿可能会经刺猬实习编辑修改或补充。

相关推荐