吐血整理 Java笔试题知识点

刷题笔记

这篇博客是我在刷牛客的笔试题的时候整理的,每天会刷一部分题,不定时更新,不一定全都是Java的知识点,挑着看,个人认为做题巩固知识点会快很多,文章中有什么错误请及时联系我,不要传播错误的知识。

JAVA

  1. 遇到String类型之前,int间使用+表示数值的相加,直到遇到第一个String,后面按Stirng类型,变成字符串的拼接

    例
    System.out.println(1+"10"+3+"2"); // 11032
    System.out.println(1+2+"10"+3+"2"); // 31032
    System.out.println(1+"10"+3+1+"2"); // 110312
    
  2. finally是一定要执行的,当trycatchfinally中都有return时,只会执行finally中的

  3. Java中的四类八种基本数据类型

    • 第一类:整数类型 byte short int long
    • 第二类:浮点型 float double
    • 第三类:逻辑型 boolean(两个值可取true false)
    • 第四类:字符型 char
  4. for循环执行顺序

        for(expression1; expression2; expression3){
            expression4;
    }
    

    执行的顺序应该是:

    1. 第一次循环,即初始化循环。
      首先执行表达式expression1(一般为初始化语句);再执行expression2(一般为条件判断语句),判断expression1是否符合expression2的条件;如果符合,则执行expression4,否则,停止执行;最后执行expression3。
    2. 第N(N>=2)次循环
      首先执行expression2,判断在expression3是否符合在expression2要求;如果符合,则继续执行在expression4,否则,停止执行。最后执行在expression3。如此往复,直至expression3不满足在expression2条件是为止。

    先条件判断(expression2),再函数体执行(expression4),最后for执行(expression3)
    第一次判断时,对象为初始化语句(expression1),后续的判断对象为执行后的结果(expression3)

  5. 方法的重写与重载

    • 重写
      • 参数列表必须与被重写方法相同
      • 返回类型必须完全与被重写方法的返回类型相同
      • 访问权限 不能比父类中被重写的方法的访问权限更低
      • 父类的成员方法只能被它的子类重写
      • 声明为final的方法不能被重写
      • 声明名为static的方法不能被重写,但是能够被再次声明
      • 构造方法不能被重写
      • 子类和父类在同一个包中,子类可以重写父类所有方法,除了声明为privatefinal的方法
      • 子类和父类不在同一个包中,子类只能重写父类声明为publicprotected非final方法
      • 如果不能继承一个方法,则不能重写这个方法
      • 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以
    • 重载
      • 被重载的方法必须改变参数列表
      • 被重载的方法可以改变返回类型
      • 被重载的方法可以改变访问修饰符
      • 被重载的方法可以声明新的或更广的检查异常
      • 方法能够在同一个类或者在同一个子类中被重载
      • 无法以返回值类型作为重载函数的区分标准
  6. Java表达式转型规则

    • Java表达式转型规则由低到高转换
      1. 所有的byte\short\char型的值被提升为int型
      2. 如果有一个操作数是long型,计算结果为long型
      3. 如果有一个操作数是float型,计算结果为float型
      4. 如果有一个操作数是double型,计算结果为double型
      5. 被final修饰的变量不会自动改变类型,当两个被final修饰的变量相操作时,结果会根据左边变量的类型而转化
        例题
          byte b1=1,b2=2,b3,b6,b8;
          final byte b4=4,b5=6,b7;
          b3=(b1+b2);  /*语句1*/
          b6=b4+b5;    /*语句2*/
          b8=(b1+b4);  /*语句3*/
          b7=(b2+b5);  /*语句4*/
          System.out.println(b3+b6);
        
    • 解析
      • 语句1错误:b3=(b1+b2);自动转为int,所以正确写法为b3=(byte)(b1+b2);或者将b3定义为int;
        语句2正确:b6=b4+b5;b4、b5为final类型,不会自动提升,所以和的类型视左边变量类型而定,即b6可以是任意数值类型;
      • 语句3错误:b8=(b1+b4);虽然b4不会自动提升,但b1仍会自动提升,所以结果需要强转,b8=(byte)(b1+b4);
        语句4错误:b7=(b2+b5); 同上。同时注意b7是final修饰,即只可赋值一次,便不可再改变。
  7. 垃圾收集

    • 使用垃圾收集的程序不需要明确释放对象
    • 现代垃圾收集能够处理循环引用问题
    • 垃圾收集能提高程序员效率
    • 垃圾收集也会有内存泄漏问题
  8. Servlet的生命周期

    • 初始化阶段(init)
      • 创建并加载servlet对象、ServletConfig对象
    • 运行阶段(service)
      • 调用doGet()\doPost()方法,构造servletRequest\servletResponse对象
    • 销毁阶段(destroy)
      • 停止Servlet,释放资源
  9. 只有在不显示声明构造方法时,系统才提供默认无参构造方法

  10. 静态变量静态初始化块谁先声明谁先初始化

    public class Test{
       static int cnt = 6;
       static{
           cnt += 9;
       }
    public static void main(String[] args){
       System.out.println(“cnt =” + cnt);
    }
    static{
        cnt /=3;
        };
    }
    
    //cnt = 5;
    
  11. 如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法

  12. private方法只可以在类的内部使用,在类外根本访问不到,而final方法可以在类外访问,但是不可以重写该方法

  13. 访问修饰符访问权限

- protected:可被同一包以及包外子类访问
- private:只能自己访问
- default:只能被同一包访问
  1. abstract 关键字
- abstract类不能与final,static使用
- interface属于特殊的abstract类,也是abstract类
- 可以有private属性
  1. 数组复制的效率System.arraycopy > clone > Arrays.copyOf > for循环

  2. HashMap是采用 拉链法 解决哈希冲突

  3. java concurrent包下的4个类

    • Semaphore:类,控制某个资源可被同时访问的个数;
    • ReentrantLock:类,具有与使用synchronized方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大;
    • Future:接口,表示异步计算的结果;
    • CountDownLatch:类,可以用来在一个线程中等待多个线程完成任务的类
  4. InterruptedException的代表方法

    • java.lang.Object 类的 wait 方法
    • java.lang.Thread 类的 sleep 方法
    • java.lang.Thread 类的 join 方法
  5. 线程调用

    • start()方法来启动线程,真正实现了多线程运行
    • run()方法当作普通方法的方式调用,程序还是要顺序执行
  6. Lanbda表达式

    • 形参列表:形参列表允许省略形参类型。如果形参列表中只有一个参数,甚至连形参列表的圆括号也可以省略
    • 箭头(→):必须通过英文中画线和大于符号组成
    • 代码块
  7. 可以用于存储键,值对,并且方法调用提供了基本的多线程安全支持的类有hashtable concurrentHashMap synchronizedMap

  8. 序列化是将数据结构转换成为二进制数据流或者文本流的过程

  9. ++m / m++

    • ++m 先自加再输出,m++ 先输出再自加
  10. Math类取整方法

    • floor:向下取整,返回小于参数的最大整数,返回double类型
    • ceil:向上取整,返回大于参数的最小整数,返回double类型
    • round:对小数进行四舍五入后的结果,返回int类型
  11. 类中实例变量可以不用初始化,使用相应类型的默认值即可;方法中的定义的局部变量必须初始化,否则编译不通过

  12. list set

    • 列表(List)的元素是有序、可重复
    • 集合(Set)的元素是无序、不可重复
  13. 多重catch块的顺序问题

    • 异常处理系统就近寻找匹配异常处理程序,应先子类后父类
    • Exception 异常类最后抛出
  14. HashMap的数据结构是 数组+链表

  15. 选择语句不能重复执行

  16. 关键字super的作用

    • 访问父类被隐藏的非私有成员变量
    • 调用父类中被重写的方法
    • 调用父类的构造函数
  17. string字符串的值是不可变

    • String str = new String("test"); str的值一直是test
  18. Socket套接字

    • 服务器端:ServerSocket提供的实例 ServerSocket server= new ServerSocket(端口号)
    • 客户端:Socket提供的实例 Socket soc=new Socket(ip地址,端口号)
  19. final关键字

    • final修饰变量,则等同于常量
    • final修饰方法中的参数,称为最终参数
    • final修饰类,则类不能被继承
    • final修饰方法,则方法不能被重写,可以被重载
    • final 不能修饰抽象类
  20. synchronized 锁住的对象

    • 修饰非静态方法 锁的是this对象
    • 修饰静态方法 锁的是class对象
  21. 类的成员变量默认会被初始化

    public class Person{
       static int arr[] = new int[5];
       public static void main(String a[]){
       System.out.println(arr[0]);
    }
    //输出为0
    } 
    
  22. .add(0,4)是在0号索引上添加数字4

  23. 二维数组定义,一维长度必须定义,二维可以后续定义

    • float []f[] = new float[6][6]
    • 第一个框一定要有值
  24. byteintlongcharfloatdoubleboolean各占多少个字节

    • 1 4 8 2 4 8 1
  25. abstract只能修饰类和方法 不能修饰字段

  26. JSP的9个内置对象

    • pageContext 表示页容器 EL表达式、 标签 、上传
    • request 服务器端取得客户端的信息:头信息 、Cookie 、请求参数 ,最大用处在MVC设计模式上
    • response 服务器端回应客户端信息:Cookie、重定向
    • session 表示每一个用户,用于登录验证上
    • application 表示整个服务器
    • config 取得初始化参数,初始化参数在web.xml文件中配置
    • exception 表示的是错误页的处理操作
    • page 如同this一样,代表整个jsp页面自身
    • out 输出 ,但是尽量使用表达式输出
  27. Statement对象的用于执行不带参数的简单SQL语句

    • Prepared Statement 对象用于执行预编译SQL语句
    • Callable Statement 对象用于执行对存储过程的调用
  28. 实现或继承了Collection接口有 ListVectorSet

  29. 合法的标识符

    • 不能以数字开头
    • 不能是关键字
    • 不能包含除了 $_ 以外的其它字符
  30. JVM命令

    • jps:查看本机java进程信息
    • jstack:打印线程的栈信息,制作线程dump文件
    • jmap:打印内存映射,制作堆dump文件
    • jstat:性能监控工具
    • jhat:内存分析工具
    • jconsole:简易的可视化控制台
    • jvisualvm:功能强大的控制台
  31. >>>>>

    • >> 带符号右移
    • >>> 无符号右移,高位用0填充
  32. forwardredirect

    • 转发是服务器行为,重定向是客户端行为
  33. JVM堆内存中的区域有哪些

    • Eden区Survivor区old区
  34. is-a:继承关系 has-a:从属关系 like-a:组合关系

    • is-a,理解为是一个,代表继承关系。 如果A is-a B,那么B就是A的父类
    • like-a,理解为像一个,代表组合关系。 如果A like a B,那么B就是A的接口
    • has-a,理解为有一个,代表从属关系。 如果A has a B,那么B就是A的组成部分
  35. equal是内容比较 ==是比较地址

  36. 数组下标从0开始

    已知 声明并初始化二维数组 int a[ ][ ]={{1,2},{3,4},{5,6}} ,则 a[1][1] 的值为
         0 1
     0  {1,2}
     1  {3,4}
     2  {5,6} 
     // a[1][1]=4
    
  37. 访问修饰符

    修饰符 类内部 同一个包 子类 任何地方
    private Yes
    default Yes Yes
    protected Yes Yes Yes
    public Yes Yes Yes Yes
    名称 说明 备注
    public 可以被任何类访问
    protected 可以被同一包中的所有类访问,可以被所有子类访问 子类没有在同一包中也可以访问
    private 只能够被 当前类的方法访问
    无访问修饰符 可以被同一包中的所有类访问 如果子类没有在同一个包中,也不能访问

    public > protected > 默认(包访问权限) > private

  38. HttpServlet容器响应Web客户请求流程

    • Web客户端向Servlet容器发出请求
    • Servlet容器解析Web客户的Http请求
    • Servlet容器创建一个HttpRequest对象,在这个对象中封装Http请求信息
    • Servlet容器调用一个HttpResponse对象
    • Servlet容器调用HttpServlet的service方法,这个方法中会根据request的Method判断具体是执行doGet还是doPost,把HttpRequest和HttpResponse对象作为service方法的参数``传给HttpServlet对象
    • HttpServlet调用HttpRequest的有关方法,获取HTTP请求信息
    • HttpServlet调用HttpResponse的有关方法,生成响应数据
    • Servlet容器把HttpServlet的响应结果传给Web客户
  39. Object 类中的方法

    • registerNatives() //私有方法
    • getClass() //返回此 Object 的运行类
    • hashCode() //用于获取对象的哈希值
    • equals(Object obj) //用于确认两个对象是否“相同”
    • clone() //创建并返回此对象的一个副本
    • toString() //返回该对象的字符串表示
    • notify() //唤醒在此对象监视器上等待的单个线程
    • notifyAll() //唤醒在此对象监视器上等待的所有线程
    • wait(long timeout) //在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量前,导致当前线程等待
    • wait(long timeout, int nanos) //在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待
    • wait() //用于让当前线程失去操作权限,当前线程进入等待序列
    • finalize() //当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法
  40. 抽象类和接口的修饰符

    • 抽象类
      • JDK 1.8前,抽象类的方法默认访问权限为protected
      • JDK 1.8时,抽象类的方法默认访问权限变为default
    • 接口
      • JDK 1.8前,接口中的方法必须是public的
      • JDK 1.8时,接口中的方法可以是public的,也可以是default的
      • JDK 1.9时,接口中的方法可以是private的
  41. JVM内存五大区域

    • 虚拟机栈(VM Stacks) -> 包含栈帧(Frame)
    • 本地方法栈(Native Method Stack)
    • PC寄存器(Program Counter Register)
    • 方法区(Method Area)
    • 堆(Heap)
  42. 抽象类和接口的区别

    • 抽象类中可以有构造方法,接口中不能有构造方法
    • 抽象类中可以有普通成员变量,接口中没有普通成员变量
    • 一个类可以实现多个接口,但只能继承一个抽象类

Spring

  1. AOP和OOP的区别
    • 面向方面编程 AOP 偏重业务处理过程的某个步骤或阶段,强调降低模块之间的耦合度,使代码拥有更好的移植性,AOP 的一个很重要的特点是源代码无关性
    • 面向对象编程 oop 则是对业务分析中抽取的实体进行方法和属性的封装
  2. 在Spring框架中获取连接池可以有哪些方式
    • DBCP数据源C3P0数据源Spring的数据源实现类(DriverManagerDataSource)JNDI数据源

数据库

  1. 数据库的备份命令mysqldump
  2. 数据库系统的体系结构是 三级模式结构和两级映象
    • 三级模式包括:概念模式外模式内模式
      • 外模式 又称子模式、用户模式 一个数据库可以有多个外模式
      • 内模式 又称 物理模式或存储模式,一个数据库只有一个内模式
    • 两级映像包括外模式/模式映像模式/内模式映像
  3. with check选项时修改数据需满足视图的选择条件,而无with check时就无需满足
  4. 视图是基于数据表的一种查询窗口,不能新建
  5. 主键必须非空
  6. between包括上下边界值
    WHERE G BETWEEN 60 AND 100 == WHERE G>=60AND G < =100
  7. 数据库完整性是指数据库中数据在逻辑上的一致性正确性有效性相容性
  8. 数据库事务的ACID
    • 原子性(ATOMIC) :(事务管理子系统)整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节
    • 一致性(Consistency) :(完整性子系统)在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏
    • 隔离性(Isolation):(并发控制子系统)两个事务的执行是互不干扰的,一个事务不可能看到其他事务运行时中间某一时刻的数据
    • 持久性(Durability):(恢复管理子系统)在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚
  9. 数据库中使用drop删除表,delete用于删除表中的数据
  10. SELECT..INTO...FROM语句将现有表中的数据插入到新表中
  11. 存储过程语句
    • create procedure:创建存储过程
    • exec procedure:执行存储过程
    • alter procedure:修改存储过程
    • drop procedure:从数据库中删除过程
  12. 数据库管理系统是数据库的核心位置
  13. 数据库网状模型
    • 允许一个以上的结点无双亲
    • 一个结点可以有多于一个的双亲
  14. 有两个数据库表,父表和子表之间是一对多的联系,为控制子表和父表的关联,可以设置"参照完整性规则",为此要求这两个表在父表连接字段上建立主索引,在子表连接字段上建立普通索引
  15. 联系不能脱离实体,必须有实体连接且可以是实体的自身联系
  16. 将E-R图转换为关系数据库模型的过程属于逻辑设计阶段
  17. 数据库文件扩展名
    • 数据库文件的扩展名为.DBC
    • 数据表文件的扩展名为.DBF
    • 表单文件的扩展名为 .SCX
    • 项目文件的扩展名为 .PJX
  18. 数据库索引
    • 优点
      1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性
      2. 可以大大加快数据的检索速度
      3. 加速表和表之间的连接
      4. 使用分组和排序子句进行数据检索时,可以显著减少出啊寻中分组和排序的时间
      5. 通过使用索引,在查询的过程中使用优化隐藏器,提高系统的性能
    • 缺点
      1. 创建和维护索引需要耗费时间
      2. 索引需要占用物理空间
      3. 当对表中的数据进行增加、删除和修改的时候,索引需要动态维护,降低了数据维护的速度
  19. 数据库中的通配符%可以表示零个、一个、多个字符
  20. 数据库约束
    • NOT NULL:用于控制字段的内容一定不能为空(NULL)
    • UNIQUE:控制字段内容不能重复,一个表允许有多个 Unique 约束
    • PRIMARY KEY:也是用于控制字段内容不能重复,但它在一个表只允许出现一个
    • FOREIGN KEY:预防破坏表之间连接的动作,FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一
    • CHECK:用于控制字段的值范围
    • DEFAULT:用于设置新记录的默认值
  21. 在 Access 中,如果要在某个字段中存放图像,则该字段类型为OLE类型
  22. 3NF 消除主属性对码的部分和传递函数依赖 规范化为BCNF
  23. SQL Server 编程中,可使用BEGIN-END将多个语句捆绑

发布了15 篇原创文章 · 获赞 20 · 访问量 1913

猜你喜欢

转载自blog.csdn.net/OliverND/article/details/103620645