1.redis了解吗,是解决什么问题的,redis的应用?
Redis 是一种基于内存的数据库,常用的数据结构有string、hash、list、set、zset这五种,对数据的读写操作都是在内存中完成。因此读写速度非常快,常用于缓存,消息队列、分布式锁等场景。
2.mysql慢查询
(1)首先需要开启慢查询,set global slow_query_log=‘ON’; 指定慢查询日志SQL执行时间阈值。(默认是10s,我设置成了1s)。
(2)查看慢查询日志,里面会有一些信息:查询时间、扫描行数、具体的sql语句等。
(3)使用explain分析慢查询,
type(查询类型):all、index(遍历索引树)、range(检索给定范围的行,使用一个索引)
rows(行数):不精确的扫描行数
key(使用的索引):使用的索引
Extra:(额外说明):using index(索引覆盖)、using where(回表)
(4)优化:看看是不是索引失效、使用覆盖索引、分库分表
3.索引失效场景
避免模糊查询%开头、not in改用 not exists、避免where左侧表达式函数运算、索引列做了计算、函数、类型转换操作、联合索引要能正确使用需要遵循最左匹配原则、OR 前的条件列是索引列,而在 OR 后的条件列不是索引列(union代替or)
4.数据库事务
(1)特性:
原子性:要么全做,要么全不做。一致性:从一个正确状态变成另一个正确状态。
隔离性:事务之间相互不干扰。持久性:对数据库的修改永久。
(2)并行事务错误:脏读:一个事务读到了另一个事务未提交的数据
不可重复读:事务1读之后事务2又改了,事务1又读了。两次结果不一样。
幻读:事务1读之后事务2又改了,事务1又读了。两次的数量不一样
5.表太大怎么处理
分库(存在不同的数据库)分表(拆表)
垂直分库可以简单理解为根据业务分库。垂直分表就是根据字段分表。可以采取的策略是将经常访问且短的字段拆成一个表,长或者不经常访问的放一个表。
水平:水平分库就是将单库中的某个表存在不同的数据中,可以定义一定的规则来决定存那个数据库,比如hash操作。
分库分表工具:sharding-jdbc等
6.session和cookie的区别
session存在服务器,cookie存在浏览器。session比cookie大,cookie通常是4MB,sesion收到服务器内存限制。ccokie可以设置过期时间,也可以设置会话cookie,关闭浏览器就自动删除。session在客户端在最大无活动等待时间内没有任何请求就失效。
7.经典的登录流程思路
(1)基于 Session 的方案中,登录成功后,服务端将用户的身份信息存储在 Session 里,并将 Session ID 通过 Cookie 传递给客户端。后续的数据请求都会带上 Cookie,服务端根据 Cookie 中携带的 Session ID 来得辨别用户身份。
(2)基于 Token 的方案中,服务端根据用户身份信息、签发时间、有效期等生成 Token,发放给客户端。客户端收好 Token,并在之后的数据请求中带上 Token,服务端接到请求后校验并解析 Token 得出用户身份。
使用API网关验证token、或者拦截器验证token、或者前端每次请求时都发送验证token的请求。
在单点登录的场景下,token将通过url回传给应用。
用户携带token请求登出,登出接口会对token清除,返回401,客户端自动跳转到登录界面。
8.求一个字符串的最长无重复字符子字符长度
public static int lengthOfLongestSubstring(String s) {int ans=0;HashSet set=new HashSet<Character>();int slow=0,fast=0;int len=0;while (fast<s.length()){if(!set.contains(s.charAt(fast))){set.add(s.charAt(fast));fast++;len=fast-slow;ans=len>ans?len:ans;}else {while (slow<=fast&&set.contains(s.charAt(fast))){set.remove(s.charAt(slow));slow++;len=fast-slow;}}}return ans;}
9.sso单点登录,单点登录是什么意思、怎么实现?
单点登录就是在一个系统完成认证后,其它的系统无需登录就能可以访问。
有系统A、B和sso认证中心。当系统A第一次登录时,重定向到SSO并完成认证,返回凭证ticket。再用户访问系统B时,都会去sso系统验证这个ticket。
可以通过cookie、token方式共享凭证。
10.64位操作系统和32位操作系统是什么意思
- 32位和64位可以指CPU、操作系统或应用软件,只有三者都匹配才能发挥效果。
- 32位的CPU一次可以处理32位数据,64位的CPU一次可以处理64位数据,所以64位的CPU数据处理能力更强。
- 32位的操作系统最多支持4G的内存,64位的操作系统可以支持更多的内存,所以64位的操作系统内存寻址能力更强。
- 32位的操作系统只能运行32位的软件,64位的操作系统可以运行32位和64位的软件,所以64位的操作系统软件兼容性更好。