这里面的内容主要是我看到的一些java专项考点,或者自己比较懵逼的点吧。
会持续更新。
主要也是为了方便复习。
Java基础整理:
1.static 修饰的静态成员和静态方法,可直接通过类名调用(类名.静态成员/方法),其他成员和方法要先实例化成对象,通过对象调用。
对于静态字段,只有直接定义这个字段的类才会被初始化。
2.jre判断程序是否执行结束的标准时:所有的前台线程都执行完毕。
3.方法重写:(继承关系中)方法名同,参数类型同。
子类方法返回类型 ≤ 父类方法返回类型
子类方法抛出异常 ≤ 父类方法抛出异常
子类方法访问权限 ≤ 父类方法访问权限
方法重载:(在同一个类的不同方法中)方法名相同,方法参数类型/顺序不同,但和返回值类型无关
4.赋值语句判断:
long test=012; float=-412; (都对,但最好加上l,f)
double d=0x12345678
错:
int other=(int)true (boolean不能和任何类型进行转化,会报类型异常错误)
byte b=128; (byte的取值范围-128~127)
例题:下面可以正确表示八进制的8:010
解释:八进制就是0-7!!!
5.
6. ArrayList和Vector有什么区别?
ArrayList是非线程安全的,Vector是线程安全的;
HashMap和HashTable有什么区别?
HashMap是非线程安全的,HashTable是线程安全的;
StringBuilder和StringBuffer有什么区别?
两者都适用于大量数据。StringBuilder是非线程安全的,StringBuffer是线程安全的
String适合少量字符串,线程安全的,不可变字符串。
理解如下:JAVA中的线程安全与非线程安全 - CSDN博客
7、异常分为运行时异常,非运行时异常和error。
其中error是系统异常,只能重启系统解决。非运行时异常需要我们自己补获,
而运行异常是程序运行时由虚拟机帮助我们补获,运行时异常包括数组的溢出,内存的溢出空指针,分母为0等!
8、
解析如下:
9、
10、
11、
TCP:客户端:Socket(通过创建)
服务器端:Socket(通过accpet获得一个对象)、ServerSocket(创建获得对象)
UDP:客户端:DatagramSocket、DatagramPacket
服务器:DatagramSocket、DatagramPacket
12、
==:基本类型比较值,引用类型比较地址,不同类型返回false
equals:基本类型false,引用类型比较值,不同类型返回false
13、
14、抽象类和接口都可以定义静态成员变量,只是接口的静态成员变量要用static final public 来修饰
15、Java的跨平台特性是因为JVM的存在, 不同的系统平台JVM不同,但都可以实现标准的.class字节码文件。而不是因为.java源代码可以跨平台。
16、关于垃圾回收:
17、面向对象的五大基本原则:
单一职责原则(SRP)
开放封闭原则(OCP)
里氏替换原则(LSP)
依赖倒置原则(DIP)
接口隔离原则(ISP)
18、Io流的分类
按照流的流向分,可以分为输入流和输出流。
输入流: 只能从中读取数据,而不能向其写入数据。java.in
输出流:只能向其写入数据,而不能向其读取数据。java.out
19、
20、类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7个阶段。其中准备、验证、解析3个部分统称为连接(Linking)。
(1)通常的类加载过程有:生成java.lang.Class对象、执行static块代码、类方法解析。
(2)验证:分为四个阶段:文件格式验证、元数据验证、字节码验证、符号引用验证
21、
22、
23、实现多线程:
继承Thread、实现Callable接口、实现Runnable接口、线程池
24、 java中true ,false , null在java中不是关键字,也不是保留字,它们只是显式常量值,但是你在程序中不能使用它们作为标识符。
其中const和goto是java的保留字。java中所有的关键字都是小写的,还有要注意true,false,null, friendly,sizeof不是java的关键字,但是你不能把它们作为java标识符用。
26、java规范中包名一般是小写的,类名一般是大写的
“System.out.println()”:System是java.lang包下的一个类,out为System的final静态成员(PrintStream类型),println()是PrintStream类的实例方法。
System是java.lang中的类,out为System中的一个静态成员,out是java.io.PrintStream类的对象,而println()是java.io.PrintStream类的方法,所有可以调用类.静态方法.println()方法。
27、
28、List有序可重复,map无序不可重复,Set无序不可重复
结果输出:3 2
28、
输出:null
此时才到第四步,而父类的方法被子类重写了,父类初始化调用的方法变成了子类实现的方法,而父类的属性不是静态的,没有实现,此时调用到第四部父类构造方法,属性为空,所以输出null。
29、
30、
对象存储在堆内存,引用变量存储在栈内存。栈内存指向堆内存。
31、
32、类中声明的变量的默认初始值:
注意:类变量在不设置初始值时,会进行默认值赋值,而局部方法中声明的变量则必须进行初始化,他不会进行默认值赋值。
在基本 JAVA 类型中,如果不明确指定,整数型的默认是 int,带小数的默认是 double 类型。
33、
34、s和t的地址相同,都指向”hello“,因为t没有重新new的,所以地址不变
35、
36、线程状态图:注意阻塞之后是就绪态,而不是运行态
37、
基类是抽象类,子类继承父类,但是没有实现基类的抽象方法,那么子类也是抽象类。抽象类不能创建对象,所以在主函数中创建对象编译不会通过。
38、关于socket:
39、
40、
中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口,但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递。通过中间件,应用程序可以工作于多平台或OS环境。
(简单来说,中间件并不能提高内核的效率,一般只是负责网络信息的分发处理)
中间件位于操作系统之上,应用软件之下,而不是操作系统内核中
41、对于try-catch-finally语句,finally语句一定会执行,如果finally块中有return语句的话,它将覆盖掉函数中其他return语句。
catch语句执行完finally执行,返回但不会再往下执行finally之后的了。
42、
根据字节长度:
43、一个文件中的字符要写到另一个文件中,首先需要读取这个文件,所以要先建立输入流,然后写到另一个文件,这时再建立输出流。所以要先建立输入流,再建立输出流。
44、关系代数中,五种基本运算:并、差、选择、投影、乘积(没有交!!)
45、OSI是开放式系统互连,由ISO制定,按功能可分为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层共七层
46、
47、
48、ArrayList和LinkedList都实现List接口。
ArrayList底层是数组,所以查询快,增删慢;而LinkedList底层是链表,查询慢,增删快
49、switch语句种的类型:String(java7之后)、int(Intger,byte,short,char)、枚举
50、注意wait之后是返回“就绪”状态,而不是返回“运行”状态
sleep和wait的对比:
1、都是暂停线程
2、sleep()是Thread类,wait()是Object()类
3、sleep()不会释放对象锁,wait()会释放对象锁
4、sleep()会捕获异常,wait,notify,notifyall不会捕获异常
5、sleep()可以在任何地方使用,wait()只能在同步快/方法中使用。
51、
51、
52、
53、
54、加载驱动程序的方法:
1.Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
2. DriverManager.registerDriver(new com.mysql.jdbc.Driver());
3.System.setProperty("jdbc.drivers", "com.mysql.jdbc.Driver");
4.通过registerDriver方法注册
55、多个线程可同时操作一个数据,为了保证该数据的准确性,可将操作该数据的部分改为同步
56、字符用单引号,字符串用双引号,与引号中的内容无关
57、
58、只有run()是线程执行的方法。
run()方法用来执行线程体中具体的内容
start()方法用来启动线程对象,使其进入就绪状态
sleep()方法用来使线程进入睡眠状态
suspend()方法用来使线程挂起,要通过resume()方法使其重新启动
59、StringBuffer类的对象调用toString()方法将转换为String类型 这个正确
两个类都有append()方法String类没有append方法
两个类的实例的值都能够被改变。StringBuffer类可以直接改变它的内容,不用重新分配地址; String 对象/ 实例 是不可以被改变的。
String:是对象不是原始类型,为不可变对象,一旦被创建,就不能修改它的值.
对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.
String 是final类,即不能被继承.
StringBuffer:是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象
它只能通过构造函数来建立:StringBuffer sb = new StringBuffer();
!!!:不能通过赋值符号对他进行付值:sb = "welcome to here!";//error
对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer中赋值的时候可以通过它的append方法:sb.append("hello");
字符串连接操作中StringBuffer的效率要比String高:
String str = new String("welcome to ");
str += "here"; 的处理步骤实际上是通过建立一个StringBuffer,然后调用append(),最后再将StringBuffer toSting()(toString方法:StringBuffer类型转化成String类型);
60、
61、线程运行速度与线程的优先级无关。
高优先级只能说明该线程具有优先执行的权利,与执行速度无关。
62、JDK8中,接口中的方法可以被default和static修饰,但是!!!被修饰的方法必须有方法体
63、
同步是害怕在操作过程的时候被其他线程也进行读取操作,一旦是原子性的操作就不会发生这种情况。
前三个都至少需要先读取,再操作,非原子操作。而D的话,直接赋值,原子性操作。
65、在java 中,声明一个数组时,不能直接限定数组长度,只有在创建实例化对象时,才能对给定数组长度.。
如下,1,2,3可以通过编译,4,5不行。而String是Object的子类,所以上述BCF均可定义一个存放50个String类型对象的数组。
1. String a[]=new String[50];
2. String b[];
3. char c[];
4. String d[50];
5. char e[50];
66、Servlet的生命周期分为5个阶段:加载、创建、初始化、处理客户请求、卸载。
(1)加载:容器通过类加载器使用servlet类对应的文件加载servlet
(2)创建:通过调用servlet构造函数创建一个servlet对象
(3)初始化:调用init方法初始化
(4)处理客户请求:每当有一个客户请求,容器会创建一个线程来处理客户请求
Service()方法来响应客户端请求(Service方法会根据请求的method属性来调用doGet()和doPost())
(5)卸载:调用destroy方法让servlet自己释放其占用的资源
67、servlet的创建是在init()方法以前,是由servlet容器实现的。
doPost()和doGet()方法是在httpServlet中执行的
servlet在多线程下其本身并不是线程安全的。
如果在类中定义成员变量,而在service中根据不同的线程对该成员变量进行更改,那么在并发的时候就会引起错误。最好是在方法中,定义局部变量,而不是类变量或者对象的成员变量。由于方法中的局部变量是在栈中,彼此各自都拥有独立的运行空间而不会互相干扰,因此才做到线程安全。
68、AWT不支持事件类型,Swing支持事件模型
69、
72、抽象类和接口不能被实例化。抽象类可以继承抽象类,接口也可以继承接口
73、transient变量为我们提供了便利,你只需要实现Serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中,而其他属性会自动序列化。
74
75、ServerSocket有个server所以是服务器端的
76、
77、线程同步:喂,SHE
喂(Vector) S(Stack) H(hashtable) E(enumeration)
线程安全,所以是同步的。
78、
不同基本数据类型转化与运算byte-short-int-long-float-double
80、
81、关于ASCII码:0 ==> 48、9==>57、A==>65、Z==>90、a==>97、z==>122
82、移位运算(带符号则符号位不变,无符号则补0)
>> 带符号右移,>>>无符号右移
<<带符号左移,<<<无符号左移
5的二进制是0101。 x=5>>2(>>带符号右移) 将0101右移2位,为:0001。
y=x>>>2 (>>>无符号右移,左边空缺补充为0)将0001右移2位,补0。结果为:0000。
所以得出答案0
83、list有序,可重复;set无序,不可重复。
所以set中最多只能有一个空,而List中可有多个(可重复)。
84、Byte a=127; a++;则a等于-128
85、内部类可以是静态static的,也可用public,default,protected和private修饰,
外部类的修饰符只能是public,abstract,final,内部类不能用static修饰
86、
解析如下:
87、Java标识符由 数字、字母、下划线(_)、美元符号($) 组成, 首位不能是数字 。并且 Java关键字不能作为标识符 。
88、在一个n阶的B-树上,每个树根结点中所含的关键字数目最多允许为( n-1)个,最少允许为n/2-1 向上取整。
89、运算符优先级:
92、JDBC运用了桥接模式
【桥接模式:将抽象部分与实现部分分离,使其可以独立变化。
JDBC提供了统一的接口,每个数据库提供各自的实现,用数据库驱动来桥接就行。】
93、
94、java8种基本数据类型(32位系统):int、short、long、double、float、byte、boolean 。其他的都是引用类型,包括String!包括数组和枚举!
按数据类型:第一类:整数类型 byte short int long;第二类:浮点型 float double;第三类:逻辑型 boolean(它只有两个值可取true false);第四类:字符型 char
按数据大小:byte(1字节,8位)、short(2字节,16位)、int(4字节,32位)、long(8字节,64位)、char(2字节,16位)、float(4字节,32位)、double(8字节、64位)、boolean(false/true,理论上占用1bit,1/8字节,实际处理按1byte处理)
1 byte(字节)=8bit(位)
java中用补码形式表示
解释:1.short类型,a的二进制是:0000 0000 1000 0000;
2.强制转换的截后8位,正数用源码表示,负数用补码表示,第一位是符号。
3.因此,a截取后8位的二进制是:1000 0000,第一位是1,表示是一个负数,且负数的补码为1000 0000,(负数补码=反码+1),所以反码等于0111 1111,原码等于0000 0000=128,所以是-128
最高位为符号位:正数为0,负数为1。剩下的n-1位表示该数的绝对值。正数原码、反码、补码一致。负数的反码等于原码除符号位取反,补码等于反码加一。
95、一个以“.java”为后缀的源文件,只能有一个与文件名相同的public类,可以包含其他非public类(不考虑内部类)
96、管道:半双工的通信方式。一个管道可以实现双向的数据传输,而同一个时刻只能最多有一个方向的传输,不能两个方向同时进行。所以不能用于在一个基于分布式的游戏服务器系统中,不同的服务器之间。
98、Hibernate鼓励使用双向一对多关联,不使用单向一对多关联。
99、用法:condition 1 | condition 2、condition 1 || condition 2
"|"是按位或:先判断条件1,不管条件1是否可以决定结果,都会执行条件2
"||"是逻辑或:先判断条件1,如果条件1可以决定结果(即条件1为true),那么就不会执行条件2
同理,"&"是按位与:先判断条件1,不管条件1是否可以决定结果,都会执行条件2;
“&&”是逻辑或:先判断条件1,如果条件1可以决定结果(即条件1为false),就不会执行条件2
100、SimpleDateFormat是线程不安全的
101、
102、InputStream(字节输入流)和Reader(字符输入流)通俗的理解都是读(read)的。
OutputStream(字节输出流)和Writer(字符输出流)通俗的理解都是写(writer)的。
113、在接口中定义的方法除了default和static关键字修饰的方法拥有方法体,其他方法都应是没有方法体的抽象方法 public abstract getxxx();
声明抽象方法不可写出大括号;接口中声明的'变量'必须为public final static,所以为常量.
114、++y 是先加再运行 ;y++ 是先运算再加
116、
注意x是Byte类型,也就是byte的包装类型,属于引用类型。实例该类对象时,如果成员变量没有显示初始化那么Java默认初始化为null.
该题中引用类型t作为形参进行传递,形参的改变会改变实参的值,所以再次打印t.x时已经变为42了。
117、静态方法不能被重写
118、在同一个java原文件中,可以有多个class类,但是只有有一个公共的 public class
119、application对象是共享的,多个用户共享一个,以此实现数据共享和通信
JSP内置对象和属性列举如下:
1.request对象 :客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。
2.response对象 :response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。它是HttpServletResponse类的实例。
3.session对象 :session对象指的是客户端与服务器的一次会话,不是多次会话,从客户连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止。它是HttpSession类的实例.
4.out对象 :out对象是JspWriter类的实例,是向客户端输出内容常用的对象
5.page对象 :page对象就是指向当前JSP页面本身,有点象类中的this指针,它是java.lang.Object类的实例
6.application对象:application对象实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭,在此期间,此对象将一直存在;这样在用户的前后连接或不同用户之间的连接中,可以对此对象的同一属性进行操作;在任何地方对此对象属性的操作,都将影响到其他用户对此的访问。服务器的启动和关闭决定了application对象的生命。它是ServletContext类的实例。
7.exception对象 :exception对象是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。他实际上是java.lang.Throwable的对象
8.pageContext对象 :pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的SESSION,也可以取本页面所在的application的某一属性值,他相当于页面中所有功能的集大成者,它的本 类名也叫pageContext。
9.config对象 :config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象)
120、关于final的重要知识点;
(1)final关键字可以用于成员变量、本地变量、方法以及类。
(2)final成员变量必须在声明的时候初始化或者在构造器中初始化,否则就会报编译错误。
(3) 你不能够对final变量再次赋值。
(4) 本地变量必须在声明时赋值。
(5)在匿名类中所有变量都必须是final变量。
(6)final方法不能被重写、不能被继承,计算时不会进行类型转换。
(7)没有在声明时初始化final变量的称为空白final变量(blank final variable),它们必须在构造器中初始化,或者调用this()初始化。不这么做的话,编译器会报错“final变量(变量名)需要进行初始化”。
(8)final修饰的成员变量在赋值时可以有三种方式。1、在声明时直接赋值。2、在构造器中赋值。3、在初始代码块中进行赋值。
121、使用+-*/操作时,
转化规则:char/bytr/short-->int-->long-->float-->double
2个为byte、int、short、char,则2个都转int,结果为int
语句 1 :(b1 + b2) 被转换为int类型 但是 b3仍为 byte ,所以出错 要么将b3转化为int 要么将(b1 + b2) 强制转换为byte类型。所以语句1错误。
语句 2:b4 、b5被声明final 所以类型是不会转换, 计算结果任然是byte ,所以 语句2正确。
语句 3:(b1 + b4) 结果仍然转换成int 所以语句 3 错误。
语句 4 : (b2 + b5) 结果仍然转换为int , 所以语句4错误。
122、Java标识符命名规范是:
1)只能包含字母a-zA-Z,数字0-9,下划线_和美元符号$;字母、数字、_、$
2)首字母不能为数字;不能包含空格;不包含*
3)关键字和保留字不能作为标识符。
null是关键字,NULL不是关键字,java区分大小写。这题答案D是对的,但C是错的,for是关键字。注意true,false,null, friendly,sizeof不是java的关键字,但是你不能把它们作为java标识符用。
123、static:
1.静态内部类才可以声明静态方法
2.静态方法不可以使用非静态变量
3.抽象方法不可以有函数体
4.非静态成员函数中可以调用静态成员,即静态成员可被该类任何方法访问;但静态成员函数无法调用非静态成员
5、可以被重载
124、接口中的属性默认:public static final修饰; 接口中的方法默认:public abstract修饰
125、(1)类方法:就是静态方法,在类方法中不能引用对象变量,不能使用super、this关键字,也不能调用类中的对象方法。
被static修饰的变量称为静态变量,静态变量属于整个类,而局部变量属于方法,只在该方法内有效,所以static不能修饰局部变量,在main方法中也不可以!静态方法可以重载。
(2)实例方法:除了类方法外的其他方法。实例方法可以引用对象变量(这是显然的),也可以引用类变量。可以使用super、this关键字。 实例方法中可以调用本类其他方法。不可以调用超类或者其他类的方法。
126、JVM会试图为相关Java对象在Eden中初始化一块内存区域;
当Eden空间足够时,内存申请结束。否则到下一步;
JVM试图释放在Eden中所有不活跃的对象(minor collection),释放后若Eden空间仍然不足以放入新对象,则试图将部分Eden中活跃对象放入Survivor区;
Survivor区被用来作为Eden及old的中间交换区域,当OLD区空间足够时,Survivor区的对象会被移到Old区,否则会被保留在Survivor区;
当old区空间不够时,JVM会在old区进行major collection;
完全垃圾收集后,若Survivor及old区仍然无法存放从Eden复制过来的部分对象,导致JVM无法在Eden区为新对象创建内存区域,则出现"Out of memory错误"
127、Object instanceof Integer 是返回true的
128、两种常见锁:都适用于“读多写少”的操作
CopyOnWriteArrayList适合使用在读操作远远大于写操作的场景里,比如缓存。
ReadWriteLock 当写操作时,其他线程无法读取或写入数据,而当读操作时,其它线程无法写入数据,但却可以读取数据 。适用于 读取远远大于写入的操作。
129、volatile只能保证变量的安全,不能保证线程的安全,可见性,不保证原子性
130、一般关系数据模型和对象数据模型之间有以下对应关系:表对应类,记录对应对象,表的字段对应类的属性。
131、数据库事务隔离级别:
在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别;
读未提交(read uncommitted);读提交(read committed);可重复读取(repeatable read);序列化(serializable).(等级从低到高)
132、JAVA的赋值运算是有返回值的,赋了什么值,就返回什么值
133、getParameter()是获取POST/GET传递的参数值;
getInitParameter获取Tomcat的server.xml中设置Context的初始化参数
getAttribute()是获取对象容器中的数据值;
getRequestDispatcher是请求转发
134、抽象类和接口不能实例化
使用transient修饰的变量不会被序列化
final修饰的方法,可继承,但不可覆盖
javascript不是java的
公式-n=~n+1可推出~n=-n-1,
135、
136、方法重载:一个类定义多个同名的方法,但每个方法具有不同的参数的类型或参数的个数。
方法的参数列表必须不同,包括参数的类型或个数,以此区分不同的方法体。
1.如果参数个数不同,就不管它的参数类型了!
2.如果参数个数相同,那么参数的类型或者参数的顺序必须不同。
3.方法的返回类型、修饰符可以相同,也可不同。返回类型和修饰符不重要。
137、
138、关键字列表 (依字母排序 共50组):
abstract, assert, boolean, break, byte, case, catch, char, class,const(保留关键字), continue, default, do, double, else, enum, extends, final, finally, float, for,goto(保留关键字), if, implements, import, instanceof, int, interface, long, native, new, package, private, protected, public, return, short, static, strictfp, super, switch, synchronized, this, throw, throws, transient, try, void, volatile, while
保留字列表 (依字母排序 共14组),Java保留字是指现有Java版本尚未使用,但以后版本可能会作为关键字使用:
byValue, cast,false, future, generic, inner, operator, outer, rest,true, var,goto(保留关键字) ,const(保留关键字) ,null
139、关键字super:相当于调用父类对象
super.属性:调用父类非私有属性
super.方法():调用父类的非私有的、被重写的方法
super.():调用父类的非私有的含参的构造函数,但必须写在第一行。
this和super关键字可以出现在同一个构造函数中,this相当于调用本对象。
但 构造函数不能被子类继承,只能显式或者隐式地调用;可以进行重载,但是参数列表必须不相同,不以返回值和访问级别进行区分;没有返回值;一定要与定义为public的类同名。
140、
float a = 1;这里的1是整形,当赋值给一个float时,存在一个隐式转换,不损失精度。
但1.0默认是double型的,这里会损失精度,所以要写出float foo=1.0f;
141、IP数据报:重组发生在目的主机,分片发生在路由器上
142、多道程序设计是指在主存中同时存放多道用户作业,使它们都处于执行的开始点和开始点之间,这些程序共享计算机系统资源。
多道程序设计的主要优点有:
(1)提高CPU的利用率。(2)提高设备的利用率。(3)提高系统的吞吐量。
144、多个进程操作同一个文件时,应该要考虑到文件的一致性问题
可通过文件在不同进程间进行数据传递和共享。但不能利用全局变量来在线程中进行传递和共享,因为地址空间是相互独立的。全局变量也就只有在同一个进程内的线程之间可以共享。
145、TCP首部报文:SYN和ACK与建立连接有关
SYN: 表示建立连接
FIN: 表示关闭连接
ACK: 表示响应
PSH: 表示有 DATA数据传输
RST: 表示连接重置。
146、各类网络:网络号在前,主机号在后
A类:1~127(前8位网络号,后24位主机号)
B类:128~191(前16位网络号,后16位主机号)
C类:192~223(前24位网络号,后8位主机号)
147、深度优先:从某个顶点v出发,首先访问该顶点,然后依次从它的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和v有路径相通的顶点都被访问到。 若此时尚有其他顶点未被访问到,则另选一个未被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。
广度优先:又称为"宽度优先搜索"或"横向优先搜索",简称BFS。
从图中某顶点v出发,在访问了v之后依次访问v的各个未曾访问过的邻接点,然后分别从这些邻接点出发依次访问它们的邻接点,并使得“先被访问的顶点的邻接点先于后被访问的顶点的邻接点被访问,直至图中所有已被访问的顶点的邻接点都被访问到。如果此时图中尚有顶点未被访问,则需要另选一个未曾被访问过的顶点作为新的起始点,重复上述过程,直至图中所有顶点都被访问到为止。
注意!:1、同层的则按字母顺序优先;2、如果是从邻接图演变的,邻接图是有顺序的,按那个顺序。
148、求图的拓扑序列(只有有向图有):找出图中无前驱节点的节点,依次输出删去。一个图的拓扑序列可以有多种。
深度优先和拓扑序列可以判断出一个有向图是否有环。
149、随机数:(数据类型)(最小值+Math.random()*(最大值-最小值+1))
随机单词:
150、正常输入:十进制; 0x:十六进制; 0:八进制
151、多接口继承:public class A implements B, C
152、JDK中提供的java、javac、jar等开发工具也是用Java编写的。
153、内部类可以用static修饰,也可用public,protected,default和private修饰
外部类可以修饰符只能是public,abstract,final
154、子类将继承父类所有的数据域和方法。但可能只是拥有,而不能访问或者使用。
155、抽象类必须有构造方法,接口没有构造方法。抽象类不能被实例化。
final用于修饰属性的不可修改和方法的不可覆盖 注意不是不可继承!
156、
168、关于线程:
(1)synchronized:保证原子性和可见性;volatile:保证可见性
(2)ThreadLocal用于创建线程的本地变量,该变量是线程之间不共享的
169、结构模式中最体现扩展性:装饰模式
170、
解析:1.short类型,a的二进制是:0000 0000 1000 0000;
2.强制转换的截后8位,正数用源码表示,负数用补码表示,第一位是符号。
3.因此,a截取后8位的二进制是:1000 0000,第一位是1,表示是一个负数,二进制的值是128,所以结果是 -128。
171、取近似值:ceil:向上取整; floor:向下取整
round:原数加0.5再向下取整(eg. Math.round(11.5)=12, Math.round(-11.5)=-11)
172、
173、C++中,构造函数是构造对象时使用,析构函数是撤销对象时使用。
174、对于外部类来说,只有两种修饰,public和默认(default),因为外部类放在包中,只有两种可能,包可见和包不可见。final abstract
对于内部类来说,可以有所有的修饰,因为内部类放在外部类中,与成员变量的地位一致,所以有四种可能。(public、protected、default、private)
175、垃圾回收程序是一般是在堆上分配空间不够的时候会自己进行一次GC,程序员不需要也不能主动释放内存。
Java的内存释放由垃圾回收程序来进行释放,内存回收程序负责释放无用内存。在Java里,内存的释放由垃圾回收程序进行管理,程序员不能直接进行释放。程序员可以调用System.gc()运行垃圾回收器,但是不能指定时间。
176、简单的来说 java的堆内存分为两块:permantspace(持久代) 和 heap space。
1、持久代中主要存放用于存放静态类型数据,如 Java Class, Method 等, 与垃圾收集器要收集的Java对象关系不大。持久代溢出原因 动态加载了大量Java类而导致溢出
2、heapspace分为年轻带和年老代
(1)年轻代的垃圾回收叫 Young GC
(2) 年老代的垃圾回收叫 Full GC。在年轻代中经历了N次(可配置)垃圾回收后仍然存活的对象,就会被复制到年老代中。因此,可以认为年老代中存放的都是一些生命周期较长的对象。
年老代溢出原因有 循环上万次的字符串处理、创建上千万个对象、在一段代码内申请上百M甚至上G的内存,既A B D选项
177、创建Statement是不传参的,PreparedStatement是需要传入sql语句
178、并不是静态块最先初始化,而是静态域。而静态域中包含静态变量、静态块和静态方法,其中需要初始化的是静态变量和静态块.而他们两个的初始化顺序是靠他们俩的位置决定的!
180、TCP报文中,当发生超时事件,阈值被设置成当前拥塞窗口的一半,而拥塞窗口被设为一个最大报文段,也就是4KB。
181、
182、Abstract = 抽象 ,AbstractMap是抽象类 叫 继承不叫 实现
183、基于哈希算法在信息安全中主要应用在
(1) 文件校验 (2) 数字签名 (3) 鉴权协议
184、银行家算法是【死锁避免】
185、判断哪个排序不是快排第N步的结果,只需要掌握一点就可以解出这个问题:
每趟排序就有一个元素排在了最终的位置上。那么就是说,第n趟结束,至少有n个元素已经排在了最终的位置上。所以我们把最终排序结果写出来:然后计算在最终位置上的个数就可以
186、父类静态域——》子类静态域——》父类成员初始化——》父类构造块——》1父类构造方法——》2子类成员初始化——》子类构造块——》3子类构造方法;
规律就是 父类先于子类 静态的先于非静态的 变量先于代码块
187、虚拟内存:
解放物理空间的存储管理, 使得数据被分配的地址与逻辑上程序执行的上下文解耦。
提供进程之间的地址空间隔离,防止进程访问地址越界或非法。
简化在链接阶段分配地址空间。
188、以下哪些关键字/类可以达到不同线程互斥访问的效果?
ReentrantLock、synchronized(但是volatile不能),锁机制
189、
190、Linux使用的进程间通信方式?
管道、共享内存、信号量、套接字。
J2EE整理:
1.Applet:
Applet是采用Java编程语言编写的小应用程序,该程序可以包含在 html页中,与在页中包含图像的方式大致相同。含applet的网页的html文件代码中部带有applet标记。当支持java的网络浏览器遇到这对标记是,将下载相应的小应用程序代码并在本地计算机上执行该applet。
在Applet中,init():初始化
start():复活
stop():当Applet被覆盖时,可用stop()方法停止现场,挂起线程
destroy():终止Applet,释放Applet的所有资源。
程序员可以调用System.gc()运行垃圾回收器,但是不能指定时间。