字节一面面经

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位的操作系统软件兼容性更好。
  • 26
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值