1. 在java中一个unicode占2个字节(byte)。

 一个字节等于8比特位(bit)。 

 所以每个Unicode码占用16个比特位。

2   ./表示当前项目的路径
    ../表示当前目录的父目录路径 
   盘符:\\name\\file 或者 盘符:/name/file
   表示物理路径

3. JSP内置对象:

  pageContext javax.servlet.jsp.PageContext
  request javax.servlet.http.HttpServletRequest 
  response javax.servlet.http.HttpServletResponse 
  session javax.servlet.http.HttpSession 
  application javax.servlet.ServletContext 
  config javax.serlvet.ServletConfig 
  exception java.lang.Throwable
  page java.lang.Object 
  out javax.servlet.jsp.JspWriter 
  作用: 
  1、pageContext 表示页容器 EL表达式、 标签 、上传 
  2、request 服务器端取得客户端的信息:头信息 、Cookie 、请求参数 ,最大用处在MVC设计模式上 
  3、response 服务器端回应客户端信息:Cookie、重定向 
  4、session 表示每一个用户,用于登录验证上 
  5、application 表示整个服务器 
  6、config 取得初始化参数,初始化参数在web.xml文件中配置 
  7、exception 表示的是错误页的处理操作 
  8、page 如同this一样,代表整个jsp页面自身 
  9、out 输出 ,但是尽量使用表达式输出

4. final变量,如果是基本数据类型,则其数值一旦初始化后就不能被改变。如果是引用类型的变量,则对其初始化后,便不能再指向另一个对象,但是其里面的值是可以改变的。引用变量所指向的对象中的内容是可以改变的。

5. instanceof运算符能够用来判断一个对象是否为:

  1. 一个类的实例

  2. 一个实现了指定接口的类的实例

  3. 一个子类的实例

6.   

String 类中

 

== 是判断地址是否相同

 str.equals()是判断内容的(重写了equals方法)

因为equals来自Object类,所以是判断对象是否相同的

7.   1.类指外部类,最大的类,修饰符有public(表示该类在项目所有类中可以被导入),default(该类只能在同一个package中使用),abstract,final

 

  2.内部类指位于类内部但不包括位于块、构造器、方法内,且有名称的类,修饰符有public,private,protected访问控制符,也可以用static,final关键字修饰,public和private比较简单,一个表示所有可以被所有类访问,一个表示只能被自身访问,protected修饰的成员类可以被同一个包中的类和子类访问。而default修饰的成员类只能被同一个包中的类访问。

 

  3.局部内部类指位于块、构造器、方法内的有名称类,最多只能有final修饰
8.   Arrays.asList()将一个数组转化为一个List对象,这个方法会返回一个ArrayList类型的对象, 这个ArrayList类并非java.util.ArrayList类,而是Arrays类的静态内部类!用这个对象对列表进行添加删除更新操作,就会报UnsupportedOperationException异常。
9.  hashMap在单线程中使用大大提高效率,在多线程的情况下使用hashTable来确保安全。hashTable中使用synchronized关键字来实现安全机制,但是synchronized是对整张hash表进行锁定即让线程独享整张hash表,在安全同时造成了浪费。concurrentHashMap采用分段加锁的机制来确保安全
10. 通过JDBC访问数据库包含下面哪几步? 1、加载JDBC驱动程序:
2、提供JDBC连接的URL 3、创建数据库的连接 4、创建一个Statement 5、执行SQL语句 6、处理结果 7关闭JDBC对象 

1
1.
强类型语言也称为强类型定义语言。是一种总是强制类型定义的语言,要求变量的使用要严格符合定义,所有变量都必须先定义后使用。
java、.NET、C++等都是强制类型定义的。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。

12.
   传值传参的时候,我们在函数中改变了参数的值,其对应的变量的值并不改变,值类型传参就是将变量保存的内容复制到函数的形参中,他们是两个不同的变量,值不过保存的内容相同不了.
  引用传参保存的是一个地址,这个地址里保存的是变量的具体值,而引用类型作为参数的时候,是将变量保存的地址值赋值到参数变量里,这样他们都指向了同一个内容,这样我们改变参数的成员的话,那么相应的变量的成员也会改变。
13. 
  (1). Java 并发库 的Semaphore 可以很轻松完成信号量控制,Semaphore可以控制某个资源可被同时访问的个数,通过 acquire() 获取一个许可,如果没有就等待,而 release() 释放一个许可。
  (2). CyclicBarrier 主要的方法就是一个:await()。await() 方法没被调用一次,计数便会减少1,并阻塞住当前线程。当计数减至0时,阻塞解除,所有在此 CyclicBarrier 上面阻塞的线程开始运行。
  (3). 倒计数(CountDown)门闩(Latch)。倒计数不用说,门闩的意思顾名思义就是阻止前进。在这里就是指 CountDownLatch.await() 方法在倒计数为0之前会阻塞当前线程。
14. HttpServletResponse完成:设置http头标,设置cookie,设置返回数据类型,输出返回数据;读取路径信息是HttpServletRequest做的
15 .方法区在JVM中也是一个非常重要的区域,它与堆一样,是被 线程共享 的区域。 在方法区中,存储了每个类的信息(包括类的名称、方法信息、字段信息)、静态变量、常量以及编译器编译后的代码等。
16 .
  1.Statement、PreparedStatement和CallableStatement都是接口(interface)。  
  2.Statement继承自Wrapper、PreparedStatement继承自Statement、CallableStatement继承自PreparedStatement。  
  3. Statement接口提供了执行语句和获取结果的基本方法;  
  PreparedStatement接口添加了处理 IN 参数的方法;  
  CallableStatement接口添加了处理 OUT 参数的方法。  
  4.  
  a.Statement:  
  普通的不带参的查询SQL;支持批量更新,批量删除;  
  b.PreparedStatement:  
  可变参数的SQL,编译一次,执行多次,效率高;  
  安全性好,有效防止Sql注入等问题;  
  支持批量更新,批量删除;  
  c.CallableStatement:  
  继承自PreparedStatement,支持带参数的SQL操作;  
  支持调用存储过程,提供了对输出和输入/输出参数(INOUT)的支持;  
  Statement每次执行sql语句,数据库都要执行sql语句的编译 ,  
  最好用于仅执行一次查询并返回结果的情形,效率高于PreparedStatement。  
  PreparedStatement是预编译的,使用PreparedStatement有几个好处  
  1. 在执行可变参数的一条SQL时,PreparedStatement比Statement的效率高,因为DBMS预编译一条SQL当然会比多次编译一条SQL的效率要高。  
  2. 安全性好,有效防止Sql注入等问题。  
  3.  对于多次重复执行的语句,使用PreparedStament效率会更高一点,并且在这种情况下也比较适合使用batch;  
  4.  代码的可读性和可维护性。
17 .  servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁, 而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。
18.   doGet/doPost 则是在 javax.servlet.http.HttpServlet 中实现的
19.  
  Servlet的生命周期分为5个阶段:加载、创建、初始化、处理客户请求、卸载。
  (1)加载:容器通过类加载器使用servlet类对应的文件加载servlet
  (2)创建:通过调用servlet构造函数创建一个servlet对象
  (3)初始化:调用init方法初始化
  (4)处理客户请求:每当有一个客户请求,容器会创建一个线程来处理客户请求
  (5)卸载:调用destroy方法让servlet自己释放其占用的资源
 20.  
  forward和redirect是最常问的两个问题
  forward,服务器获取跳转页面内容传给用户,用户地址栏不变
  redirect,是服务器向用户发送转向的地址,redirect后地址栏变成新的地址
21.   JVM中一个字节以下的整型数据会在JVM启动的时候加载进内存,除非用new Integer()显式的创建对象,否则都是同一个对象
22 .  静态的include不允许变量同名
23.  
   -Xmx:最大堆大小
  -Xms:初始堆大小
  -Xmn:年轻代大小
  -XXSurvivorRatio:年轻代中Eden区与Survivor区的大小比值
  年轻代5120m, Eden:Survivor=3,Survivor区大小=1024m(Survivor区有两个,即将年轻代分为5份,每个Survivor区占一份),总大小为2048m。
  -Xms初始堆大小即最小内存值为10240m
24. 
  1、int i = 100/ 0; 会出现异常,会抛出异常,System.out.print(i)不会执行,
  2、catch捕捉异常,继续执行System.out.print(1);
  3、当执行 thrownewRuntimeException();  又会抛出异常,这时,除了会执行finally中的代码,其他地方的代码都不会执行
25.    
  JVM 内存可简单分为三个区:
  1、堆区(heap):用于存放所有对象,是线程共享的(注:数组也属于对象)
  2、栈区(stack):用于存放基本数据类型的数据和对象的引用,是线程私有的(分为:虚拟机栈和本地方法栈)
  3、方法区(method):用于存放类信息、常量、静态变量、编译后的字节码等,是线程共享的(也被称为非堆,即 None-Heap)
  Java 的垃圾回收器(GC)主要针对堆区
  方法调用时,会创建栈帧在栈中,调用完是程序自动出栈释放,而不是gc释放
26.  
exception是JSP九大内置对象之一,其实例代表其他页面的异常和错误。只有当页面是错误处理页面时,即isErroePage为 true时,该对象才可以使用。errorPage的实质就是JSP的异常处理机制,发生异常时才会跳转到 errorPage指定的页面,没必要给errorPage再设置一个errorPage。所以当errorPage属性存在时, isErrorPage属性值为false
27. 

当一个变量定义为 volatile 之后,将具备两种特性:

  1.保证此变量对所有的线程的可见性,这里的“可见性”,如本文开头所述,当一个线程修改了这个变量的值,volatile 保证了新值能立即同步到主内存,以及每次使用前立即从主内存刷新。但普通变量做不到这点,普通变量的值在线程间传递均需要通过主内存(详见:Java内存模型)来完成。

  2.禁止指令重排序优化。有volatile修饰的变量,赋值后多执行了一个“load addl $0x0, (%esp)”操作,这个操作相当于一个内存屏障(指令重排序时不能把后面的指令重排序到内存屏障之前的位置),只有一个CPU访问内存时,并不需要内存屏障;(什么是指令重排序:是指CPU采用了允许将多条指令不按程序规定的顺序分开发送给各相应电路单元处理)。

volatile 性能:

  volatile 的读性能消耗与普通变量几乎相同,但是写操作稍慢,因为它需要在本地代码中插入许多内存屏障指令来保证处理器不发生乱序执行。