目录

类之间的关系

初始化局部变量和全局变量

new URL()时必须捕获检查异常

Application、Applet和Servlet

ConcurrentHashMap

Arrays.asList()

Math.cos为计算弧度的余弦值,Math.toRadians函数将角度转换为弧度

request.getParameter获取内容的编码格式

JVM 垃圾回收

volatile关键字的作用

JSP九大内置对象

自动数据类型转换

抽象类和接口的修饰符

ThreadLocal类用于创建一个线程本地变量

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


类之间的关系

Use-A依赖关系;Has-A 组合关系,合成关系;Is-A 继承关系

       1. Use-A 依赖关系:“是类与类(通常为函数的参数)之间的连接,依赖总是单向的”

       2. Has-A合成关系:“是关联关系的一种,是整体和部分(通常为一个私有的变量)之间的关系,并且代表的整体对象负责构建和销毁代表部分对象,代表部分的对象不能共享”

       3. Is-A继承关系:“表示类与类之间的继承关系、接口与接口之间的继承的关系以及类对接口实现的关系”

初始化局部变量和全局变量

局部变量被定义时,系统不会对其初始化,您必须自行对其初始化。

定义全局变量时,系统会自动对其初始化,如下所示:

注意数组无论是定义为实例变量还是局部变量,若没有初始化,都会被自动初始化。

new URL()时必须捕获检查异常

这个异常是由于字符串格式和URL不符导致的,与网址是否存在无关。URL的toString方法返回字符串,无论网址是否存在。

@Test
public void testUrl() throws MalformedURLException {

     URL url = new URL("http://www.baidu.com");

     System.out.println(url);

}

Application、Applet和Servlet

1. Application

        Java应用程序,是可以独立运行的Java程序,由Java解释器控制执行。

2. Applet

        Java小程序,不能独立运行(嵌入到Web页中),由Java兼容浏览器控制执行。

3. Servlet

        Java技术对CGI 编程的解决方案。

        是运行于Web server上的、作为来自于Web browser 或其他HTTP client端的请求和在server上的数据库及其他应用程序之间的中间层程序。

ConcurrentHashMap

       使用segment来分段和管理锁,segment继承自ReentrantLock,因此ConcurrentHashMap使用ReentrantLock来保证线程安全。(JDK 1.7)

       JDK 1.8 数组+链表+红黑树

Arrays.asList()

       返回  java.util.Arrays.ArrayList 对象,这里的 ArrayList 是 Arrays 私有的内部类。不能调用List的add(),remove()等方法,会报错:UnsupportedOperationException

如:

List list = Arrays.asList(1,2,3,4,5);

list.add(6);

Math.cos为计算弧度的余弦值,Math.toRadians函数将角度转换为弧度

request.getParameter获取内容的编码格式

       1. 浏览器根据jsp页面开头声明的编码方式对request中参数编码;

       2. tomcat默认解码是ISO-8859-1, 但是我们可以显示指定解码格式,通过调用 request.setCharacterEncoding("UTF-8"),或者修改tomcat的配置文件server.xml中的编码,添加uriEncoding属性。

JVM 垃圾回收

       1. 垃圾回收在jvm中优先级相当相当低。

       2. 垃圾收集器(GC)程序开发者只能推荐JVM进行回收,但何时回收,回收哪些,程序员不能控制。

       3. 垃圾回收机制只是回收不再使用的JVM内存,如果程序有严重BUG,照样内存溢出。

       4. 进入DEAD的线程,它还可以恢复,GC不会回收。真正宣布一个对象死亡,至少需要经历2次标记过程。当第一次标记时会同时进行一次筛选(判断此对象是否有必要执行finalize方法)。如果对象没有覆盖该方法,就面临死亡,所以说这个方法是对象逃脱死亡命运的最后一次机会。

volatile关键字的作用

       volatile是java中的一个类型修饰符。

       用来修饰被不同线程访问和修改的变量。如果不加入volatile,基本上会导致这样的结果:要么无法编写多线程程序,要么编译器失去大量优化的机会。

1. 可见性

        可见性指的是在一个线程中对该变量的修改会马上由工作内存(Work Memory)写回主内存(Main Memory),所以会马上反应在其它线程的读取操作中。顺便一提,工作内存和主内存可以近似理解为实际电脑中的高速缓存和主存,工作内存是线程独享的,主存是线程共享的。

2. 禁止指令重排序优化

        大家知道我们写的代码(尤其是多线程代码),由于编译器优化,在实际执行的时候可能与我们编写的顺序不同。编译器只保证程序执行结果与源代码相同,却不保证实际指令的顺序与源代码相同。这在单线程看起来没什么问题,然而一旦引入多线程,这种乱序就可能导致严重问题。volatile关键字就可以从语义上解决这个问题。

        注意,禁止指令重排优化这条语义直到jdk1.5以后才能正确工作。此前的JDK中即使将变量声明为volatile也无法完全避免重排序所导致的问题。所以,在jdk1.5版本前,双重检查锁形式的单例模式是无法保证线程安全的。

JSP九大内置对象

1. request对象

        客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。

2. response对象

        response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。它是HttpServletResponse类的实例。

3. session对象

        session对象指的是客户端与服务器的一次会话,从客户连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止。它是HttpSession类的实例。

4. application对象

        application对象实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭,在此期间,此对象将一直存在;这样在用户的前后连接或不同用户之间的连接中,可以对此对象的同一属性进行操作;在任何地方对此对象属性的操作,都将影响到其他用户对此的访问。服务器的启动和关闭决定了application对象的生命。它是ServletContext类的实例。

5. config对象

        config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象)

6. out对象

        out对象是JspWriter类的实例,是向客户端输出内容常用的对象。

7. page对象

        page对象就是指向当前JSP页面本身,有点像类中的this指针,它是java.lang.Object类的实例

8. exception对象

      exception对象是一个异常对象,当一个页面在运行过程中发生了异常,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。他实际上是java.lang.Throwable的对象

9. pageContext对象

        pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的SESSION,也可以取本页面所在的application的某一属性值,他相当于页面中所有功能的集大成者,它的本类名也叫pageContext。

自动数据类型转换

自动转换按从低到高的顺序转换。不同类型数据间的优先关系如下: 

低 --------------------------------------> 高 

byte,short,char-> int -> long -> float -> double

抽象类和接口的修饰符

1. 关于抽象类

       JDK 1.8以前,抽象类的方法默认访问权限为protected

       JDK 1.8时,抽象类的方法默认访问权限变为default

2. 关于接口

       JDK 1.8以前,接口中的方法必须是public的

       JDK 1.8时,接口中的方法可以是public的,也可以是default的

       JDK 1.9时,接口中的方法可以是private的

原因:

        为了避免冗余代码并提高可重用性,Oracle 计划在 Java SE 9 的接口中引入私有方法。从 Java SE 9 开始可以在接口中使用 ‘private’ 关键字写私有方法和私有静态方法了。

ThreadLocal类用于创建一个线程本地变量

        在Thread中有一个成员变量ThreadLocal,该变量的类型是ThreadLocalMap,也就是一个Map,它的键是threadLocal,值为就是变量的副本。通过ThreadLocal的get()方法可以获取该线程变量的本地副本,在get方法之前要先set,否则就要重写initialValue()方法。

myBatis面试题 如何构建一个线程安全的SqlSession

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

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

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

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐