参考题:http://www.cnblogs.com/v-July-v/archive/2011/10/17/3125425.html
*私网IP地址:10.0.0.0- 10.255.255.255;172.16.0.0- 172.31.255.255;192.168.0.0-192.168.255.255。
*Hash处理冲突:
*后缀表达式
不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行,不再考虑运算符的优先规则,如:(2+1)*3 ,即21+3*
*Bridge(桥接)
将抽象部分与它的实现部分相分离
*sizeof和strlen
对字符串进行sizeof操作的时候,会把字符串的结束符“ ”计算进去的,进行strlen操作求字符串的长度的时候,不计算 的。
数组作为函数参数传递的时候,已经退化为指针了,Func函数的参数str_arg[100]只是表示一个指针,那个100不起任何作用的。
*给定一个字符串,求出其最长的重复子串。
*对于一个内存地址是32位、内存页是8KB的系统。0X0005F123这个地址的页号与页内偏移分别是多少。
0x5F123/8K=2E,余数是1123;则页号是47页,页内偏移量应该是0X00001123。
*int *p1 = new int[10]; int *p2 = new int[10](); 的区别
int *p2 = new int[10]();申请了空间,而且进行了初始化: 读取全为0;
int *p1 = new int[10]; 只申请空间,没有进行初始化,读取未知;
数据存放是一个字节一个字节的!首字节指的是低字节。
计算机在内存中存储数据时使用了大、小端模式,请分别写出A=0X123456在不同情况下的首字节是,大端模式:0X12 小端模式:0X56 X86结构的计算机使用 小端 模式。
一般来说,大部分用户的操作系统(如windows, FreeBsd,Linux)是小端模式的。少部分,如MAC OS,是大端模式 的。
*蓄水池抽样
题目:要求从N个元素中随机的抽取k个元素,其中N无法确定
解法:首先选择N中的前k个数加入“蓄水池”中,然后从第k+1个数开始,以k/k+i(i=1,2,3...)的概率选择这个数,然后在蓄水池中随机选择一个数,并将其替换,N个元素遍历完毕后,蓄水池中的k个数就是随机选择的。
*一致性 hash 算法
*linux/unix远程登陆都用到了ssh服务,当网络出现错误时服务会中断,linux/unix端的程序会停止。为什么会这样?
当用户注销(logout)或者网络断开时,终端会收到 SIGHUP(hangup)信号从而关闭其所有子进程。因此,我们的解决办法就有两种途径:要么让进程忽略 HUP 信号,要么让进程运行在新的会话里从而成为不属于此终端的子进程。
*byte和int表示一样,只是范围不同,0->127 -128->-1
*所谓守护线程,是指在程序运行的时候在后台提供一种通用服务的线程,比如垃圾回收线程就是一个很称职的守护者,并且这种线程并不属于程序中不可或缺的部分。因 此,当所有的非守护线程结束时,程序也就终止了,同时会杀死进程中的所有守护线程。反过来说,只要任何非守护线程还在运行,程序就不会终止。
用户线程和守护线程两者几乎没有区别,唯一的不同之处就在于虚拟机的离开:如果用户线程已经全部退出运行了,只剩下守护线程存在了,虚拟机也就退出了。 因为没有了被守护者,守护线程也就没有工作可做了,也就没有继续运行程序的必要了。
将线程转换为守护线程可以通过调用Thread对象的setDaemon(true)方法来实现。在使用守护线程时需要注意一下几点:
(1) thread.setDaemon(true)必须在thread.start()之前设置,否则会跑出一个IllegalThreadStateException异常。你不能把正在运行的常规线程设置为守护线程。
(2) 在Daemon线程中产生的新线程也是Daemon的。
(3) 守护线程应该永远不去访问固有资源,如文件、数据库,因为它会在任何时候甚至在一个操作的中间发生中断。
*String的equals方法,只接受String的参数,其余都返回false。
*java 类初始化顺序
父类--静态变量
父类--静态初始化块
子类--静态变量
子类--静态初始化块
父类--变量
父类--初始化块
父类--构造器
子类--变量
子类--初始化块
子类--构造器
(1)访问SubClass.main(),(这是一个static方法),于是装载器就会为你寻找已经编译的SubClass类的代码(也就是SubClass.class文件)。在装载的过程中,装载器注意到它有一个基类(也就是extends所要表示的意思),于是它再装载基类。不管你创不创建基类对象,这个过程总会发生。如果基类还有基类,那么第二个基类也会被装载,依此类推。
(2)执行根基类的static初始化,然后是下一个派生类的static初始化,依此类推。这个顺序非常重要,因为派生类的“static初始化”有可能要依赖基类成员的正确初始化。创建对象是在加载,连接,初始化(静态) 之后的!
(3)当所有必要的类都已经装载结束,开始执行main()方法体,并用new SubClass()创建对象。
(4)类SubClass存在父类,则调用父类的构造函数,你可以使用super来指定调用哪个构造函数(也就是Beetle()构造函数所做的第一件事)。
基类的构造过程以及构造顺序,同派生类的相同。首先基类中各个变量按照字面顺序进行初始化,然后执行基类的构造函数的其余部分。
(5)对子类成员数据按照它们声明的顺序初始化,执行子类构造函数的其余部分。
*JSP UTF-8编码设置
<% page contentType = 是设置.jsp文件的读取方式的(编码人员到服务器)。
response.setContentType()的作用是使客户端浏览器,区分不同种类的数据,并根据不同的设置,调用浏览器内不同的程序嵌入模块来处理相应的数据。
<meta http-equiv=...>和上一个作用一样。
setContentType("text/html;charset=gb2312")与<meta>都指定了,并且不一致.哪一个有效呢? 前一个有效!
*Statement 是 Java 执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句。Statement对象,用于执行不带参数的简单SQL语句。
PreparedStatement 对象用于执行带或不带 IN 参数的预编译 SQL 语句;CallableStatement 对象用于执行对数据库已存在的存储过程的调用。