当前位置: 首页 > 科技观察

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

时间:2023-03-17 22:42:25 科技观察

1.单例模式常见应用场景分析。  在23种设计模式中,单例模式排在第一位。虽然理解简单,但是对于应用场景来说。你真的熟悉吗?使用单实例是因为不需要为每个请求创建一个新的对象,既浪费CPU又浪费内存;使用多个实例的原因是为了防止并发问题;即一个请求改变了对象的状态,此时对象处理了另一个请求,而上一个请求改变了对象的状态导致对象误处理了另一个请求。先说一下Javaweb中的单例应用场景:数据库连接池是单例模式,有一个且只有一个连接池管理器来管理多个连接池对象。我们常用的service和dao层的对象通常是单例的(因为所有的请求都由一个对象来处理),而struts2中的action是多实例的,因为每个请求都由一个新的对象Processed来处理(因为action本身包含了请求参数的值,即可以改变的状态)。log4j日志也是单例模式,因为自始至终只维护一个对象。(应用的日志应用一般采用单例模式实现,这一般是因为共享日志文件一直是打开的,因为只能有一个实例进行操作,否则内容不易追加)。2.什么是平衡二叉树。它要么是一棵空树,要么是一棵二叉树,具有以下性质:其左右子树深度之差的绝对值不超过1,且其左右子树均为平衡二叉树。3.什么是红黑树。红黑树是一种特殊的平衡二叉树。遵循红色定理和黑色定理。红色定理:两个相连的红色节点不能出现在一条路径上;黑色定理:根节点必须是黑色节点,并且通往树的末端的路径上的所有节点必须包含相同数量的黑色节点。4.什么是B树。(二叉搜索树)所有节点存储一个关键词;非叶节点的左指针指向比其关键字小的子树,右指针指向比其关键字大的子树;所有非叶节点最多有两个儿子。5.什么是B树。(多路搜索树)根节点子树[2,m];非根节点非叶节点子树[m/2,m];每个节点的关键词数量为[m/2-1,m-1]。6.什么是B+树。B+树是B树的变种;在B-tree的定义之上,补充定义包括:所有关键字都出现在叶节点中;为所有叶节点添加一个链指针;非叶节点的子树与相同数量的关键字相关联。  总结:平衡二叉树是二叉搜索树。可以保证在log2(n)的时间内找到结点,普通二叉查找树在最坏情况下的性能与链表相似,所用时间为log(n)。红黑树用于内部排序,即全部存储在内存中。微软STL的map和set内部实现是红黑树。B-tree多用于内存放不下的情况,大部分数据存储在外存中。因为B-tree层数少,可以保证每次操作读盘的次数越少越好。当数据很小,可以完全存储在内存中时,红黑树的时间复杂度低于B树。相反,当数据量很大,主要部分在外存时,B-tree由于其磁盘读取次数少,速度更快。    加入红黑树的由来:在查找中,虽然哈希表查找速度很快,但是随着数据类型的增加,哈希表的长度会变长,而且会越来越多冲突,那么我们如何才能实现无论数据量有多大,搜索仍然是高性能的呢?同时我们也知道树是一种非常好的数据结构。它是一种非常高效的数据树结构,用于插入、删除、查找等操作,但问题是在非常糟糕的情况下,操作非常耗时。它的性能没有任何保证。比如二叉搜索树中左子树和右子树相距太远,搜索起来会耗费很多时间。这时候为了保证它的高效率,就需要保证左树和右树之间的差异不能太大。在插入到树中时,按照一定的规则进行调整,使其达到规则,从而提高整体和局部的搜索效率。提升。这就是红黑树的规则。7、final和finallyfinalize的区别。finalize是一个方法,它是Object类中的一个方法。当垃圾收集器确定该对象未被引用时,将调用该对象的finalize方法。它的作用是在GC清理对象之前做一些必要的清理工作(比如输入/输出连接对象的finalize方法可以在永久丢弃对象之前执行显式I/O事务来中断连接)。finally用在try和catch异常机制中,无论什么情况都会执行。final修饰的类,表示不能被继承;修饰的基本数据类型,即常量是不可变的;修改后的引用类型,指向对象的内容是可变的,对象是不可变的。8、Error异常RuntimeException异常机制的继承结构首先,基类是Throwable;Error和Exception继承Throwable;RuntimeException和IOException继承Exception(即具体的RuntimeException继承RuntimeException)。错误描述了内部错误和资源耗尽的情况。应用程序不应抛出这种类型的对象(通常由虚拟机抛出)。程序级无法处理。Exception包括RuntimeException和其他非RuntimeException。RuntimeException包括不正确的类型转换、数组越界访问和尝试访问空指针等。处理RuntimeException的原则是:如果出现RuntimeException,那一定是程序员的失误。例如,可以通过检查数组下标和数组边界来避免数组越界访问异常。Non-RuntimeException(IOException等):这类异常一般是外部错误,比如试图从文件末尾读取数据等,这不是程序本身的错误,而是程序本身的错误发生在应用环境中。  总结:比如5/0是一个runtimeException异常。这样的异常在程序中无法处理,也不会报错。该异常将在运行时报告。非runtimeException是程序中的trycatch,不处理就会报错。9.TCPUDPHTTPHTTPSSFTPFTPTCP可靠连接的区别,三次握手,四次挥手。UDP是一种不可靠的连接。HTTPS是由SSL+HTTP协议构建的可以进行加密传输和身份认证的网络协议。它比HTTP协议更安全。它使用SSL或安全套接字层(SSL)进行信息交换。HTTP需要申请证书,是收费的。FTP是一种文件传输协议。在网站上,如果要与他人共享文件,最方便的方式就是将文件上传到FTP服务器上,其他人可以通过FTP客户端程序下载需要的文件。通过FTP传输文件需要通过一个端口来完成。一般需要的端口是:controllink-TCPport21.controllerside。用于向服务器发送命令,等待服务器响应。数据链路---TCP端口20。数据传输端口。用于建立数据传输通道。主要用于从客户端向服务器发送文件,从服务器向客户端发送文件,从服务器向客户端发送文件或目录列表。为了适应不同的网络环境,FTP支持主动连接和被动连接两种模式。这两种模式主要针对数据链路,与控制链路无关。SFTP是SecureFileTransferProtocol的缩写,是一种安全的文件传输协议。它可以为传输文件提供安全的加密方法。它具有与ftp几乎相同的语法功能。SFTP是SSH的一部分,是一种将文件传输到Blogger服务器的安全方式。它本身没有单独的守护进程,必须使用sshd守护进程来完成相应的连接操作,所以从某种意义上说,SFTP不像是一个服务器程序,而更像是一个客户端程序。SFTP也采用加密方式传输认证信息和传输的数据,所以使用SFTP是非常安全的。但由于这种传输方式采用了加密/解密技术,传输效率比普通FTP要低很多。当需要更新网络安全时,使用它代替FTP。10、在Java的参数传递中,值传递和引用传递是有区别的。传递值时,传递的参数是传递值的副本,传递动作完成后就无关紧要了。按引用传递,传递的参数是引用的地址。即变量对应的内存空间的地址。两者的区别是比较原始的C语言中,使用函数的方式来交换两个数的值。inti=0;i=i++;//输出i的值为0;顺序应该是:先计算表达式的值,得到0,然后给i加1,此时i=1,最后赋值,赋值就是表达式,所以i又变成了0。11、在服务器网络编程中,有哪些方法可以解决sessiontracking?曲奇饼;会议;网址重写;J2EE项目中cookie的使用,Java将Cookie封装成java.servlet.http.Cookie类。每个cookie都是Cookie类的一个对象。服务器通过操作Cookie对象来操作客户端Cookie。通过request.getCookies()获取客户端提交的所有cookies(以Cookie[]数组的形式返回),通过response.addCookie(Cookiecookie)向客户端设置cookies。Cookie对象使用键值属性对保存用户状态,一个Cookie对象保存一个属性对,一个请求或响应同时使用多个Cookie。.//服务器获取cookiesCookie[]cookies=request.getCookies();for(inti=0;cookies!=null&&i