面经学习(宁波某小厂)

个人评价

很简单的面试题,纯纯的八股文,项目没有问。就是异常有哪些分类这个知识点忘记了。

1.Java的基本类型有哪些呢?


  最常用的就是 char,int, double,float,short,byte等等。

2.String不是基础类型吗?

  不是基础类型它是一个内部类,底层使用固定长度char数组来实现的,在做数据拼接的时候使用StringBuilder做拼接的。也就是在做数据的拼接的时候都会创建一个StringBuilder,调用append方法拼接最终通过toString返回对应的字符串。

3.String对象是怎么比较的?如果两个引用类型的数据那又是怎么比较的呢?

  String对象主要就是使用方法equals方法来比较的,String对equals进行了重写,在没有进行重写是其底层就是通过==来进行判断的,重写后的equals只比较对象中值是否相等。如果是两个引用进行比较的话就是使用==判断两个数据的引用地址是否相同。

4.Java是单继承还是多继承呢?

  Java是单继承机制,也就是在子类只能继承一个父类,但是呢,在接口的实现上是支持多实现的。

5.一个程序我们要确定其错误位置要怎么做呢?如果直接出现异常的话怎么保证正常的执行呢?

  在我定位错误的时候只要通过打印及查询日志+DeBug来实现的,在出现的异常的位置我们使用 try/catch进行捕获在合适的位置进行throw抛出即可保证代码的远行。

*6.异常有哪些?

  主要就是分为 Exception和Error。

  Exception又分为运行时异常和检查异常,运行时异常常见就是NullPointerException等异常。检查异常就是需要被try/catch包裹否则程序无法正常运行,包括 ioException, SQLException。

  Error会在运行的时候发生,常见的内存不足异常OutofMemoryError,ThreadDeath等等。

  

7.使用原生的JDBC创建一个连接,如果出现程序异常的话,我们该怎么关闭资源池呢?


  我们在创建连接的时候只要就是创建一个SqlSession会话进行操作,在调用创建会话的时候我们会使用try/catch进行包裹,在正常情况下我们会在finally中调用close方法,在捕获到遗产的时候会调用SqlSession.close方法来关闭sql会话。

8.catch中的代码一定会执行吗?


  catch是配合try使用的,在执行try中的方法后,如果出现catch指定的异常类的时候就会执行catch中的方法。

9.Java里面的线程是怎么使用的呢?


  相同默认就是使用单线程执行相应的方法,我们可以手动创建线程池来使用多线程执行任务。创建线程池只要就是使用ThreadPoolExcutor进行创建,它有七个参数,总线程数,核心线程数,救急线程存活时间,存活时间的单位,堵塞队列,拒绝策略,线程工厂。阻塞队列又分为ArrayBlockQueue和LinkedBlockQueue,拒绝策略有四种,报错策略,使用主线程执行策略,清除阻塞队列中 存活时间最长的任务策略,直接丢弃策略。

10.把外部的引用传递到匿名内部类中,在内部类中修改这个引用,会不会对原引用有影响呢?修改引用的值呢?


  如果我们修改引用对象中属性值的时候外部的对象会受到影响,如果我们直接修改引用值得话,外部的对象不会受到影响。因为此时我们是修改引用地址。

11.SSM和SpringBoot中常用的直接有哪些呢?

  1.   SpringMVC中常用的注解就是RequsetMappering,四种不同请求方式的mappering,对应的路径参数pathValue,@Session等等。
  2.   Spring中主要就是ioc和aop的注解,ioc就是@AutoWried,@Qualifer,@Bean等等,aop主要就是@aspect和不同的环绕通知,就比如@around,@After,@Before。
  3.   SpringBoot中常用的注解就是就是这个SpringBootApplication注解,其中有主动加载注解,@EnableAutoConfiguration实现对应类的自动加载。

12.@ReponseBody返回的类型数据是什么?


  返回的是Json字符串类型的数据,其主要就是使用在前后端分离的项目中,@ReponseBody就保证了SpringMVC执行流程中在处理器适配器中不再返回modelAndView而是直接返回json数据给前端。

13.你刚刚说到这个SpringMVC的执行流程,那你具体讲一下这个流程吧?

  我们先讲一下前后端不分离的版本吧,请求会先进入DispatchServlet中,DS会携带请求到处理器映射器中,在Controller层中找到对应的方法返回执行连给DS,DS携带执行连到处理器适配器中,执行方法及处理返回结果,将ModelAndView返回给DS,DS携带MV到视图解析器中,最终将数据渲染到前端。前后端分离就是在处理器适配器执行后直接返回json数据给前端。

14.sleep()和wait方法有什么区别?

  1.   方法的归属地方面,sleep是thread中的方法,wait()是Object中的方法。
  2.   方法的使用方面,wait()方法必须配合Synchronzied使用,而sleep方法则不需要。
  3.   方法的作用方面,wait方法需要被notify方法或者notifyAll方法唤醒,而sleep方法会在对应的时间后自动唤醒。
  4.   wait方法在睡眠的时候会放弃cpu的使用权应许其他线程获取对象锁,而sleep方法则不允许其他线程获取对象锁。

15.Mybtis中#{}和${}的区别?

  1.   前者是做数据的替换,而后者是做字符串的拼接。
  2.   前者的数据的替换发生在DBAS之中,而后者发生在DBAS之外。
  3.   前者在做数据拼接的时候会自动添加'',而后者不会。
  4.   前者可以防止SQL注入,后者不行。

16.redis使用过哪些数据结构呢?

  1.    String结构主要就是作为缓存的时候使用,其中bitMap用来做过签到模块。
  2.    Hash结构主要就是在拒绝重复提交观看位置的问题的时候使用还有redisson的锁的实现。
  3.    set和zset结构就是在网课项目中的点赞模块中使用。
  4.    list主要就是在物流项目中合并运单的模块中配合set使用。

17.left join,inner join,right join有上面区别?


  左连接在做表关联的时候以左表作为去驱动,而右连接就是以右表作为驱动,内连接就是以小表为驱动。

18.user表(id...),order表(id,user_id...)查询哪些用户没有购买过商品?


SELECT * FROM `user` WHERE `user`.`user_id` NOT IN (SELECT `user_id` FROM `order` GROUP BY `order`.`user_id`)

19.基于刚刚的场景使用关联表怎么实现?


SELECT * FROM `user` WHERE `user`.`user_id` NOT IN (SELECT user.`user_id` FROM `user` RIGHT JOIN `order` ON `user`.`user_id`=`order`.`user_id`)    
 

  • 14
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值