1:
抽象类中的抽象方法默认不能加private,static,synchronized,native.private让方法私有化,和让子类继承相冲突。static,通过类名可以直接调用方法,可以抽象方法并没有方法体。synchronized,加在static后锁是该类,不加static锁是当前对象,当时抽象类不能实例化,也起冲突。native是让方法交给操作系统去实现,而abstract是将方法交给子类去实现,起冲突。
接口内的方法默认都是abstract.并且也不能使用protected修饰。protected范围只到该对象的子类,导致其他非子类不能实现接口,违背了接口的初衷。
2:
抽象类和接口的比较:
1.抽象类中可以有构造方法,接口中不可以有构造方法。
2.抽象类中可以有普通成员变量,接口不可以有普通成员变量。
3.抽象类中可以有非抽象的普通方法,接口中只能含有抽象方法。
4.抽象类中的方法可以用public,protected,修饰,接口中的方法只能用Public,默认是public abstract。
5.抽象类中可以有静态方法,接口中没有静态方法。
6.抽象类中定义的静态成员变量可以随意设置访问值,接口中设置的变量只能是public static final并且默认是public static final.
3:
jsp中使用pageContext中可以访问page,reques,session,Application范围的变量。
4:
成员方法又叫实例方法。
静态方法又叫类方法。
静态(类)方法无this指针。
5:
.xml : 可扩展文本标记语言,一种文本格式,常用来做配置文件。
6:
成员内部类的访问权限和成员变量一样有4种。
7:
单线程情况下使用HashMap加强效率,多线程情况下保证安全使用HashTable,使用synchronized确保安全,synchronized关键字是让线程独享整张表安全的同时也造成了资源的浪。CurrentHashMap使用的是分段枷锁的方式,1.7使用的是segment关键字,1.8用来synchronized和cas(比较交换,乐观锁)保证并发安全。
8:
Arrays.asList()返回的是Arrays的静态内部类。是List类型的ArrayList对象。
9:AOP和OOP
AOP,面向切面编程,注重于不同模块间相同行为的抽象,往往是和系统要实现的功能无关,但又在实现主要功能时不可缺少,将其于主要功能分割开,实现了解耦,减低了模块间的耦合度。
OOP,面向对象编程,注重于对象的抽象,更加偏重某些共同对象的共同行为的抽象。
10:
类与类之间继承,类与接口之间可以实现,接口与接口之间可以多继承。
类为什么不可以多多继承?
比如class A同时继承classB 和 class C , B和C同时拥有一个D方法,那么这时就会产生一个矛盾,A继承的D方法,会属于谁。接口则没有这个限制。
11:
在循环语句中删除集合的某个元素,使用迭代器的remove方法,可以不带参数直接删除,如果用来for方法可能会导致删除不干净的事情!
12:
start(),启动线程!run()调用方法。
countDownLatch:让一组线程等待其他线程执行完毕再执行
CyclicBarrier :让一组线程等待某种状态再执行。
Callable中的call()能抛出异常和有返回值
start(),让线程进入了可运行状态(Runnable),等待cpu使用权
13:
能被java.exe运行的class文件必须要有main方法,否则会报错。
J2SDK在Java5之后改名成Java SE DK,是Java编译开发的工具,包含编译功能和运行环境,包含jdk和jre。
Java API 是应用程序编程接口。
appletviewer(小程序浏览器),一种执行HTML文件的Java小程序类的Java浏览器,没有main()函数的继承applet类的java类。
14:
package 加包,把文件放到包下。
import:导包,使其可用。
15:
多行注释可以嵌套单行注释。
多行注释不能嵌套多行注释。
16:
ANSI,用七位bit位,用从 0x00 ~ 0x7f,表示一位1字节的英文字符,是标准的ASCII码,用八位,从0x80 ~ 0xFFFF表示扩展ASCII码,
17:
Boolean flag = flase;
if(flag=true) //代表的意思是 if((flag=true)==true)
18:
^异或 相同是零,不同是1
例如 14 ^ 3 == 1110 ^ 0011 == 1101 ==13
19:
原码到补码:符号位不变,取反加1.
20:
1.8版本后接口中的方法通过static 或者default 可以在方法中写方法体。
21:
interface前面没有final !!!里面的final是默认添加在接口类的变量前面的!!!
final修饰的方法可以被重载不能被重写。
22:
i++:先计算,再自增。
++i:先自增,再运算。
23:
java对象初始化顺序:
1.父类静态代码块,和父类静态成员(同级,按顺序执行)
2.子类静态代码块,和子类静态成员(同级,按顺序执行)
3.父类普通代码块,和父类普通成员(同级,按顺序执行)
4.父类构造方法
5.子类普通代码块,和子类普通成员(同级,按顺序执行)
6.子类构造方法
静态只在类加载时调用一次!
24:
只有在没有申明任何构造函数的情况下,系统才会给我们提供一个默认的构造函数。
25:
String.valueOf(参数),返回String
26:
Web servies(WSDL,可描述网络服务),通信机制是使用XML数据交换,采用了SOAP协议(简单对象协议)。xml是重量级和json相比。
27:
对于java命令来说,java后面加的是类名和参数,类名和多个参数用空格隔开。
例如:java MyTest a b c;
运行MyTest类并传入a,b,c三个参数。
28:
linux中tar命令用法:
把常用的tar解压命令总结下,当作备忘:
tar
-c: 建立压缩档案
-x:解压
-t:查看内容
-r:向压缩归档文件末尾追加文件
-u:更新原压缩包中的文件
这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。
-z:有gzip属性的
-j:有bz2属性的
-Z:有compress属性的
-v:显示所有过程
-O:将文件解开到标准输出
下面的参数-f是必须的
-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。
这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包,-f指定包的文件名。
这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。
这条命令是更新原来tar包all.tar中logo.gif文件,-u是表示更新文件的意思。
这条命令是列出all.tar包中所有文件,-t是列出文件的意思
这条命令是解出all.tar包中所有文件,-x是解开的意思
压缩
tar –cvf jpg.tar *.jpg 将目录里所有jpg文件打包成tar.jpg
tar –czf jpg.tar.gz *.jpg 将目录里所有jpg文件打包成jpg.tar后,并且将其用gzip压缩,生成一个gzip压缩过的包,命名为jpg.tar.gz
tar –cjf jpg.tar.bz2 *.jpg 将目录里所有jpg文件打包成jpg.tar后,并且将其用bzip2压缩,生成一个bzip2压缩过的包,命名为jpg.tar.bz2
tar –cZf jpg.tar.Z *.jpg 将目录里所有jpg文件打包成jpg.tar后,并且将其用compress压缩,生成一个umcompress压缩过的包,命名为jpg.tar.Z
rar a jpg.rar *.jpg rar格式的压缩,需要先下载rar for linux
zip jpg.zip *.jpg zip格式的压缩,需要先下载zip for linux
解压
tar –xvf file.tar 解压 tar包
tar -xzvf file.tar.gz 解压tar.gz
tar -xjvf file.tar.bz2 解压 tar.bz2
tar –xZvf file.tar.Z 解压tar.Z
unrar e file.rar 解压rar
unzip file.zip 解压zip
总结
*.tar 用 tar –xvf 解压
*.gz 用 gzip -d或者gunzip 解压
.tar.gz和.tgz 用 tar –xzf 解压
*.bz2 用 bzip2 -d或者用bunzip2 解压
*.tar.bz2用tar –xjf 解压
*.Z 用 uncompress 解压
*.tar.Z 用tar –xZf 解压
*.rar 用 unrar e解压
*.zip 用 unzip 解压
linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的。生成tar包后,就可以用其它的程序来进行压缩。
1.命令格式:
tar[必要参数][选择参数][文件]
2.命令功能:
用来压缩和解压文件。tar本身不具有压缩功能。他是调用压缩功能实现的
3.命令参数:
必要参数有如下:
-A 新增压缩文件到已存在的压缩
-B 设置区块大小
-c 建立新的压缩文件
-d 记录文件的差别
-r 添加文件到已经压缩的文件
-u 添加改变了和现有的文件到已经存在的压缩文件
-x 从压缩的文件中提取文件
-t 显示压缩文件的内容
-z 支持gzip解压文件
-j 支持bzip2解压文件
-Z 支持compress解压文件
-v 显示操作过程
-l 文件系统边界设置
-k 保留原有文件不覆盖
-m 保留文件不被覆盖
-W 确认压缩文件的正确性
可选参数如下:
-b 设置区块数目
-C 切换到指定目录
-f 指定压缩文件
–help 显示帮助信息
–version 显示版本信息
4.常见解压/压缩命令
tar
解包:tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
(注:tar是打包,不是压缩!)
.gz
解压1:gunzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName
.tar.gz 和 .tgz
解压:tar zxvf FileName.tar.gz
压缩:tar zcvf FileName.tar.gz DirName
.bz2
解压1:bzip2 -d FileName.bz2
解压2:bunzip2 FileName.bz2
压缩: bzip2 -z FileName
.tar.bz2
解压:tar jxvf FileName.tar.bz2
压缩:tar jcvf FileName.tar.bz2 DirName
.bz
解压1:bzip2 -d FileName.bz
解压2:bunzip2 FileName.bz
压缩:未知
.tar.bz
解压:tar jxvf FileName.tar.bz
压缩:未知
.Z
解压:uncompress FileName.Z
压缩:compress FileName
.tar.Z
解压:tar Zxvf FileName.tar.Z
压缩:tar Zcvf FileName.tar.Z DirName
.zip
解压:unzip FileName.zip
压缩:zip FileName.zip DirName
.rar
解压:rar x FileName.rar
压缩:rar a FileName.rar DirName
5.使用实例
实例1:将文件全部打包成tar包
命令:
tar -cvf log.tar log2012.log
tar -zcvf log.tar.gz log2012.log
tar -jcvf log.tar.bz2 log2012.log
(摘录于 https://www.nowcoder.com/test/question/done?tid=35726345&qid=516405#summary 中 寻觅201904140716355 的回
29:
子类只会隐式调用父类无参构造方法,不会管是否有带参构造方法。
30:
jvm:
1.通过ClassLoader寻找和装载class文件。
2.为编译字节码文件并提供运行环境。
3.在运行时可以进行垃圾回收操作。
4.提供和硬件交互的平台。
31:
JDK用于并发编程的同步器有哪些:
Semaphore : 可以通过信号许可,控制同时进行的个数,如果个数为1,那其他线程就需要等待别的线程给出许可。
CyclicBarrier(循环栅栏,也可能不是这个叫法):控制的线程需要一组都到达屏障之后才会一起执行。
CountDownLatch:有一个倒计时数,等到归0阻塞的进程才会归0.