笔试错误1

  参考题: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处理冲突:

  1.开放寻址法;Hi=(H(key) + di) MOD m,i=1,2,…,k(k<=m-1),其中H(key)为散列函数,m为散列表长,di为增量序列,可有下列三种取法:
  1). di=1,2,3,…,m-1,称线性探测再散列;
  2). di=1^2,(-1)^2,2^2,(-2)^2,(3)^2,…,±(k)^2,(k<=m/2)称二次探测再散列;
  3). di=伪随机数序列,称伪随机探测再散列。
  2. 再散列法:Hi=RHi(key),i=1,2,…,k RHi均是不同的散列函数,即在同义词产生地址冲突时计算另一个散列函数地址,直到冲突不再发生,这种方法不易产生“聚集”,但增加了计算时间。
  3. 链地址法(拉链法)

  *后缀表达式

  不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行,不再考虑运算符的优先规则,如:(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 对象用于执行对数据库已存在的存储过程的调用。

   

原文地址:https://www.cnblogs.com/jslee/p/3442207.html