2020毕业后我所经历的面试【面试系列】 面试题三

这是我面试的第六家公司了,前面有的几家面试官没有怎么问问题,这次面试对我的打击是挺大的,
1.spring中的AOP和IOC原理是什么?

IOC是控制反转,对于Spring来说就是由Spring框架负责控制对象的的生命周期和对象间的关系,IOC是DI依赖注入实现的,动态的向某个对象提供他所需要的其他对象,依赖注入是Spring通过反射机制动态生成对象,执行对象的方法,改变对象的属性.实现IoC的步骤:定义用来描述bean的java类,解析bean的配置将bean的配置信息转换为上面的Beandefinition对象保存在内存中,spring中采用hashMap进行对象存储,会用到xml解析技术。遍历存放BeanDefinition的HashMap对象,将实例化后的对象保存在另外一个Map中即可。

ioc就是将对象的使用权交由容器管理,当对象需要使用时直接由容器给动态提供。

Aop原理:指向面向切面编程,作为面向对象的一种补充,用于处理系统中分布于各个模块的横切关注点,比如事务管理,日志,缓存等,Aop实现关键在于Aop代理(动态代理和静态代理)静态代理是AspectJ;而动态代理以Spring Aop为代表,通常使用AspectJ的编译时增强实现Aop, AspectJ是静态代理的增强,所谓静态代理就是Aop框架会在编译阶段生成Aop代理类,因此称为编译时增强。

aop:首先考虑到切面,然后是aop代理,动态代理,然后动态代理就是为了增强某一类的功能。

2.Spring中的@Autowrited和@Resource的区别?

@AutoWrited 和@Resource都是标注于setter方法上的。

@AutoWrited是通过ByType注入的。@Resource是通过byName注入的。@Resource有两个属性分别是type属性和name属性,如果指定那个属性就可以按照哪种方式注入,默认的是按照byName属性注入的。

3.hashMap和hashTable的区别?

hashMap是底层数组加链表实现的,hashMap是线程不安全的,hashtable是线程安全的,hashmap允许键值都为null,hashtable不允许。两者都是Map的实现类,HashMap是AbstractMap的子类,Hashtable是Dictionary的子类。

4.volatile关键字有什么用:

用于多线程中

volatile关键字是用来保证有序性和可见性的。这跟java内存模型有关。
5.redis分布式锁怎么实现:
这个又是我的痛点,项目上没有接触过,原来好像看过是通过计数器来实现的。
大致实现流程:

是利用redis的set命令来实现分布式锁的。

先拿setnx (SET if Not eXists) 来争抢锁,抢到之后再用expire给锁加一个过期的时间防止忘记释放,

大致思想:

set lock currrentTime+expireTime EX 600 NX 使用set设置lock值,并设置过期时间为600秒,如果成功则获取锁

获取锁后,如果该节点掉线,则到过期时间lock值会自动失效;

释放锁时使用del删除lock键值。

优点:性能高,redis可持久化,也能保证数据不易丢失。redis集群方式提高稳定。

缺点:使用redis主从切换时可能丢失部分数据。

6.集合中那些是线程安全的?
hashtable,ConcurrentHashMap ,vector,stack,enumeration
7.说你常见的sql优化
(1)使用索引 (2)尽量减少子查询使用关联查询 (3)减少使用in或not in 使用exists代替。
8.insert语句,insert批量插入是如何做的:
insert into table_name values()
insert into table_name (id,xxx) values(),(),()
9.如果更新一个字段中函数有abc的把他更新为123如何进行更新。
(1)将表(Ws_FormMain)的字段(order_Number)内容为XSRK201706080001修改为WXSK201706080001
update 表名 set 字段 = replace(字段, ‘要修改的内容’ , ‘修改后的内容’);
UPDATE Ws_FormMain SET order_Number = REPLACE(order_Number, ‘XSRK’, ‘WXSK’) WHERE orderDefId = 513
(2)需要修改sqlserver数据库中某一字段的值,例如从“1234560001”至“1234560999”的字段supplier_id进行修改,要求修改后的supplier_id字段值为“654321”。
可以使用replace()函数进行修改:update table set supplier_id=replace(supplier_id,‘123456’,‘654321’) where supplier_id like ‘123456%’;
repl
10.List getString(Obj obj) { List list=new ArrayList();list.add()}
11.事务的脏读和泛读的区别?
脏读是两个事务 A存B取,A存2000,b取款查询2000,b取款1000,但是 A查询为1000(脏读)但是B事务失败,所以事务回滚,A存入2000余额为3000(这时产生脏读) 提交事务,但是实际应该为4000 此时就是脏读。
幻读(前后多次读取,数据总量不一致): 事务A 开始查询为100,其他操作,事务b开始新增100 提交事务,事务A第二次查询总量为200 ,但是按照正确的逻辑事务A前后两次读取的数据量应该一致。
不可重复读(前后多次读取,数据内容不一致):事务A 开始查询为100,其他操作,事务b开始更改100 为200提交事务,事务A第二次查询总量为200 ,但是按照正确的逻辑事务A前后两次读取的数据量应该一致。

12.update语句:
update table set field1=’’,field2=’’ where field=’’
13.hashtable和hashMap分别继承于哪些类?
hashMap继承于abstractMap,hashtable继承于Dictionary,两者都是实现了Map的接口。
hashMap允许键值对为null,而hashtable是不允许键或者值为null,hashtable是同步的,适合于多线程环境。而hashMap是适合单线程的。
hashtable的方法是用synchronized修饰的 是线程安全的。
14.小程序的openId是如何让获取的?
调用wx.login()获取临时登录凭证code,并传回开发者服务器。然后调用auth.code2Session接口,换取用户唯一标识OpenId和会话密钥session_key之后开发者服务器可以根据用户标识来生成自定义登录态,用于后续业务逻辑中前后端交互时识别用户身份。
15.transient 有什么用处:
与序列化Serializable有关,加入transient关键字的属性就不会被序列化。使其不被序列化。静态变量无论是不是transient关键字修饰都不会被序列化。
16.索引失效的情况?
(1)应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描.
(2)使用like模糊查询时%放在前面索引不起作用,只有“%”不是第一位置索引才会生效。
(3)使用OR关键字查询时or前后的两个条件的列都是索引才生效否者索引不生效。
(4)尽量避免where字句中对字段进行函数操作,这将导致不适用索引而进行

这个面试问了将近20个题目我回答的不是很好,我几次回答让面试官感到很无奈,的确这个面试是我没一点准备,因为我已经入职了先进数通,在先进数通的一周也没来时间看面试题,没有好好的准备,一次很不愉快的电话面试。唉,加油吧少年

对于这次面试准备,我主要是根据我自费的购买的(校招)面试锦集,如果需要可以关注下面的公众号回复校招即可领取,记得是回复:校招

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kay三石 [Alay Kay]

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值