每日练手10道面试题(一)

每日练手面试题

1.PreparedStatement和Statement有什么区别?哪个性能fan更好?
  1. 前者可以防止Sql注入,会给变量加上单引号
  2. 每次预编译,会先往缓存里面找有没有之前执行过的,有就重复结果,没有再重新执行,并存入缓存,所以前者效率更快一些
  3. 前者可以执行带参数的sql语句
2.说出数据连接池的工作机制是什么?

这个你可以想象成木桶装水原理,连接数量主要由最短的连接数量决定,无论是否连接,一直保证有这么多至少可以连接,而最大连接数决定了这个连接池也就是木桶修好了之后最大装水量,而在最大装水之前,修的过程,也就是等待队列,需要等着,如果超出最大连接数,就会触发四种拒绝策略

  • 哪里来,回哪里执行

  • 直接抛出异常

  • 尝试与第一个线程竞争资源

  • 直接拒绝

大于最小连接数的数据库连接在使用完不会马上被释放,它将被放到连接池中等待重复使用或是空闲超时后被释放。

3.介绍一下Java中的多态。

定义的引用变量指向具体的类型,但是具体指向谁,需要程序运行时才会知道,通过解析符号引用得知,它的功能主要有向上转型和向下转型,

向上转型: Person p=new Student(); 这样就是指向了父类,可以使用父类方法,子类方法隐藏,只有重写方法露出

向下转型: Person p=new Person();Student s=(Student)p; 这样就可以使用子类的,也可以使用父类的

所以它提高了代码的扩展性,可以随时根据想要执行的类进行转型

4.throw和throws的区别

前者:显示抛出一个异常

后者:主要用于指出没处理的异常,预防可能的错从而显示出错原因,平时都有throw new 自定义异常();

5.类的实例化顺序

首先是加载父类的静态变量,类链接的时候会先给静态准备空间存储为了后续实例化赋值

解析的时候会先从父类找起,所以是父类静态优先,多个按顺序,然后子类静态,然后父类非静态,然后是子类非静态,最后是父类构造和子类构造执行

6.请说出你所知道的线程同步的方法

同步是一种各线程间协调使用共享资源的一种方式

这一个可能不算方法,Synchronized可以修饰在方法上保持同步

wait():使线程处于等待状态,并且释放所持有的对象的 lock。可以与 notify()方法配套使用。
它有两种形式,一种是以毫秒为单位的一段时间作为参数,另一种是没有参数。
sleep():使一个正在运行的线程处于阻塞状态,可以以毫秒为单位的一段时间作为参数,它可
以使得线程在设定的时间停止运行,但是在设定的时间一过,线程重新进入可执行状态。由于
sleep()是一个静态方法,所以调用此方法要捕捉 InterruptedException 异常。
notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某
一个等待状态的线程,而是由 JVM 确定唤醒哪个线程,而且不是按优先级。
allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让
它们竞争。只有获得锁的那一个线程才能进入可执行状态。

7.关于反射的用途和实现
  1. 反射就是不用通过new能够获得类的模板信息

  2. 先是通过class.forname全限定类名

  3. 然后newInstace获得实例

  4. 接下来就是或者方法getMethod()或者getDeclaredMethod获得私有的方法,但是需要关闭权限setAccessible(true),同理字段getField和getDeclaredField

  5. 然后可以使用invoke反射直接执行方法

用途:

  • Spring的IOC控制反转就是利用反射获取bean实例
  • jdbc连接数据库里面也有class.forname
  • 哈哈单例模式给他说个可以用单例破坏
8.线程和进程的区别
  1. 线程是Cpu调度的最小单位,进程是分配系统资源的最小单位

  2. 一个进程可以包括多个线程,线程有自己的堆栈和局部变量表但没有存储空间均来自进程

  3. 进程之间切换有上下文的消耗,线程则开销小

9.什么是双亲委派机制

这个是类加载的时候经常用来判断安全的,保护程序安全运行,代码的可执行性

这时候需要了解四种类加载器,根加载器,扩展加载器,用户加载器,自定义加载器

当我们运行一个类的时候,会先从根加载器找,如果找不到这时候会给扩展加载器,让它来找,它也找不到就一层层往下,最后找不到的话就会抛出异常,

之前我写了toString方法但是没有重写,导包自己的包名,但是根加载器找到的toString()不是同一个类,就会一直往下找,找不到会抛出异常,所以这个防止了程序员对jdk在编程时的改动,极大保证了代码可执行性

10.Mysql的三大范式
  1. 字段具有原子性,不可再分解
  2. 强调记录唯一性,表必须有一个主键,
  3. 其它列要依赖于主键,不能无关联
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值