1、进程和线程的区别:
  进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1–n个线程。
  线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小。
  线程和进程一样分为五个阶段:创建、就绪、运行、阻塞、终止。
  多进程是指操作系统能同时运行多个任务(程序)。
  多线程是指在同一程序中有多个顺序流在执行。
两种实现线程的方式。大部分情况下选择实现Runnable接口的方式会优于继承Thread的方式,因为:

  • 从 Thread 类继承会强加类层次;
  • 有些类不能继承Thread类,如要作为线程运行的类已经是某一个类的子类了,但Java只支持单继承,所以不能再继承Thread类了

总的说,多线程就是一个人同时在做多件事情,比如同时呼吸和写文章,而多进程就是复制一个人来和你一起做事,两个人之间独立 不冲突
2、加上tools:layout=”@layout/fragment_blank” 可以预览包含fragment布局的页面
3、关于什么是依赖注入,在Stack Overflow上面有一个问题,如何向一个5岁的小孩解释依赖注入,其中得分最高的一个答案是:
“When you go and get things out of the refrigerator for yourself, you can cause problems. You might leave the door open, you might get something Mommy or Daddy doesn’t want you to have. You might even be looking for something we don’t even have or which has expired.
What you should be doing is stating a need, “I need something to drink with lunch,” and then we will make sure you have something when you sit down to eat.”

映射到面向对象程序开发中就是:高层类(5岁小孩)应该依赖底层基础设施(家长)来提供必要的服务。
4、DOM解析是一次性把xml文件放到内存中,一起解析,若xml文件过大时,会比较浪费时间。
SAX解析是一步步 分段解析的,根据标签节点一个个读取解析

5、android studio添加module方法:
a、将module文件复制到与app module同级目录 (或者左上角import module)
b、在主module的build.gradle中添加
dependencies {
compile project(‘:myLibrary’)
}
c、在settings.gradle中添加
include ‘:myLibrary ’
6、禁用win10自动更新,在系统服务下的windows update,禁用即可
7、尽量减少debug,少用debug,优秀的程序员总是花80%的时间来思考如何解决问题,20%的时间来动手完成代码,而糟糕的程序员总是用20%的时间去写代码,80%的时间去调试代码,动手之前尽量想好如何去做,并且已经为你自己的思路做了充分的实验。
8、

  • 图层的栅格化,主要是针对文字图层, 栅格化后的文字图层,就相当于像素化的图片,不可以修改文字的内容及字体。
    但可以享受图片的待遇,如应用滤镜的一些效果等等。
  • 智能对象可以达到无损处理的效果。这是它最大的好处,也是它的特点,就是智能对象能够对图层执行非破坏性编辑,也就是无损处理

9、任何一个类都是Class的实例对象,这个实例对象有三种表现方式
Class c1=Test.class;
Class c2=test1.getClass();
Class c3=Class.forName(“com.example.reflect.Test”);
10、类以代码形式保存在文件中(硬盘中),new一个类,则到内存中了,这就是类的实例化
11、文件后缀是.java 编译之后是.class
在cmd控制台 javac test.java 编译
java test 运行
12、Java中equals和==的区别
java中的数据类型,可分为两类:

  • 基本数据类型,也称原始数据类型。

byte,short,char,int,long,float,double,boolean
他们之间的比较,应用双等号(==),比较的是他们的值。

  • 复合数据类型(类)

当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。 JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地 址,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。

对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object的equals方法也是用双等号(==)进行比较的,所以比较后的结果跟双等号(==)的结果相同。
13、

抽象类不能被实例化(初学者很容易犯的错),如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。

抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。

抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。

构造方法,类方法(用static修饰的方法)不能声明为抽象方法。

抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。
14、Filter也称之为过滤器,它是Servlet技术中比较激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。
15、Java - SSH 框架应用实例
SSH(Spring + Struts + Hibernate)集成框架应用项目课,它是应用十分广泛的一种 Java Web 应用程序开发框架。

16、封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
要访问该类的代码和数据,必须通过严格的接口控制。
封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。

17、String 字符串常量 安全
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)
18、volatile修饰符
Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。一个volatile对象引用可能是null。

Synchronized修饰符
Synchronized关键字声明的方法同一时间只能被一个线程访问。Synchronized修饰符可以应用于四个访问修饰符。

Transient修饰符
序列化的对象包含被transient修饰的实例变量时,java虚拟机(JVM)跳过该特定的变量。
该修饰符包含在定义变量的语句中,用来预处理类和变量的数据类型。