一些知识点

springsecurity 认证流程
usernamepasswordAuthenticationFilter:用户名密码过滤
掉用AuthenticationManager:认证管理器,控制整个认证流程
调用uthenticationProvider:认证提供器,匿名访问,用户名密码访问,不同的访问有不同的提供器
调用UserDetailService:登录逻辑
UserDetails:返回一个这个实体
Authentication:对密码校验

回答:1.用户在浏览器中输入一个URL,springsecurity会判断当前是否已经被认证(登录),如果已经认证,正常访问URL.如果没有认证
跳转到AbstractAuthenticationFilterConfigurer的loginPage属性对应的值,登录界面
2.如果URL是登录的URl,走AbstractAuthenticationFilterConfigurer中的loginProcessingUrl的执行流程,负责重新显示认证界面
3.执行登录流程时通过过滤器usernamepasswordAuthenticationFilter进行过滤,取出用户名和密码,放入到容器UsernamePasswordAuthenticationToken
中,之后交给认证管理器AuthenticationManager去调用认证提供器AuthenticationProvider.
4,由AuthenticationProvider调用自定义登录逻辑UserDetailService,返回UserDetail。


数据库优化:
优化查询语句:1.尽量使用简单的语句,避免多次嵌套和使用大量子查询
2.创建索引:为经常查询的列添加索引。索引本身就是一个文件,也要谨慎使用
3.分区:对大型数据库表,将其分成多个分区,几个分区就有几个idb文件,将同一个表中的不同行分配到不同的物理文件中。
4.表结构的优化,避免使用null值,删除不必要的列
4.使用缓存
5.避免大量数据处理,使用limit和offset来处理
使用explain分析
6,分表:将一个一个表分为多个表


对比两个object:
默认比较的是对象的引用地址,所以在整整使用的时候,需要重写equals方法。
如果重写了equals方法之后,是否可以直接拿对象在set中去重
并不能,想要在set中去重,还需要重写hashcode方法,hashcode方法返回对象的一个hashcode。
object中默认返回一个内存地址作为哈希码
java中采用哈希算法解决使用equals出现的性能问题,集合添加元素时,先调用hashcode方法,定位到此元素实际存储位置,
如果这个位置没有元素,则代表第一次存储;若有对象存在,再调用equals进行比较,相等就舍弃


深拷贝和浅拷贝
浅拷贝:前后用的是一个对象
深拷贝:创建一个新的对象或数组,将原对象的各项属性拷贝到新的,而不是引用内存地址


mysql中的锁
行锁和表锁用于控制并发访问数据库的操作,而乐观锁和悲观锁用于保证数据的一致性
表锁:开销小,加锁快,无死锁,粒度大,锁冲突概率高,并发低
行锁:开销大,加锁慢,有死锁,粒度小,锁冲突概率低,并发高
乐观锁:假设并发事务之间不会干扰,再更新的时候检查记录是否修改过
悲观锁:假设并发事务之间会相互干扰


事务隔离级别和事务传播级别
事务传播行为:当出现service方法调用另一个service方法时,这些方法都被声明式事务管理,这些方法如何进行事务管理的
1.required:如果当前有事务加入到事务中,如果没有,创建事务。默认值
2.never:必须在非事务下进行,没有事务,正常进行,有事务,报错
3.nested:必须再事务下执行,如果没有事务,新建事务;如果有事务,创建一个嵌套事务
4.requires_new“必须再事务中执行,如果没有事务,创建事务,如果有事务,把当前事务挂起,再重新新建一个事务,调用者统一提交回滚
5.supports:如果当前有事务就再事务中执行,没有事务就在非事务下执行
6.not_supported:必须再非事务下执行,如果当前有事务,就把当前事务挂起
7.mandatory:必须再事务内部执行,如果有事务,就再事务中执行,如果没有事务,报错
required,nested,reques_new,mandatory必须有事务;never,not_supported必须无事务
事务隔离级别:
脏读:事务A没有提交事务,事务B读取到事务A未提交的数据
不可重复读:事务A读取表中一行数据时,另一个事务修改这行数据,事务A读取到的数据和表中真实的数据不一致(查询一行数据,别的修改这行)
幻读:事务A对表中数据做查询全部操作,事务B向表新增一条数据,事务A读取的数据和表中不一致(查询全部,别的新增数据)
default:表示使用数据库默认的隔离级别
read_uncommitted:读未提交,脏不幻都可能
read_committed:读已提交,不幻可能出现
repeatable_read:可重复读,幻可能出现
serilalizbale:串行


reentrantlock:
1.锁实现机制:依赖AQS
2.灵活性:支持响应中端,超时,尝试获取锁
3.释放形式:必须显式调用unlock()释放锁
4.锁类型:公平锁&非公平锁
5。条件队列:可关联多个条件队列
6.可重入
syncronized:
1.锁实现机制:监视器模式
2.灵活性:不灵活
3.释放形式:自动释放监视器
4.锁类型:非公平锁
5。条件队列:关联一个
6.可重入
上述两种的区别就是自动挡和手动挡的区别
reentrantlock:
1.锁的竞争,是通过互斥量,使用cas机制来实现的
2.没有竞争到锁的线程,使用absractQueuedSynchronizer这样一个队列同步器来存储,底层是通过双向链表来实现的。当锁被释放后,
会从aqs队列里面的头部唤醒下一个等待锁的线程
3.公平和非公平的特性,主要体现在竞争锁的时候,是否需要判断aqs队列存在等待线程
4.锁的重入性;aqs里面有一个成员变量来保存当前获得锁的线程,当同一个线程下次再来竞争锁的时候,就不会去走锁竞争的逻辑,而是直接增加重入
次数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值