一、

构造方法每次都是构造出新的对象,不存在多个线程同时读写同一对象中的属性的问题,所以不需要同步 。

如果父类中的某个方法使用了 synchronized关键字,而子类中也覆盖了这个方法,默认情况下子类中的这个方法并不是同步的,必须显式的在子类的这个方法中加上 synchronized关键字才可以

当然,也可以在子类中调用父类中相应的方法,这样虽然子类中的方法并不是同步的,但子类调用了父类中的同步方法,也就相当子类方法也同步了

二、

Java一律采用Unicode编码方式,每个字符无论中文还是英文字符都占用2个字节

Java虚拟机中通常使用UTF-16的方式保存一个字符

将一个线程标记成daemon线程,意味着当主线程结束,并且没有其它正在运行的非daemon线程时,该daemon线程也会自动结束。

ASP中Session对象默认有效期为20分钟

JSP中Session对象默认有效期为30分钟

(1):“在Java里面参数传递都是按值传递”这句话的意思是:按值传递是传递的值的拷贝,按引用传递其实传递的是引用的地址值,所以统称按值传递。

(2):在Java里面只有基本类型和按照下面这种定义方式的String是按值传递,其它的都是按引用传递。就是直接使用双引号定义字符串方式:String str = “Java私塾”;

 
初始化过程: 
1. 初始化父类中的静态成员变量和静态代码块 ; 
2. 初始化子类中的静态成员变量和静态代码块 ; 
3.初始化父类的普通成员变量和代码块,再执行父类的构造方法;
4.初始化子类的普通成员变量和代码块,再执行子类的构造方法; 
 
有四种方法可以实现会话跟踪技术:URL重写、隐藏表单域、Cookie、Session。
1).隐藏表单域:<input type="hidden">,非常适合步需要大量数据存储的会话应用。
2).URL 重写:URL 可以在后面附加参数,和服务器的请求一起发送,这些参数为名字/值对。
3).Cookie:一个 Cookie 是一个小的,已命名数据元素。服务器使用 SET-Cookie 头标将它作为 HTTP
响应的一部分传送到客户端,客户端被请求保存 Cookie 值,在对同一服务器的后续请求使用一个
Cookie 头标将之返回到服务器。与其它技术比较,Cookie 的一个优点是在浏览器会话结束后,甚至
在客户端计算机重启后它仍可以保留其值
4).Session:使用 setAttribute(String str,Object obj)方法将对象捆绑到一个会话
 
线程局部存储TLS(thread local storage)
   解决多线程中的对同一变量的访问冲突的一种技术
   TLS会为每一个线程维护一个和该线程绑定的变量的副本
   Java平台的java.lang.ThreadLocal是TLS技术的一种实现
 
Condition是在java 1.5中才出现的,它用来替代传统的Object的wait()、notify()实现线程间的协作,相比使用Object的wait()、notify(),使用Condition的await()、signal()这种方式实现线程间协作更加安全和高效。因此通常来说比较推荐使用Condition,在阻塞队列那一篇博文中就讲述到了,阻塞队列实际上是使用了Condition来模拟线程间协作。
  • Condition是个接口,基本的方法就是await()和signal()方法;
  • Condition依赖于Lock接口,生成一个Condition的基本代码是lock.newCondition()
  • 调用Condition的await()和signal()方法,都必须在lock保护之内,就是说必须在lock.lock()和lock.unlock之间才可以使用

Conditon中的await()对应Object的wait();

Condition中的signal()对应Object的notify();

Condition中的signalAll()对应Object的notifyAll()

改变对象和改变对象内部成员的差别:

 class SimInt{
     int value;
     public SimInt(int value){
         this.value=value;
     }
 }
 public class Main{
     public static void change1(SimInt si){
         si=new SimInt(3);//重新指向了新的对象,原对象不受影响
     }
     public static void change2(SimInt si){
         si.value=3;//通过引用操作对象内部成员,原对象被改变
     }
     public static void main(String args[]) {
     SimInt si1=new SimInt(1);
         System.out.println(si1.value);//输出1
         change1(si1);
         System.out.println(si1.value);//输出1
       change2(si1);
        System.out.println(si1.value);//输出3
     }
 }

接口:

当接口被类实现的时候,接口中的所有方法都必须被声明为public的。这是必须的,子类不能降低父类方法的可见性。
内部接口可以声明为private,但是接口中的方法仍然必须是public的,所以内部接口的解释不对
 
this和super
1)调用super()必须写在子类构造方法的第一行,否则编译不通过。每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。

2)super()和this()类似,区别是,super从子类中调用父类的构造方法,this()在同一类内调用其它方法。

3)super()和this()均需放在构造方法内第一行。

4)尽管可以用this调用一个构造器,但却不能调用两个。

5)this和super不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。

6)this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。

7)从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字。
可以将this理解为对象,而类方法属于类,不属于对象,所以类方法前不能加this指针。
 
servlet在多线程下其本身并不是线程安全的。
如果在类中定义成员变量,而在service中根据不同的线程对该成员变量进行更改,那么在并发的时候就会引起错误。最好是在方法中,定义局部变量,而不是类变量或者对象的成员变量。由于
方法中的局部变量是在栈中,彼此各自都拥有独立的运行空间而不会互相干扰,因此才做到线程安全。
 
 内部类:
 public class Enclosingone {
     //非静态内部类
     public class InsideOne {}
     //静态内部类
     public static class InsideTwo{}
 }

 class Mytest02{
     public static void main(String args []){
         Enclosingone.InsideOne obj1 = new Enclosingone().new InsideOne();//非静态内部类对象
         Enclosingone.InsideTwo obj2 = new Enclosingone.InsideTwo();//静态内部类对象
     }
 }

"".equals(str)与str.equals("")的区别

"".equals(str)可以避免程序报空指针

iterator.remove()和list.remove()

如果你想在循环语句中删除集合中的某个元素,就要用迭代器iterator的remove()方法,因为它的remove()方法不仅会删除元素,还会维护一个标志,用来记录目前是不是可删除状态,

例如,你不能连续两次调用它的remove()方法,调用之前至少有一次next()方法的调用。

Object中的clone( )方法

浅复制:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。

深复制:当一个类的拷贝构造方法,不仅要复制对象的所有非引用成员变量值,还要为引用类型的成员变量创建新的实例,并且初始化为形式参数实

例值。

浅拷贝只复制一个对象,传递引用,而不复制它所引用的对象。

而深复制把要复制的对象所引用的对象都复制了一遍。

深复制步骤:

1、父类、子类实现Cloneable 接口

2、子类重写clone( )方法

  // 改为深复制:
  Student2 student = (Student2) super.clone();
  // 本来是浅复制,现在将Teacher对象复制一份并重新set进来
  student.setTeacher((Teacher) student.getTeacher().clone()); 

3、复制对象是不使用new

Student2 student2 = (Student2) student1.clone();

利用序列化实现深复制

1、父类、子类实现Serializable 接口

2、子类写deepClone( )方法

 public Object deepClone() throws Exception
     {
         // 序列化
         ByteArrayOutputStream bos = new ByteArrayOutputStream();
         ObjectOutputStream oos = new ObjectOutputStream(bos);  

         oos.writeObject(this);  

         // 反序列化
         ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
         ObjectInputStream ois = new ObjectInputStream(bis);  

         return ois.readObject();
     }  

垃圾回收算法,为什么要分代处理?

不同的对象的生命周期是不一样的。因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率。

GC停顿原因,如何降低停顿?

http://www.itdadao.com/2016/02/20/402713/

HotSpot有4个垃圾回收器, Serial、Parallel、CMS、G1

GC算法本身可以是串行的(单线程),也可以是并行的(多线程),在GC的世界中,并发和并行是两个完全不同的概念。并发针对的是GC周期,而

并行针对GC算法自身。

如何实现高效的同步链表
(代码)层次遍历二叉树,偶数层输出逆序输出(队列,用一个标记记录每一层的结束,统一输出当前层)

内网中有一张图片,如何防止被泄漏?

java细节,细的你想象不到的更多相关文章

  1. JAVA基础细谈

    JAVA基础细谈 一. 源文件和编译后的类文件     源文件的本质就是程序文件,是程序员编写,是人看的.而编译后的类文件是给电脑看的文件.一个类就是一个文件,无论这个类写在哪里,编译以后都是一个文件 ...

  2. java细节知识

    代码优化细节 (1)尽量指定类.方法的final修饰符 带有final修饰符的类是不可派生的.在Java核心API中,有许多应用final的例子,例如java.lang.String,整个类都是fin ...

  3. Java细节1--输入关闭

    import java.util.Scanner; public class Demo01 { public static void main(String[] args) { Scanner sc= ...

  4. Java细节

    native关键字用法 native是与C++联合开发的时候用的!java自己开发不用的! 使用native关键字说明这个方法是原生函数,也就是这个方法是用C/C++语言实现的,并且被编译成了DLL, ...

  5. Java细节整理——数组与内存控制

    重点:使用Java数组之前,必须对数组对象进行初始化. 当数组的所有元素都被分配了合适的内存空间,并指定了初始值时,数组的初始化完成.程序以后将不能重新改变数组对象在内存中的位置和大小. 知识点整理: ...

  6. java细节问题

    保留两位小数:1.234, 1.23, 1.2, 1.0, 1. package test; import java.math.BigDecimal; import java.text.Decimal ...

  7. Java细节----method和function的区别

    面向对象的语言叫方法 面向过程的语言叫函数 在java中没有函数这么一说,只有方法一说.属于概念上的区别. 硬要说区别. Method必须依赖于Object. Function 是独立的,不需要依赖于 ...

  8. 【java细节】Java代码忽略https证书:No subject alternative names present

    https://blog.csdn.net/audioo1/article/details/51746333

  9. java细节篇(==和equals的区别)

    1)当==两边是对象时(String,Integer...),两边比的都是地址2)当==两边是基本类型时(int,float),两边比的都是值3)默认equals比的是对象的地址,但是重写的话可以改变 ...

随机推荐

  1. Nginx反向代理使用【转载】

    最近工作中经常使用nginx,为了能够更好的使用nginx,我搜罗了很多nginx相关的技术文章来读,所以才有了下面以下内容.在此,为文中引用到和参考到的文章提供者表示感谢.如文中相关内容有错误,也欢 ...

  2. centos dmesg

    linux dmesg命令详解   功能说明:显示开机信息. 语 法:dmesg [-cn][-s ] 补充说明:kernel会将开机信息存储在ring buffer,若是开机时来不及查看信息,可利用 ...

  3. 解决MyEclipse吃内存以及卡死的方法 (转)

    前言:MyEclipse5.5 大小 139M:MyEclipse6.5 大小 451M:MyEclipse7.0 大小 649M!下载服务器又是国外的...下载速度累人也就罢了,只要你工作性能一流. ...

  4. angularJS 系列(六)---$emit(), $on(), $broadcast()的使用

    下面以一个例子来讲述 angular 中的event system,有$emit(), $on(), $broadcast().效果图如下 下面的代码中,用到了 controller AS 的语法,具 ...

  5. HDU 1213 How Many Tables 并查集 寻找不同集合的个数

    题目大意:有n个人 m行数据,每行数据给出两个数A B,代表A-B认识,如果A-B B-C认识则A-C认识,认识的人可以做一个桌子,问最少需要多少个桌子. 题目思路:利用并查集对相互认识的人进行集合的 ...

  6. centos 安装FTP server详情(转)

    centos 安装FTP server详情 分类: linux 2013-12-27 16:45 227人阅读 评论(0) 收藏 举报 我们这里以安装vsftpd 服务器端为例子: 1.进入到cent ...

  7. BroadcastReceiver的两种注册方式之------动态注册

    activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&qu ...

  8. linux系统下c程序分多文件实现

    对于一个整数数组排序,按从小到大排序,数组元素个数不定.要求多文件实现 1,排序的函数作为一个文件 输出结果作为一个程序 主函数作为一个文件 运行程序 gcc -o main main.c paixu ...

  9. Linux操作系统入门教程

    http://www.linuxidc.com/Linux/2015-07/120815p8.htm

  10. [Unity]C#.数据类型总结

    C#中的数据类型 [TOC] 通用类型系统 C#中,变量是值还是引用仅取决于数据类型 所有的数据类型都是对象.因为它们具有自己ide方法和属性 int int_value = 101; //调用*in ...