百度Java研发面试题 总结

1. 单例模式常见的应用场景分析。  

  在23种设计模式中,单例模式排行老大。虽然理解简单,但是对于应用场景。你真正的熟悉么?使用单例,是由于没必要每个请求都新建一个对象,这样既浪费CPU又浪费内存;之所以用多例,是为了防止并发问题;即一个请求改变了对象的状态,此时对象又处理另一个请求,而之前请求对对象状态的改变导致了对象对另一个请求做了错误的处理。

  先来说说Java web中的单例应用场景:数据库连接池就是单例模式,有且仅有一个连接池管理者,管理多个连接池对象。我们常用的service和dao层的对象通常都是单例的(由于其所有的请求都用一个对象来处理),而struts2中的action则是多例,由于每个请求是用一个新的对象来处理的(因为action本身含有请求参数的值,即可改变的状态)。 log4j日志记录也是单例模式,因为从始至终都仅维护一个对象。(应用程序的日志应用,一般都何用单例模式实现,这一般是由于共享的日志文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好追加)。

2. 什么是平衡二叉树。

  它或者是一颗空树,或者具有以下性质的二叉树:它的左子树和右子树的深度之差的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。

3. 什么是红黑树。

  红黑树是特殊的平衡二叉树。遵循红定理和黑定理。红定理:在一条路径上不能出现两个相连的红节点;黑定理:根节点必须是黑节点,而且所有节点通向树的尾端的路径上,所含的黑节点的个数必须相等。

4. 什么是B树。(二叉搜索树)

  所有节点存储一个关键字;非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树;所有非叶子节点最多拥有两个儿子。

5. 什么是B-树。(多路搜索树)

  根节点儿子树[2,m];非根节点非叶子节点的儿子树[m/2,m];每个节点的关键字数为[m/2-1,m-1]。

6. 什么是B+树。

  B+树是B-树的变体;在B-树的定义之上,补充定义有:所有关键字都在叶子节点出现;所有叶子节点增加一个链指针;非叶子节点的子树与关键字个数相同。  

  总结:平衡二叉树是一种二叉搜索树。其可以保证在log2(n)的时间内找到节点,而普通的二叉搜索树在最坏情况下性能近似与链表,所用时间为log(n)红黑树用在内部排序,即全放在内存中的,微软STL的map和set的内部实现就是红黑树。B树多用在内存里放不下,大部分数据存储在外存上时。因为B树层数少,因此可以确保每次操作,读取磁盘的次数尽可能的少。在数据较小,可以完全放到内存中时,红黑树的时间复杂度比B树低。反之,数据量较大,外存中占主要部分时,B树因其读磁盘次数少,而具有更快的速度。    

  补充红黑树的由来:在查找中,虽然hash表查找非常迅速,但是随着数据的种类增多,hash表长会变得更长,且冲突也会越来越多,那么如何才能实现无论在多大数据量的情况下,查找依然是高性能的呢?同时我们又知道树是很好的一种数据结构,那用于插入,删除,查找等都是很高效的数据树构,但问题是在很坏的情况下,操作很费时间,它的性能得到不保证,比如二叉查找树中如果左子树与右子树相差太远,那么查找时就很费时间。这时为了保证其有高效性,就得保证左树与右树不能差得太远,当向树中插入时,就按一定规则调整,使其达到规则,从而使其整体与局部查找效率得到提高。这就是红黑树的规则。

7. final finally finalize三者的区别。

  finalize是一个方法,而且它是Object类中的一个方法。当垃圾收集器在确定这个对象没有被引用时调用对象的finalize方法。它的作用是为GC清理对象之前做一些必要的清理工作(如输入/输出连接的对象的 finalize 方法可执行显式 I/O 事务,以便在永久丢弃对象之前中断连接)。

  finally用在try,catch异常机制中,不管什么情况都会执行。

  final修饰类,表示不可被继承;修饰基本数据类型,即常量不可变;修饰引用类型,指向的对象内容可变,对象不可变。

8. Error Exception RuntimeException

  异常机制的继承结构首先,基类为Throwable;Error和Exception继承Throwable;RuntimeException和IOException等继承Exception(即具体的RuntimeException继承RuntimeException).

  Error描述了内部错误以及资源耗尽的情形。应用程序不应该抛出这种类型的对象(一般是由虚拟机抛出)。程序级别不能处理。

  Exception则包括RuntimeException和其他非RuntimeException的。RuntimeException包括错误的类型转换、数组越界访问和试图访问空指针等等。处理RuntimeException的原则是:如果出现RuntimeException,那么一定是程序员的错误。例如,可以通过检查数组下标和数组边界来避免数组越界访问异常。非RuntimeException(IOException等等):这类异常一般是外部错误,例如试图从文件尾后读取数据等,这并不是程序本身的错误,而是在应用环境中出现的外部错误。  

  总结:比如5/0就是runtimeException异常,这样的异常可以在程序里不做处理,不会报错,运行时才会报异常。非runtimeException异常就是在程序里就要进行try catch的,不进行处理就会报错

9. 区别TCP UDP HTTP HTTPS SFTP FTP

  TCP可靠连接,三次握手,四次挥手。

  UDP不可靠连接。

  HTTPS

时间: 2024-10-10 06:57:00

百度Java研发面试题 总结的相关文章

千回百折:百度Java研发offer斩获记和经验分享

起因 面试过程 等待offer的过程中悟道 Java面试常考知识点个人总结 过程 百度——作为国内互联网的巨头之一,最近的一些风波对其褒贬不一,但是类似事件不是第一次发生,也绝对不是最后一次,对于真的找工作的人没有丝毫影响,反而更激发了加入百度的决心,毫不夸张的说,bant(n=网易)……可谓是诸多相关专业应届学生的向往之地,本人一直有bat情节,其中偏偏独爱作为世界互联网公司排名第四,国内头三把交椅的大百度…… 而自从去年百度全面冻结hc,停止社招之后,今年陆续又缩小了实习生的招聘规模,每个部

JAVA研发面试题总结——面向对象基础

前两天总结了阿里巴巴的笔试,因为之前也参加过一些面试,现在总结下通用面试题吧(不包含问项目的).九月份即将参与面试的童鞋可以参考参考. 异常有哪些? 主要分为:RuntimeException与CheckedException,CheckedException是在编译时候检查的,比如IOException.ClassNotFoundException.ServletException,如果不捕捉或者抛出异常,不能通过编译(之所以需要显式抛出,我个人理解是因为可以预想到的,极容易出现的):而Run

联想高级Java研发面经+面试题:Spring+多线程+MySQL+设计模式

上个礼拜,之前的一个同事突然联系我说他去面了联想的JAVA开发工程师,想分享一下面试经历和面试题.我当时就拍板说,好啊! 然后就整理了一下,写了这篇文章:和大家分享一下这次面试经验和面试题. 薪资还可以啊,年薪40W+啊!多少人的梦想啊! 言归正传,和大家分享一下这次联想的面经和面试题: 联想面经: 第一轮:电话初面 第二轮:技术面谈 第三轮:高管复试 第四轮:HR最后确认 No.1:第一轮面试--电话初面 首先确认对联想的意向度(如果异地更会考虑对工作地点(北京)的意向度!联想很看重这个):其

百度2016研发工程师模拟笔试题

1.下面程序的输出结果是?     #include<iostream.h>    void main(){        int n[][3]={10,20,30,40,50,60};        int (*p)[3];        p=n;        cout<<p[0][0]<<","<<*(p[0]+1)<<","<<(*p)[2]<<endl;    } A.10

Java工程师笔试题整理[校招篇]

隔着两个月即将开始校招了.你是不是也想借着这个机会崭露头角,拿到某些大厂的offer,赢取白富美.走上人生巅峰?当然如果你还没能打下Java基础,一定要先打好Java基础:如何一步一步的学Java - 学习编程 - 知乎专栏.然后再来看一下练习一下各大厂的面试笔试题目. 如果以下内容满足不了你,你还可以去看这篇: 2016校招编程题汇总 - 学习编程 - 知乎专栏 进入主要内容(主要内容整理来自牛客网:牛客网)(以下内容按照各大公司进行划分,对每一公司按照年份进行划分,如果想想下载以下内容,可以

史上最全的Java&amp;Android面试题搜集整理

最近在忙着准备面试,所以从全网搜集了一下java和android相关的面试题目,应该能够包含80%以上的试题吧~如果大家还有一些比较全面优质的题目资源,欢迎告知,我会继续补充进来,以便于更多同学可以从中获益. android性能优化系列 http://www.trinea.cn/android/performance/ 2016JAVA与Android面试题整理 http://www.nowcoder.com/discuss/3244 百度的android面试总结分析 http://blog.c

JAVA常见面试题及解答-java开发

JAVA常见面试题及解答 Java的垃圾回收总结  浅谈Java中的内部类 1)transient和volatile是java关键字吗? 如果用transient声明一个实例变量,当对象存储时,它的值不需要维持.例如: class T { transient int a;  //不需要维持 int b;  //需要维持 } 这里,如果T类的一个对象写入一个持久的存储区域,a的内容不被保存,但b的将被保存. volatile修饰符告诉编译器被volatile修饰的变量可以被程序的其他部分改变.在多

Java线程面试题 Top 50

原文链接: javarevisited 翻译: ImportNew.com- 李 广译文链接: http://www.importnew.com/12773.html 不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎.大多数待遇丰厚的Java开发职位都要求开发者精通多线程技术并且有丰富的Java程序开发.调试.优化经验,所以线程相关的问题在面试中经常会被提到. 在典型的Java面试中, 面试官会从线程

java常见面试题

从网上转的一些java基础知识面试题: 1.String是最基本的数据类型吗? 基本数据类型包括byte.int.char.long.float.double.boolean和short. java.lang.String类是final类型的,因此不可以继承这个类.不能修改这个类.为了提高效率节省空间,我们应该用StringBuffer类 2.int 和 Integer 有什么区别 Java 提供两种不同的类型:引用类型和原始类型(或内置类型).Int是java的原始数据类型,Integer是j