笔试题错题小结

笔试题错题集:

1.常用ASCII码值:空格为32;数字0为48;“A”为65;“a”值为97。

2.总结来说:(类方法就是静态方法 )

  1. 若超类的实例方法未被重写,则子类的实例方法可以可以直接调用超类的非private实例方法;若被重写了,则需使用super关键字调用;
  2. 子类的实例方法可以直接调用超类的非private类方法(类方法不存在继承和重写问题);
  3. 实例方法不可以直接调用其他类的实例方法;
  4. 实例方法可以直接调用本类的类方法。

3.ArrayList list = new ArrayList(20);中的list扩充几次

解析:该题指定初始化数组大小为20,没有扩容;若为ArrayList list = new ArrayList(); 则此时默认创建大小为10的数组,扩容1.5倍

4.类的加载顺序。

(1) 父类静态代码块(包括静态初始化块,静态属性,但不包括静态方法)

(2) 子类静态代码块(包括静态初始化块,静态属性,但不包括静态方法 )

(3) 父类非静态代码块( 包括非静态初始化块,非静态属性 )

(4) 父类构造函数

(5) 子类非静态代码块 ( 包括非静态初始化块,非静态属性 )

(6) 子类构造函数

重写 要求两同两小一大原则, 方法名相同,参数类型相同,子类返回类型小于等于父类方法返回类型, 子类抛出异常小于等于父类方法抛出异常, 子类访问权限大于等于父类方法访问权限。[注意:这里的返回类型必须要在有继承关系的前提下比较]

重载 方法名必须相同,参数类型必须不同,包括但不限于一项,参数数目,参数类型,参数顺序

6.Callable类的call()方法可以返回值和抛出异常

CyclicBarrier和CountDownLatch都可以让一组线程等待其他线程

CyclicBarrier(栅栏):可以让一组线程等待其他线程。 CountDownLatch(闭锁): 可以让一组线程等待某个事件发生。

全局变量可以不用初始化

局部变量需要初始值 局部变量需要初始值 局部变量需要初始值

8.\1. 粉红色的是受检查的异常(checked exceptions),其必须被 try{}catch语句块所捕获,或者在方法签名里通过throws子句声明.受检查的异常必须在编译时被捕捉处理,命名为 Checked Exception 是因为Java编译器要进行检查,Java虚拟机也要进行检查,以确保这个规则得到遵守.

\2. 绿色的异常是运行时异常(runtime exceptions),需要程序员自己分析代码决定是否捕获和处理,比如 空指针,被0除…

\3. 而声明为Error的,则属于严重错误,如系统崩溃、虚拟机错误、动态链接失败等,这些错误无法恢复或者不可能捕捉,将导致应用程序中断,Error不需要捕捉。

  1. wait() 与 notify/notifyAll()
    wait() 与notify/notifyAll方法必须在同步代码块中使用
    在执行以上方法时,要先获得锁。那么怎么获得锁呢?
    使用synchronized关键字获得锁。因此,wait() 与 notify/notifyAll() 经常与synchronized搭配使用,
    即在synchronized修饰的同步代码块或方法里面调用wait() 与 notify/notifyAll()方法。
    g

    notify()通知第一个wait的进程,notifyAll()通知所有wait的进程

9.计算余弦值使用Math类的cos()方法

toRadians()是将角度转换为弧度

toDegrees()是将弧度转换为角度

  1. 内部类 可以是静态的内部类 但是内部类不你能有静态方法和静态变量
    其作用域仅限于方法内,方法外部无法访问该内部类

  2. Java在序列化时不会实例化static变量和transient修饰的变量,因为static代表类的成员,transient代表对象的临时数据,被声明这两种类型的数据成员不能被序列化

  3. finally和return的执行顺序
    如果程序是从try代码块或者catch代码块中返回时,finally中的代码总会执行。而且finally语句在return语句执行之后return返回之前执行的。可以使用编译器的Debug功能查看详细过程。

  4. 导包只可以导到当前层,不可以再导入包里面的包中的类

  5. 线程安全的问题全都是由全局变量以及静态变量引起的,非静态自然不会存在线程安全问题。
    非静态方法使用数据保存于栈中,是线程私有的。

  6. Synchronized用于线程间的数据共享,而ThreadLocal则用于线程间的数据隔离

  7. 基本类型之间的比较,应该会将低精度类型自动转为高精度类型再比较。

  8. Java类成员的访问控制权限:
    public > protected > 同包(default) > private

  9. static变量也称作静态变量,静态变量和非静态变量的区别是:
    静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。
    而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。

19.在接口中,属性默认public static final,这三个关键字可以省略

20.被final修饰的变量是常量,这里的b6=b4+b5可以看成是b6=10;在编译时就已经变为b6=10了

而b1和b2是byte类型,java中进行计算时候将他们提升为int类型,再进行计算,b1+b2计算后已经是int类型,赋值给b3,b3是byte类型,类型不匹配,编译不会通过,需要进行强制转换。

Java中的byte,short,char进行计算时都会提升为int类型。

synchronized关键字和volatile关键字比较:

  • volatile关键字是线程同步的轻量级实现,所以volatile性能肯定比synchronized关键字要好。但是volatile关键字只能用于变量而synchronized关键字可以修饰方法以及代码块。synchronized关键字在JavaSE1.6之后进行了主要包括为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁以及其它各种优化之后执行效率有了显著提升,实际开发中使用 synchronized 关键字的场景还是更多一些。
  • 多线程访问volatile关键字不会发生阻塞,而synchronized关键字可能会发生阻塞
  • volatile关键字能保证数据的可见性,但不能保证数据的原子性。synchronized关键字两者都能保证。
  • volatile关键字主要用于解决变量在多个线程之间的可见性,而 synchronized关键字解决的是多个线程之间访问资源的同步性。

21…java继承中对构造函数是不继承的,只是显式或者隐式调用,

22.子类引用父类的静态字段,只会触发子类的加载、父类的初始化,不会导致子类初始化

而静态代码块在类初始化的时候执行!!

23.实体间联系是使用二维表,通过一个表包含俩个表相关联的属性或者字段使得俩个实体具有联系

24.先说候选码,候选码就是可以区别一个元组(即表中的一行数据)的属性或属性的集合,比如学生表student(id,name,age,sex,deptno),其中的id是可以唯一标识一个元组的,所以id是可以作为候选码的,既然id都可以做候选码了,那么id和name这两个属性的组合可不可以唯一区别一个元组呢?显然是可以的,此时的id可以成为码,id和name的组合也可以成为码,但是id和name的组合不能称之为候选码,因为即使去掉name属性,剩下的id属性也完全可以唯一标识一个元组,就是说,候选码中的所有属性都是必须的,缺少了任何一个属性,就不能唯一标识一个元组了,给候选码下一个精确的定义就是:可以唯一标识一个元组的最少的属性集合。而码是没有最少属性这个要求的。另外,一个表的候选码可能有多个,从这些个候选码中选择一个做为主码,至于选择哪一个候选码,这个是无所谓的,只要是从候选码中选的就行。

25.FTP服务器有两个端口,其中21端口用于连接,20端口用于传输数据 进行FTP文件传输中,客户端首先连接到FTP服务器的21端口,进行用户的认证,认证成功后,要传输文件时,服务器会开一个端口为20来进行传输数据文件。 也就是说,端口20才是真正传输所用到的端口,端口21只用于FTP的登陆认证。我们平常下载文件时,会遇到下载到99%时,文件不完成,不能成功的下载。其实是因为文件下载完毕后,还要在21端口再行进行用户认证,而下载文件的时间如果过长,客户机与服务器的21端口的连接会被服务器认为是超时连接而中断掉,就是这个原因。解决方法就是设置21端口的响应时间。

26.ls -查看当前目录下的文件

touch filename 新建文件

cat : 三个功能:1.一次显示整个文件 -----cat filename

                     2.创建新文件,不能 编辑已有文件 -----cat > filename

                     3.将几个文件合并为一个文件 -----cat file1 file2 > file

vi/vim filename 表示用vi或vim打开文件,如果不存在该文件则新建文件

27.String split 这个方法默认返回一个数组,  * 如果没有找到分隔符,  * 会把整个字符串当成一个长度为1的字符串数组

28.产生死锁的四个必要条件: (1) 互斥条件:一个资源每次只能被一个进程使用。 (2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。 (3) 不剥夺条件:进程已获得的资源,在使用完之前,不能强行剥夺。 (4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

29.final不能被子类覆盖,但是基类的private方法,只有非private方法才能被覆盖。子类虽然继承了基类的所有内容,但是private和构造器等对子类是不可见的,不能直接访问,但是可以调用基类的非parivate方法从而访问基类的private``方法,也会引起很多问题。

30.泛型仅仅是java的一颗语法糖,它不会影响java虚拟机生成的汇编代码,在编译阶段,虚拟机就会把泛型的类型擦除,还原成没有泛型的代码,顶多编译速度稍微慢一些,执行速度是完全没有什么区别的。

31.Java数据库连接库JDBC用到哪种设计模式? 桥接模式

桥接模式:

定义 :将抽象部分与它的实现部分分离,使它们都可以独立地变化。

意图 :将抽象与实现解耦。

发布了78 篇原创文章 · 获赞 5 · 访问量 7384

猜你喜欢

转载自blog.csdn.net/weixin_41930050/article/details/101612258
今日推荐