2021面试复习

2021-10-08面试内容

  1. 进程与线程的区别
    进程相当于一个系统里面运行的应用,应用运行过程中需要多个任务组成,而这些任务就是在线程中运行。
    区别:1)同一个进程内的所有线程共享该进程的地址空间以及资源,但是每个进程间的地址空间以及资源时相互独立的;2)一个进程崩溃后,保护模式下其他进程不受影响,但是一个线程崩溃后,同一进程内的所有线程也会死掉;3)进程切换时消耗大,效率高
    参考链接:https://blog.csdn.net/weixin_43258908/article/details/89417917?utm_source=app&app_version=4.15.0

  2. 如何优化sql
    1)选取最适用的字段属性,尽可能减少定义字段宽度,尽量把字段设置NOTNULL
    2)使用连接(JOIN)来代替子查询
    3)适用联合(UNION)来代替手动创建的临时表
    4)事务处理
    5)锁定表、优化事务处理
    6)使用外键,优化锁定表
    7)使用索引
    8)优化查询语句

  3. sql中如何查看sql的性能
    1)使用explain sql语句,判断type字段
    2)set statistics io on,显示有关由Transact-SQL 语句生成的磁盘活动量的信息
    3)set statistics time on,可查看读取次数以及cpu运行时间

  4. redis的负载均衡:多个服务器平均分担负载

  5. workerman的指令
    1)开启:start -d
    2)停止:stop
    3)重启:restart
    4)平滑重启:reload
    5)查看状态:status
    6)查看连接状态(需要Workerman版本>=3.5.0):connections
    参考链接:http://doc.workerman.net/install/start-and-stop.html

10-08复习

web安全

  1. XSS攻击
    即跨站脚本攻击,顾名思义,就是在web网页中注入非法运行的html或者js脚本,打开网页时运行脚本后窃取用户信息。
    解决方法:
    (1) CSP:添加白名单,在服务器中指定可加载的外部资源或网页
    (2) 转义字符:提交表单信息时将数据进行检测并转化规定的类型,然后将特殊符号进行转义,保存数据库时使用addlashe()进行转义;如果是富文本时可使用htmlspecialchars()将内容实体化
    (3) HttpOnly Cookie:Web应用程序在设置cookie时,将其属性设为HttpOnly,就可以避免该网页的cookie被客户端恶意JavaScript窃取,保护用户cookie信息

  2. CSRF
    即跨站请求攻击,就是用户在已登录安全网站A的情况下进入另一个攻击网站B,然后B窃取到用户所在A的登陆cookie进行非法请求。
    解决方法:
    (1)SameSite:将cookie属性设置为SameSite,表示 Cookie 不随着跨域请求发送,但部分浏览器不兼容
    (2)Referer:发送请求时,浏览器的头部一般都会包含Referer信息,通过检查http包头referer的值是不是这个页面,来判断是不是CSRF攻击。但是当域名时https时,是不会包含Referer信息的,所以并不是完全安全的
    (3)Token:登陆成功后返回一个随机生成的token,并存到cookie中,发送请求时携带到服务器并进行判断是否跟服务器所存储的一致
    (4)验证码:在处理一些核心步骤(如转账)时进行验证码的判断

  3. 点击劫持
    即攻击者在网页中注入iframe透明显示在网页的顶部,当用户点击网页时就会跳转窃取数据。
    解决方法:
    (1)X-FRAME-OPTIONS:是一个 HTTP 响应头,在现代浏览器有一个很好的支持。这个 HTTP 响应头 就是为了防御用 iframe 嵌套的点击劫持攻击。
    该响应头有三个值可选,分别是:DENY,表示页面不允许通过 iframe 的方式展示;SAMEORIGIN,表示页面可以在相同域名下通过 iframe 的方式展示;ALLOW-FROM,表示页面可以在指定来源的 iframe 中展示
    (2)JavaScript 防御:就是当通过 iframe 的方式加载页面时,攻击者的网页直接不显示所有内容了。

10-11复习内容

缓存

《redis相关原理及面试官由浅到深必问的15大问题(高级)》https://blog.csdn.net/zlc3323/article/details/80836881

  1. redis与memcached的区别
    (1) 存储位置:memcached存储在内存中,而redis一开始存储在内存中,但是若发现内存的使用量超过了某个阈值就是触发swap操作,将数据持久化到磁盘中
    (2)数据结构:memcache的数据结构较为单一,而redis不止支持k/v类型的数据,还支持list、set、hash等数据结构的存储,而且redis的数据操作更好一些啊,较少的网络IO次数
    (3)数据备份:redis采用master-slave模式的数据备份
    (4)持久化:redis依赖快照(RDB方式,实现非实时持久化)进行持久化,aof(实现实时持久化)增强了可靠性的同时,对性能有所影响;memcache不支持
    (5)单点问题:redis,依赖客户端来实现分布式读写;主从复制时,每次从节点重新连接主节点都要依赖整个快照,无增量复制,因性能和效率问题,
    所以单点问题比较复杂;不支持自动sharding,需要依赖程序设定一致hash 机制。
    一种替代方案是,不用redis本身的复制机制,采用自己做主动复制(多份存储),或者改成增量复制的方式(需要自己实现),一致性问题和性能的权衡

Memcache本身没有数据冗余机制,也没必要;对于故障预防,采用依赖成熟的hash或者环状的算法,解决单点故障引起的抖动问题。

MongoDB

链接:https://www.jianshu.com/p/cf0c616e6189
mongodb与mysql区别:https://www.cnblogs.com/1488boss/p/10754290.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值