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是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使用。

  SSL和SSH区别,SSH是secure shell,即安全外壳协议,它隶属于传输层的协议。它对传输的数据进行加密,同时对传输的数据进行压缩。SSL是secure sockets layer即安全套接层。

  (TCP/IP协议包括:物理层、数据链路层、网络层、传输层、应用层)

  (OSI七层:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层)

10. Java线程池安全如何保证。

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

public class Example {
String str = new String("good");
char[] ch = {'a','b','c'};
public static void main(String[] args) {
Example ex = new Example();
ex.change(ex.str, ex.ch);
System.out.print(ex.str +"and");
System.out.print(ex.ch);
}
public void change(String str, char ch[]){
str= "test ok";
ch[0]= 'g';
}
} // 输出 goodandgbc Java中确实是传值,而不是传引用
// 原因:str="test ok" 修改的是局部变量str,而不是类的成员变量str。类的成员变量并没有被修改。这个效果是,在change方法中定义了跟全局变量一样的变量名,被当做局部变量来处理。char ch[]传递的是地址,

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

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

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

  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。cookie的不可跨域名性和cookie的有效期。

// 服务器端获取cookie
Cookie[]cookies = request.getCookies();
for (int i = 0; cookies != null && i < cookies.length;i++) {
Cookiecookie = cookies[i];
if("username".equals(cookie.getName())) {
}
} //服务器端设置cookie

String username = "sa";

Cookie usernameCookie = new Cookie("username", username);

response.addCookie(usernameCookie);

   Session是服务器端使用的一种记录客户端状态的机制,使用上比Cookie简单一些,相应的也增加了服务器的存储压力。Session是另一种记录客户端状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查询该客户的状态就可以了。如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。Session保存在服务器端。为了获得更高的存取速度,服务器一般把Session放在内存里。每个用户都会有一个独立的Session。如果Session内容过于复杂,当大量客户访问服务器时可能会导致内存溢出。因此,Session里的信息应该尽量精简。Session在用户第一次访问服务器的时候自动创建。需要注意的是,只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session。如果尚未生成Session,也可以使用request.getSession(true)强制生成Session。Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session。用户每访问服务器一次,无论是否读写Session,服务器都认为该用户的Session“活跃(active)”了一次。

//  服务器端获取session
HttpSessionsession = request.getSession();
Stringusername = (String)session.getAttribute("username"); // 服务器端设置session
HttpSessionsession = request.getSession();
session.setAttribute("username","sa");

13. Java中正则表达式的学习。

1.  逻辑运算符:X|Y表示X或者Y; (abc)|(xyz)表示abc或者xyz。 边界匹配符:^表示从头匹配; 

2.  句点符号“.”来匹配所有字符。

3.  方括号符号,为了解决句点符号匹配范围过于广泛这一问题,你可以在方括号(“[]”)里面指定看来有意义的字符。但在方括号之内你只能匹配单个字符。

4.  或符号即“|”操作符。“|”操作符的基本意义就是“或”运算。要匹配 “toon”,使用“t(a|e|i|o|oo)n”正则表达式。这里不能使用方扩号,因为方括号只允许匹配单个字符;这里必须使用圆括号“()”。圆括号还可以用来分组。

5.  否符号,即“^”符号。如果用在方括号内,“^”表示不想要匹配的字符。用在外面表示以之为开头。

6.  表示次数的符号, ?表示零次或者一次; *表示零次或者多次; +表示一次或者多次; {n}表示恰好n次。

7.  转义字符 “\” ,表示符号是本意。

8.  

实例如下:

1. 号码格式:999-99-9999.
  正则表达式如下:[0-9]{3}\-[0-9]{2}\-[0-9]{4} 2. 同样的号码格式:999-99-9999和999999999都是正确的号码
  正则表达式如下:[0-9]{3}\-?[0-9]{2}\-?[0-9]{4} 3. 匹配汽车牌照四个数字和两个字母,则它的正则表达式如下:[0-9]{4}[A-Z]{2} 4. 只能输入数字:^[0-9]*$ //^是开头,$是结尾.
  
 

14.

百度Java研发面经100题 总结的更多相关文章

  1. 百度java开发面试题

    第一面  项目:  1.找一个项目,介绍下情况.其中遇到了什么问题,每种问题怎么样的解决方案.  算法题:  2.一个排好序的数组,找出两数之和为m的所有组合  3.自然数序列,找出任意连续之和等于n ...

  2. 数据结构+算法面试100题~~~摘自CSDN

    数据结构+算法面试100题~~~摘自CSDN,作者July 1.把二元查找树转变成排序的双向链表(树) 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表.要求不能创建任何新的结点,只调 ...

  3. java 开发面试题小整理(一)

    本篇文档将持续更新,有基础滴,也有深层次的,谢谢! 1.看下面的程序是否有问题,如果有问题,请指出并说明理由. * byte b1 = 3; * byte b2 = 4; * byte b3 = b1 ...

  4. Java开发面试题,3年工作经验的Java程序员面试经

    一.Java基础部分 1.使用length属性获取数组长度,public.private.protected.friendly区别 2.Collection和Collections区别 3.Strin ...

  5. 牛客网 Java 工程师能力评估 20 题 - 详解

    牛客网 Java 工程师能力评估 20 题 - 详解 不知在看博客的你是否知道 牛客网,不知道就太落后了,分享给你 : 牛客网 此 20 题,绝对不只是 20 题! 免责声明:本博客为学习笔记,如有侵 ...

  6. Go面试题精编100题

    Golang精编100题 选择题 1.   [初级]下面属于关键字的是()A. funcB. defC. structD. class 参考答案:AC 2.   [初级]定义一个包内全局字符串变量,下 ...

  7. LeetCode面试常见100题( TOP 100 Liked Questions)

    LeetCode面试常见100题( TOP 100 Liked Questions) 置顶 2018年07月16日 11:25:22 lanyu_01 阅读数 9704更多 分类专栏: 面试编程题真题 ...

  8. bzoj 前100题计划

    bzoj前100题计划 xz布置的巨大的坑.. 有空填题解... 1002 轮状病毒 用python手动matrixtree打表. #include<bits/stdc++.h> #def ...

  9. Java学习---程序设计_基础题[1]

    180813 补全没有的答案! 0. 数组排序大全[冒泡/选择/快速/插入] package com.ftl; import java.io.BufferedReader; import java.i ...

随机推荐

  1. Atitit  代理与分销系统(1)  子代理 充值总额功能设计概览 sum() groubpy subagt

    Atitit  代理与分销系统(1)  子代理 充值总额功能设计概览 sum() groubpy subagt Keyword 分组与聚合操作. 一个for做分组...里面的做聚合... 数据g操作查 ...

  2. Atitit.eclipse 4.3 4.4  4.5 4.6新特性

    Atitit intellij idea的使用总结attilax 1. ideaIC-2016.2.4.exe1 1.1. Ij vs eclipse市场份额1 1.2. Ij的优点(方便的支持gro ...

  3. [html]三列居中自动伸缩的结构

    html三列居中自动伸缩的结构 <div style="width:100%;height:80px;border:1px solid #DDD;margin-bottom:10px; ...

  4. Multiton & Singleton

    From J2EE Bloger http://j2eeblogger.blogspot.com/2007/10/singleton-vs-multiton-synchronization.html ...

  5. Apache Tomcat

    官网:http://tomcat.apache.org/ Documentation:http://tomcat.apache.org/tomcat-8.0-doc/index.html

  6. javascript中的原始值和复杂值

    × 目录 [1]特性 [2]存储方式 [3]访问方式 [4]比较方式 [5]动态属性 前面的话 javascript的数据类型可以分为两种:原始类型和引用类型.原始类型也称为基本类型或简单类型,jav ...

  7. javase基础复习攻略《七》

    容器是什么?通俗的讲容器指可以装其它东西的器皿,前面我们提到的数组便是容器的一种,容器的概念在JAVA中便可以理解为用来存储其它对象的器皿.本篇就让我们一起来认识一下JAVA为我们提供的容器类. 1. ...

  8. Windows 下搭建 Ruby 开发环境

    1.从http://rubyinstaller.org/downloads/下载“rubyinstaller-2.1.5-x64.exe”. 2. 双击下载的程序进行安装,勾选如下图的选项.默认安装目 ...

  9. JQuery 实现页面无刷新

    对于JQuery实现页面无刷新的效果,即:应用这个JQuery这个组件,可以实现在页面上加载数据库中的数据信息,但是并没有给用户页面刷新的感觉,这样既可以有效的进行数据交互,也可以不妨碍用户的其他操作 ...

  10. [java] 注释以及javadoc使用简介-汇率换算器的实现-插曲3

    [java] 注释以及javadoc使用简介-汇率换算器的实现-插曲3 // */ // ]]>   [java] 注释以及javadoc使用简介-汇率换算器的实现-插曲3 Table of C ...