Jdk1.8新特性
参考博客:JDK1.8 新特性 参考博客:JDK1.8新特性实战JDK1.8新特性 Lambda表达式 函数式接口 方法引用和构造器调用 Stream API 接口中默认方法和静态方法 新时间日期API
Redis的缓存击穿、穿透、雪崩
Redis详解(十二)—— 缓存穿透、缓存击穿、缓存雪崩 缓存穿透缓存和数据库中都没有的数据,可用户还是源源不断的发起请求,导致每次请求都会到数据库,从而压垮数据库。 解决方式: 业务层校验: 对于参数明显错误的直接拒绝; 查询不存在数据设置短时间过期; 布隆过滤器; 缓存击穿Redis中一个热点key在失效的同时,大量的请求过来,从而会全部到达数据库,压垮数据库。 解决方式: 热点key 永不过期; 定时更新;热点key过期时间1h,设置59分钟时进行更新; 互斥锁 缓存雪崩Redis中缓存的数据大面积同时失效,或者Redis宕机,从而会导致大量请求直接到数据库,压垮数据库。 解决方式: 单机环境,防止redis宕机可使用redis集群(哨兵、集群); 设置key过期时间的有效均匀分布; 数据预热,提前将可能使用数据保存缓存中;
Java秒杀系统设计
《进大厂系列》系列-秒杀系统设计 面试了十个应届生九个都是秒杀系统,你确定你们那是秒杀? Url动态化秒杀系统中如何动态生成下单随机URL 个人理解: 前端调用下单接口之前先调用一个获取md5的接口 未到秒杀时间开始不得响应 接口不得重复提交,一个唯一标识的用户只能指定时间获取一次 调用下单接口url地址pathValue拼接当前md5实现调用接口地址动态化 目的:防止秒杀活动开始前,下单地址被提前获取进而造成利用脚本刷单情况发生。 前端资源静态化CDN这种对前端资源缓存,加速访问 前端按钮控制 默认置灰,不可按。调用时候调用接口查询北京时间然后开启 时间到了,也可以延时1秒左右按钮正常可点击 Redis 可以使用Redis集群 使用lua脚本实现redis的cas操作,避免redis库存更新在并发情况出现问题 数据库乐观锁提高效率示例语句 update table set count = count -1,version = version +1 where goodsid=1 and count > 0 and version =...
Java多线程
java多线程使用详解与案例,超详细 Lambda表达式方式启动线程public static void main(String[] args) { new Thread(()->{ System.out.println("开始了一个线程"+new Date()); }).start(); } Java多线程使用的三种方式 继承Thread类,并重写run方法 实现Runnable接口,重写run方法 实现Callable<返回值>接口,重写call方法 继承Thread类public class ThreadDemo02 extends Thread{ @Override public void run() { System.out.println("你好呀"); } public static void main(String[] args) { ...
隐藏SSH版本号
隐藏SSH版本信息 查看SSH的版本信息sshd -v 使用nmap外部扫描#安装yum install -y nmap; #扫描指定ip的22端口nmap -p 22 -sV -v -n 192.168.116.129 截图中是已修改后SSH版本信息 X.X 备份文件、修改SSH版本信息查看sshd的文件位置 which sshd 备份 cp /usr/sbin/sshd /usr/sbin/sshd.bak 替换#格式语法:sed ‘s/原字符串/替换字符串/g’ sed -i 's/OpenSSH_7.4/OpenSSH_x.x/g' /usr/sbin/sshd 查看修改后的SSH的版本信息 【注】在替换版本的时候,如果替换为任意字符,可能会导致 core dump, 具体原因不明,可以参考上面的做法,隐藏具体版本信息即可。
科学上网V2ray搭建教程
参考博客 部署v2ray服务bash <(curl -L https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh) 安装成功截图 配置v2ray文件vi /usr/local/etc/v2ray/config.json 添加如下内容: 注意:port与id均为自定义的 { "inbounds": [ { "port": 10086, //服务器监听端口 "protocol": "vmess", "settings": { "clients": [ { "id":...
面试复盘-网友分享-20230517
某手国际化-后端开发面经 JVM的内存模型 堆怎么管理内存 垃圾回收算法 跨代引用问题怎么解决 每次回收都要从GC ROOTS开始吗? 垃圾回收器 CMS回收过程 G1和CMS区别 Redis用的什么数据类型 Hash底层结构 JVM垃圾回收 MySQL索引模型 为什么用B+树 联合索引在B+树如何构造的 覆盖索引知道吗? 某康威视 Redis的架构 Reids的线程模型 堆Syncchronize的理解 锁升级 某节 进程和线程的通信方式 进程和线程的区别 Java事项多线程的方式 Java的ThreadLocal Volatile和锁是什么? Thread中用过锁吗? Volatile不保证原子性的原理? Java异常体系怎么设计的?异常分类? Spring框架是为了解决什么问题?IOC和AOP是什么? Spring里的事务用过吗?原理? 事务的传递? Session和Cookie的区别? 网站安全问题? Session的生命周期如何管理? 登录如何实现?JWT? Token怎么生成? ...
Linux中VIM使用技巧
VIM命令行模式跳转首位/末尾 vim命令行模式跳至行首/行尾 跳转首位 $ 或者 0 跳转末尾 A
MySQL数据库事务
事务必须满足4个条件 A 原子性 C 一致性 I 隔离性 D 持久性 原子性一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。 一致性在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。 隔离性数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。 持久性事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。 MYSQL 事务处理主要有两种方法用 BEGIN, ROLLBACK, COMMIT来实现 BEGIN 开始一个事务 ROLLBACK...
单例模式用法
Java设计模式单例模式(Singleton)用法解析_java 懒汉式(线程不安全)当多个访问者同时访问的时候很有可能创建多个对象。之所以叫懒汉式,是因为这种写法是使用的时候才创建,起到了懒加载Lazy loading的作用,实际开发中不建议采用这种写法 public class LazySingleton { private static LazySingleton instance; private LazySingleton(){ } public static LazySingleton getInstance(){ if( instance!=null ){ instance = new LazySingleton(); } return instance; }} 线程安全的懒汉式(线程安全)public class LazySingleton { private...