百度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

目录
打赏
0
0
0
0
16429
分享
相关文章
java面试-基础语法与面向对象
本文介绍了 Java 编程中的几个核心概念。首先,详细区分了方法重载与重写的定义、发生阶段及规则;其次,分析了 `==` 与 `equals` 的区别,强调了基本类型和引用类型的比较方式;接着,对比了 `String`、`StringBuilder` 和 `StringBuffer` 的特性,包括线程安全性和性能差异;最后,讲解了 Java 异常机制,包括自定义异常的实现以及常见非检查异常的类型。这些内容对理解 Java 面向对象编程和实际开发问题解决具有重要意义。
49 15
|
3天前
|
Java 集合框架详解:系统化分析与高级应用
本文深入解析Java集合框架,涵盖List、Set、Map等核心接口及其常见实现类,如ArrayList、HashSet、HashMap等。通过对比不同集合类型的特性与应用场景,帮助开发者选择最优方案。同时介绍Iterator迭代机制、Collections工具类及Stream API等高级功能,提升代码效率与可维护性。适合初学者与进阶开发者系统学习与实践。
19 0
Java社招面试中的高频考点:Callable、Future与FutureTask详解
大家好,我是小米。本文主要讲解Java多线程编程中的三个重要概念:Callable、Future和FutureTask。它们在实际开发中帮助我们更灵活、高效地处理多线程任务,尤其适合社招面试场景。通过 Callable 可以定义有返回值且可能抛出异常的任务;Future 用于获取任务结果并提供取消和检查状态的功能;FutureTask 则结合了两者的优势,既可执行任务又可获取结果。掌握这些知识不仅能提升你的编程能力,还能让你在面试中脱颖而出。文中结合实例详细介绍了这三个概念的使用方法及其区别与联系。希望对大家有所帮助!
225 60
列表结构与树结构转换分析与工具类封装(java版)
本文介绍了将线性列表转换为树形结构的实现方法及工具类封装。核心思路是先获取所有根节点,将其余节点作为子节点,通过递归构建每个根节点的子节点。关键在于节点需包含 `id`、`parentId` 和 `children` 三个属性。文中提供了两种封装方式:一是基于基类 `BaseTree` 的通用工具类,二是使用函数式接口实现更灵活的方式。推荐使用后者,因其避免了继承限制,更具扩展性。代码示例中使用了 Jackson 库进行 JSON 格式化输出,便于结果展示。最后总结指出,理解原理是进一步优化和封装的基础。
Java社招面试题:一个线程运行时发生异常会怎样?
大家好,我是小米。今天分享一个经典的 Java 面试题:线程运行时发生异常,程序会怎样处理?此问题考察 Java 线程和异常处理机制的理解。线程发生异常,默认会导致线程终止,但可以通过 try-catch 捕获并处理,避免影响其他线程。未捕获的异常可通过 Thread.UncaughtExceptionHandler 处理。线程池中的异常会被自动处理,不影响任务执行。希望这篇文章能帮助你深入理解 Java 线程异常处理机制,为面试做好准备。如果你觉得有帮助,欢迎收藏、转发!
159 14
Java 面试必问!线程构造方法和静态块的执行线程到底是谁?
大家好,我是小米。今天聊聊Java多线程面试题:线程类的构造方法和静态块是由哪个线程调用的?构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节有助于掌握Java多线程机制。下期再见! 简介: 本文通过一个常见的Java多线程面试题,详细讲解了线程类的构造方法和静态块是由哪个线程调用的。构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节对掌握Java多线程编程至关重要。
69 13
Java线程调度揭秘:从算法到策略,让你面试稳赢!
在社招面试中,关于线程调度和同步的相关问题常常让人感到棘手。今天,我们将深入解析Java中的线程调度算法、调度策略,探讨线程调度器、时间分片的工作原理,并带你了解常见的线程同步方法。让我们一起破解这些面试难题,提升你的Java并发编程技能!
126 16
Java 高级面试技巧:yield() 与 sleep() 方法的使用场景和区别
本文详细解析了 Java 中 `Thread` 类的 `yield()` 和 `sleep()` 方法,解释了它们的作用、区别及为什么是静态方法。`yield()` 让当前线程释放 CPU 时间片,给其他同等优先级线程运行机会,但不保证暂停;`sleep()` 则让线程进入休眠状态,指定时间后继续执行。两者都是静态方法,因为它们影响线程调度机制而非单一线程行为。这些知识点在面试中常被提及,掌握它们有助于更好地应对多线程编程问题。
127 9
Java 最常见的面试题:怎么保证缓存和数据库数据的一致性?
Java 最常见的面试题:怎么保证缓存和数据库数据的一致性?
|
9月前
|
Java面试题:什么是JDBC以及如何在Java中使用它进行数据库操作?
Java面试题:什么是JDBC以及如何在Java中使用它进行数据库操作?
89 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等