【开发经验汇总】


Nginx

1. nginx + redis解决高并发问题?

nginx + redis解决高并发问题
接入层高性能缓存技术nginx+redis利器
总结:在nginx.conf中配置反向代理,将指定的请求url代理到redis服务器,并使用lua脚本查询数据。在redis服务器内部,使用lua定时器来定期更新缓存数据。

2. nginx缓存的缺点?

Nginx缓存的缺点和优点专家评价
总结:不支持url拼接参数的动态链接、不支持定期更新缓存、只能缓存响应状态码200的数据、无法自动选择存储介质。

WEB开发中常见安全漏洞分析

1. SQL注入漏洞
  • SQL注入攻击是什么?
    sql注入攻击详解(原理理解)
    总结:把SQL命令插入到WEB表单,以达到欺骗服务器执行恶意SQL的目的。
  • SQL注入防御?
    如何有效防止sql注入
    如何防止SQL注入–浅谈
    总结:使用PreparedStatement进行预编译;使用存储过程;过滤请求参数中的数据库关键字;严格限制数据库权限。
  • 为什么PreparedStatement能够解决SQL注入漏洞?
    预处理prepareStatement是怎么防止sql注入漏洞的
    SQL预编译
    总结:Statement每次执行sql都会进行编译;PreparedStatement只有在创建的时候会进行预编译,并且将’#{}‘替换为占位符’?’,在对占位符进行set值的过程中,不会再进行编译,即:即使set的参数包含or、and等Mysql关键字,也只会被当做一个普通的参数处理。
2. DDOS漏洞
  • DDOS攻击是什么?
    什么是 DDoS 攻击?
    总结:在短时间内对目标网站发起大量请求,以达到消耗目标服务器主机资源的目的。
  • DDOS防御?
    DDOS防护 ADS
    总结:购买高防服务器、DDOS清洗、通过高防IP代理源站IP、CDN加速。
3. XSS漏洞
4. CSRF漏洞
5. SSRF漏洞
  • SSRF攻击是什么?
    Web安全-SSRF漏洞
    总结:由于服务端提供了从其他服务器获取数据的功能,且没有对目标地址进行过滤和校验,而产生的漏洞。主要的危害有:
    • 对服务器内网进行端口扫描;
    • 攻击服务器内网web应用;
    • 利用file协议读取内网文件。
  • SSRF防御?
    Web安全-SSRF漏洞
    总结:
    • 验证返回信息是否合理;
    • 限制请求的端口号;
    • 禁用不需要的协议。
6. 弱口令漏洞
  • 弱口令漏洞是什么?
    【web漏洞】弱口令
    总结:系统登录口令复杂度不高,容易被暴力破解。
  • 弱口令漏洞防御?
    【web漏洞】弱口令
    总结:
    • 设置登录口令提高复杂度;
    • 验证码;
    • 限制登录口令试错频率。
7. 文件上传漏洞
8. 短信被盗刷漏洞

消息队列

1. RabbitMQ基础?

RabbitMQ消息队列常见面试题总结
RabbitMQ快速入门(详细)
Springboot 整合RabbitMq ,用心看完这一篇就够了
RabbitMQ 中的消息会过期吗?
总结:RabbitMQ是用erlang语言编写的、实现了AMQP协议的消息中间件。

高级搜索

1. solr与es相比较?

Elasticsearch与Solr优缺点比较
ES面试基础知识要点
elasticsearch面试必考(亲身经历的问题)
总结:

  • solr对实时搜索不友好,而es实时搜索性能很高;
  • solr需要借助zk实现分布式高可用,es默认支持分布式;
  • solr社区强大,有apache支撑,es相对较为弱小。

数据库

1. redolog、undolog是什么?

MySQL日志系统:redo log、binlog、undo log 区别与作用
总结:

  • redolog:
    • 存储引擎层日志;
    • 当Mysql服务器执行更新请求时,会优先在redolog中记录更新后的值,再更新内存的数据,因而即时Mysql服务器崩溃,也能从redolog中恢复数据,因此redolog是crash-safe的;
    • redolog的大小固定,当它用完后就会重头再写。
  • binlog:
    • Mysql Server层日志;
    • 逻辑日志,记录原始逻辑,非crash-safe;
    • 追加写,一页用完继续用另一页。
  • undolog:
    • 保存事务发生前的mvcc版本,用于回滚。
2. 数据库添加索引为什么能加快查询速度?

数据库添加索引为什么能加快查询速度

REDIS

1. redis缓存满了,继续写入数据会怎么样?

redis缓存满了,继续写入数据会怎么样?

2.Redis为什么这么快?

Redis为什么这么快

3.Redis事务、持久化、发布订阅?

Redis事务、持久化、发布订阅

4.Redis的数据恢复?

Redis的数据恢复

Java基础

1. 还在用Executors创建线程池?小心内存溢出?

还在用Executors创建线程池?小心内存溢出

2. Java线程池中的各个参数如何合理设置?

Java线程池中的各个参数如何合理设置

3. Synchronized是如何实现可重入的?

Synchronized详解(可重入、Monitor原理等)
jvm:ObjectMonitor源码
总结:synchronized锁会被虚拟机编译成monitorEnter、monitorExit指令,monitorEnter会去尝试获取对象锁(对象头的运行时数据中的锁信息,指向ObjectMonitor对象)。执行monitorEnter时,该线程会被放入到ObjectMonitor的_entryList中,接着该线程通过CAS尝试将ObjectMonitor的_owner设置为当前线程,若设置成功,则判断之前的_owner是否就是当前self线程,若是,则可重入值+1。

4. Java中重写equals方法为什么要重写hashcode方法?

Java中重写equals方法为什么要重写hashcode方法
总结:当向HashMap、HashSet等散列集合中存放数据时,优先会根据hashCode计算key的存储位置,若重写equals后不重写hashCode,会导致equals比较相同的对象用hashCode比较却不同。

Springcloud全家桶

1. Hystrix的几种模式的使用?

Hystrix的几种模式的使用

2. Eureka工作原理?

Eureka工作原理
【SpringCloud基础】Eureka实现原理
总结:

  • eureka的核心组件:
    • eureka server:注册中心、服务剔除、状态同步、自我保护机制
    • eureka client:服务注册、服务续约、服务下线、服务调用
  • eureka工作原理:
    • eureka server启动,等待eureka client进行服务注册。如果eureka server开启了集群模式,还会通过replication进行状态同步;
    • eureka client启动,到eureka server进行服务注册,每隔30s进行一次服务续约。
    • 若eureka server90s内没有收到eureka client的心跳检测,则对其进行服务剔除。若单位时间内,大量的eureka client被服务剔除,则eureka server开启自我保护机制。当eureka client服务续约正常后,eureka server关闭自我保护机制;
    • eureka client会定时全量或增量同步注册表的信息,并缓存到本地。进行服务调用时,优先从本地缓存表获取调用信息,若获取失败,则从eureka server注册表同步信息,再缓存到本地;
    • eureka client实例正常退出时,会向eureka server发送取消请求进行服务下线,eureka server将该实例标记为下线状态。
3. spring eureka 服务实例实现快速下线快速感知快速刷新配置解析?

spring eureka 服务实例实现快速下线快速感知快速刷新配置解析
总结:
eureka server默认有二级缓存ReadWriteMap、ReadOnlyMap,当有client进行服务注册或者服务续约时,会修改ReadWriteMap。当有client进行服务查询时,会查询ReadOnlyMap。ReadWriteMap的数据会定时同步到ReadOnlyMap。
eureka client进行服务调用时,优先从本地缓存查询服务,调用失败再从server查询服务。
因此server、client都有可能存在延迟。

  • 提高服务续约的频率,默认30s,可以改成5s;
  • 提高服务剔除的频率,默认90s,可以改成15s;
  • 提高ReadWriteMap与ReadOnlyMap同步的频率,默认30s,可以改成10s;
  • 提高client刷新本地缓存的频率,默认30s,可以改成10s。
4. SpringMVC:如何保证Controller的并发安全?

SpringMVC:如何保证Controller的并发安全
总结:spring controller默认是单例的,是线程不安全的

  • 避免在controller中定义成员变量,若必须使用,则定义ThreadLocal;
  • 可以将controller声明为多例模式 @Scope(“prototype”)。
5. Mybatis常见面试题总结?

Mybatis常见面试题总结

Mysql

1. MySQL主从复制原理?

MySQL主从复制原理

2.数据库分库分表的原则?

若单库QPS成为性能瓶颈,则优先分库,否则分表;
若表的数据类过大,则优先水平分,否则垂直分;
垂直分的原则:

  • 冷热:优先将查询频率高的字段拆分到一张表,频率低的放另外一张表;
  • 字段长度:优先将超长字段放一张表,其余字段放一张表。
3.优化服务器设置?

《高性能MySQL》读书笔记--优化服务器设置
总结:

  • Mysql默认配置大多数情况下都是正确的,建议不要修改默认配置,将精力更多聚焦于索引、表设计上;
  • 使用自定义的初始文件,不要使用mysql默认的my-default.ini;
  • 修改缓冲池的大小,比较通用的做法是修改为系统内存的75%;
  • 修改线程缓冲,避免频繁创建销毁线程;
  • 修改日志缓冲区的大小,通常为1-8M;
  • 修改Mysql并发数,即线程池线程数,公式为:CPU内核数 * 2 * 磁盘数;
  • 调整max_connections数量;
  • 优化排序,当查询中待排序的数据大于max_length_for_sort_data时,采用two-pass算法,否则采用single-pass算法。
4.MySQL学习之——锁(行锁、表锁、页锁、乐观锁、悲观锁等)?

MySQL学习之——锁(行锁、表锁、页锁、乐观锁、悲观锁等)
mysql innodb死锁问题详解
总结:

  • innodb死锁处理:对于mysql内部死锁,innodb通常能自动检测到,然后释放一个事务的锁后回滚,以确保另一个事务能正确执行;对于涉及mysql外部的死锁,通常需要设置锁等待超时参数 innodb_lock_wait_timeout来解决。
  • 行锁:锁冲突概率低,锁粒度小,死锁;
  • 页锁:锁冲突概率、锁粒度在行锁和表锁之间,死锁;
  • 表锁:锁冲突概率高,锁粒度大,不会产生死锁。+
  • MyISAM锁:
    • 表锁:表共享读锁和表独占写锁;
    • Lock tables tb_user read local;
      Select sum(id) from tb_user ;
      Unlock tables;
  • InnoDB锁:
    • 行锁:共享锁、排他锁;
    • select * from tb_user LOCK IN SHARE MODE;
    • select * from tb_user FOR UPDATE;
    • Mysql InnoDB行锁是通过给索引字段加锁实现的,因此只有通过索引字段来检索数据才能触发行锁,否则就是触发表锁。Oracle行锁是通过给数据块中对应数据行加锁实现的行锁。

架构

1. 如何处理高并发场景?

面试官:如何处理高并发场景?
处理高并发的六种方法
总结:

  • 客户端:
    • 限制请求的频率,如:验证码、请求倒计时。
  • 云端:
    • CDN;
    • ELB + nginx + redis;
  • 网关:
    • 限制接口请求次数;
    • 服务降级;
    • 拒绝访问;
  • 微服务:
    • 拆分子系统;
    • 缓存;
    • 消息队列;
  • 数据库:
    • 分库分表;
    • 读写分离。
2. tomcat 性能调优?

tomcat 性能调优
Tomcat 调优及 JVM 参数优化
总结:

  • Connector连接器配置NIO,修改对并发数的支持;
  • 配置Executor线程池;
  • 调整虚拟机参数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值