百度Java研发面试题分析汇总

简介:

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

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

百度Java研发面试题分析汇总

先来说说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是SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议。要比HTTP协议安全。它使用SSL即是安全套接字层(SSL)进行信息交换。HTTP需要申请证书,是收费的。

FTP是文件传输协议。在网站上,如果你想把文件和人共享,最便捷的方式莫过于把文件上传到FTP服务器上,其他人通过FTP客户端程序来下载所需要的文件。FTP进行文件传输需要通过端口进行。一般所需端口为:控制链路—TCP端口21。控制器端。用于发送指令给服务器以及等待服务器响应。数据链路---TCP端口20。数据传输端口。用来建立数据传输通道的。主要用来从客户向服务器发送一个文件、从服务器向客户发送一个文件、从服务器向客户发送文件或目录列表。FTP为了适应不同的网络环境,支持主动连接和被动连接两种模式。这两种模式都主要针对数据链路进行的,跟控制链路无关。SFTP是Secure File Transfer Protocol的缩写,是安全文件传送协议。可以为传输文件提供一种安全的加密方法。跟ftp几乎语法功能一样。SFTP是SSH的一部分,是一种传输档案至Blogger伺服器的安全方式。它本身没有单独的守护进程,必须使用sshd守护进程来完成相应的连接操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以使用SFTP是十分安全的。但由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多。在对网络安全性要求更时,代替FTP使用。  

10. Java的参数传递中,值传递和引用传递区别。

值传递的时候,传递的参数是值的拷贝传递,传递动作完成以后就毫无瓜葛了。引用传递,传递的参数是引用的地址。也就是变量所对应的内存空间的地址。这两者的区分类比当初C语言中的,用函数方法交换两个数的值。


 
 
  1. int i = 0
  2. i = i++; 
  3.  
  4. //输出 i的值是0; 顺序应该是:先计算表达式的值,得0,然后i加1,此时i=1,最后赋值,赋值是把表达式的值赋值,所以,i又变成0了. 

11. 服务器网络编程中,解决回话跟踪有哪几种方法?

Cookie; Session; URL重写;

cookie在J2EE项目中的使用,Java中把Cookie封装成了java.servlet.http.Cookie类。每个Cookie都是该 Cookie类的对象。服务器通过操作Cookie类对象,对客户端Cookie进行操作。通过request.getCookies()获取客户端提交 的所有Cookie(以Cookie[]数组形式返回),通过 response.addCookie(Cookiecookie)向客户端设置Cookie。Cookie对象使用key-value属性对的形式保存 用户状态,一个Cookie对象保存一个属性对,一个request或者response同时使用多个Cookie。。


 
 
  1. // 服务器端获取cookie 
  2. Cookie[]cookies = request.getCookies(); 
  3. for (int i = 0; cookies != null && i < cookies.length;i++) { 
  4.          Cookiecookie = cookies[i]; 
  5.          if("username".equals(cookie.getName())) { 
  6.          } 
  7.       } 
  8.  
  9. //服务器端设置cookie 
  10.  
  11.  String username = "sa"
  12.  Cookie usernameCookie = new Cookie("username", username); 
  13.  response.addCookie(usernameCookie); 

cookie的不可跨域名性和cookie的有效期。


来源:51CTO

相关文章
|
2天前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
7天前
|
存储 缓存 Oracle
Java I/O流面试之道
NIO的出现在于提高IO的速度,它相比传统的输入/输出流速度更快。NIO通过管道Channel和缓冲器Buffer来处理数据,可以把管道当成一个矿藏,缓冲器就是矿藏里的卡车。程序通过管道里的缓冲器进行数据交互,而不直接处理数据。程序要么从缓冲器获取数据,要么输入数据到缓冲器。
Java I/O流面试之道
|
3天前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
21 4
|
4天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
31 4
|
10天前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
25 2
|
11天前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
10 2
|
15天前
|
存储 Java
[Java]面试官:你对异常处理了解多少,例如,finally中可以有return吗?
本文介绍了Java中`try...catch...finally`语句的使用细节及返回值问题,并探讨了JDK1.7引入的`try...with...resources`新特性,强调了异常处理机制及资源自动关闭的优势。
17 1
|
14天前
|
算法 Java
JAVA 二叉树面试题
JAVA 二叉树面试题
14 0
|
6月前
|
存储 Kubernetes 容器
百度搜索:蓝易云【Kubernetes使用helm部署NFS Provisioner】
现在,你已经成功使用Helm部署了NFS Provisioner,并且可以在Kubernetes中创建使用NFS存储的PersistentVolumeClaim。
202 10
|
6月前
百度搜索:蓝易云【什么是HTTP长轮询?】
现在,HTTP长轮询逐渐被WebSocket等更高效的实时通信技术所替代,但了解HTTP长轮询仍然有助于理解实时数据推送的基本原理。
126 9
下一篇
无影云桌面