整理

2018-08-01  本文已影响0人  取名废同学

这里面的内容主要是我看到的一些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、

==:比较引用类型,比较地址,false

   32、类中声明的变量的默认初始值:

注意类变量在不设置初始值时,会进行默认值赋值,而局部方法中声明的变量则必须进行初始化,他不会进行默认值赋值。

在基本 JAVA 类型中,如果不明确指定,整数型的默认是 int,带小数的默认是 double 类型。

33、

34、s和t的地址相同,都指向”hello“,因为t没有重新new的,所以地址不变

35、

36、线程状态图:注意阻塞之后是就绪态,而不是运行态

37、

基类是抽象类,子类继承父类,但是没有实现基类的抽象方法,那么子类也是抽象类。抽象类不能创建对象,所以在主函数中创建对象编译不会通过。

该题结果:Animal能编译,Cat不能编译

38、关于socket:

39、

40、

中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口,但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递。通过中间件,应用程序可以工作于多平台或OS环境。

(简单来说,中间件并不能提高内核的效率,一般只是负责网络信息的分发处理)

中间件位于操作系统之上,应用软件之下,而不是操作系统内核中

41、对于try-catch-finally语句,finally语句一定会执行,如果finally块中有return语句的话,它将覆盖掉函数中其他return语句。

catch语句执行完finally执行,返回但不会再往下执行finally之后的了。

结果返回30

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(位)

答案:a=128,b=-128

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、

结果:null、42、42

注意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、3、4错误(final类型不会转化)

语句 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的赋值运算是有返回值的,赋了什么值,就返回什么值

输出true

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、

答案:list.remove();即可

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、

答案:128、-128

解析: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()运行垃圾回收器,但是不能指定时间。

上一篇下一篇

猜你喜欢

热点阅读