1.备份软件源信息 sources.list在/etc/apt目录下 cp sources.list sources.list.back 2.设置软件源信息 deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted un....
拉取镜像 docker pull mysql:5.7.40 创建文件夹 mkdir -p /hjp/mysql/5.7.40/log mkdir -p /hjp/mysql/5.7.40/data mkdir -p /hjp/mysql/5.7.40/conf 创建配置文件 vi /hjp/mysql/5.7.40/conf/custom.cnf 内容如下 [client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4 [mysqld] init_connect="SET collation_connection = utf8mb4_unicode_ci" init_connect="SET NAMES utf8mb4" character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci skip-character-set-client-handshake skip-name-resolve explicit_defaults_....
docker安装redis 拉取镜像 docker pull redis 运行容器 建立配置文件 mkdir -p /opt/mydata/redis/conf \ vi /opt/mydata/redis/conf/redis.conf 再redis.conf中填写配置信息 bind 0.0.0.0 appendonly yes requirepass redis123 运行容器 docker run -p 6379:6379 --name redis \ -v /opt/mydata/redis/data:/data \ -v /opt/mydata/redis/conf/redis.conf:/etc/redis/redis.conf \ -d redis redis-server /etc/redis/redis.conf
一、缓存 1.1 缓存穿透 1.1.1 定义 缓存穿透是指用户查询不存在的数据,mysql中查不到数据无法写入redis,导致每次查询都会落在mysql上 1.1.2 解决方案 1.1.2.1 缓存空数据 缓存空数据,数据库查询结果为空,任然把这个空结果缓存至redis {key:'查询条件',value:null} 优点:简单 缺点:消耗内存,redis和数据库可能出现数据不一致(第一次查询数据库中没有数据,在redis缓存了一个null值,然后新增了数据到数据库,此时数据库和redis中数据就不一致了,需要手动更新数据库数据到redis,增加了数据维护的复杂性) 1.1.2.2 布隆过滤器 参考布隆过滤器 - 问尤龙の时光 (wenyoulong.com) 1.1.3 代码示例 有如下接口方法,根据用户ID查询用户信息,用户id随便编一个都行 /** * 根据ID获取的用户,用于测试缓存穿透 * @param userId 用户IO * @return 用户信息 */ @GetMapping("/getById/{userId}") public String getById(@....
一、问题 最近做了一个vue项目,打包后部署到nginx,页面访问时一直停留在加载页面,浏览器调试观察到chunk开头的多个js文件加载时间超过了30s还没有加载完,js文件大小有20多Mb 二、解决方案 2.1 安装插件 执行如下命令 npm install --save-dev webpack-bundle-analyzer npm install babel-plugin-component -D 2.2 修改配置 先引入依赖 const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer') const CompressionWebpackPlugin = require('compression-webpack-plugin') 新增这两个插件,webpack-bundle-analyzer用于优化打包体积和依赖关系,compression-webpack-plugin静态资源进行 Gzip/Brotli 压缩 在configureWebpack配置项的plugins新增这两个插件配置 plugins: ....
配置插件不使用任何依赖 <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> <configuration> <mainClass>cn.com.wenyl.bs.BSBootApplication</mainClass> <!-- 你的主类 --> <executable>true</executable> <layout>NONE</layout> <includes> <include....
一、编辑网卡 点击编辑->虚拟网络编辑器 找到NAT模式的网卡记录ip 二、主机网络配置 找到NAT对应的虚拟网卡,这里的网卡名称和上一步NAT网卡名称是对应的 编辑IPV4协议 按照如下填写,这里的网段按照第一步NAT网卡默认的网段填写就好 三、虚拟机网络配置 cd /etc/sysconfig/network-scripts/ 执行ll看看自己的网卡是哪一个,我的是ifcfg-ens33 vi /etc/sysconfig/network-scripts/ifcfg-ens33 配置参考如下就可以固定虚拟机IP TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 UUID=e05f4302-e9b7-4....
一、运行环境 环境版本 mysql5.7.19 postgresql12.12 redislatest nacos2.2.2 neo4j4.2.2 Elasticsearch8.17.0 kibana8.17.0 sentinellatest 二、docker环境搭建 2.1 安装mysql mkdir /opt/docker_data/mysql/conf/ mkdir /opt/docker_data/mysql/log/ mkdir /opt/docker_data/mysql/data/ vi /opt/docker_data/mysql/conf/custom.conf 内容如下 [client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4 [mysqld] init_connect="SET collation_connection = utf8mb4_unicode_ci" init_connect="SET NAMES utf8mb4" character-set-server....
一、定义 布隆过滤器(Bloom Filter)是一种概率型数据结构,用于判断一个元素是否在一个集合中。它由 Burton Howard Bloom 在 1970 年提出。布隆过滤器的特点是空间效率高和查询速度快,但是有一定的误判率,并且一旦添加元素后无法删除。 二、布隆过滤器的工作原理 2.1 初始化 创建一个位数组(bit array),长度为 m,所有位都初始化为 0 2.2 插入元素 对于每一个要加入集合的元素,使用 k 个不同的哈希函数对该元素进行哈希,得到 k 个不同的索引位置。将这些位置上的位设置为 1 2.3 查询元素 当查询一个元素是否存在于集合中时,同样用上述 k 个哈希函数对元素进行哈希,检查所得的 k 个位置上的值是否全都是 1。如果全是 1,则认为该元素可能存在于集合中;如果有一个位置是 0,则可以确定该元素不存在于集合中 三、特点 优点 : 空间效率高:相比于其它数据结构如哈希表或二叉树,布隆过滤器占用的空间更小。 查询速度快:由于只需要计算几个哈希函数,所以查询速度非常快。 可以节省大量的存储资源,尤其是在处理大数据量的情况下。 缺点 : 存在误报(F....
一、定义 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为以下几个区域,并统称为运行时数据区 其中线程共享的区域有堆和方法区 线程不共享的区域有程序计数器、Java虚拟机栈和本地方法栈 二、程序计数器 程序计数器(Program Counter Register)是一个较小的内存空间,字节码解释器工作时就是通过改变这个计数器的值来选择下一条需要执行的字节码指令 每个线程都有一个独立的程序计数器,多线程环境下程序计数器用于跟踪每个线程执行的位置 如果线程正在执行的是一个Java方法,这个计数器记录的值是正在执行的虚拟机字节码指令的地址;乳沟正在执行的是本地native方法,这个计数器则值为空 在Java虚拟机规范中,这个内存区域是没有OutOfMemoryError情况的区域 三、栈 3.1 Java虚拟机栈 Java虚拟机栈也是线程私有的,他的生命周期与线程相同; 每个方法被执行的时候,Java虚拟机都会同步创建一个栈帧(stack frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息 栈帧是JVM栈的基本单位,每当调用一个方法时,就会为该方法创建一个新的....
一、类生命周期 1.1 加载 通过类全限定名获取它的二进制字节流 从ZIP压缩包、JAR、EAR、WAR中获取 从网络中获取,例如Web Applet 运行时计算生成,如动态代理技术 从数据库读取 从加密文件中获取 将这个字节流所代表得静态存储结构转化为方法区得运行时数据结构 在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据得访问入口 1.2 链接 1.2.1 验证 验证阶段确保加载的类的信息符合JVM规范,不会对JVM造成危害。这包括对字节码的结构、常量池中的索引、数据类型等进行检查。 文件格式验证 魔数是否是CAFEBABE 主次版本是否在虚拟机支持范围内 ...... 元数据验证 这个类是否有父类(除了java.lang.Object外,其他类都有父类) 父类是否继承了不允许被继承的类 ...... 字节码验证 确保类型转化是有效的,例如把父类对象赋值给子类数据类型就是无效的 ...... 符号引用验证 符号引用中的类、字段、方法的可访问性(private\protected\public\)是否可以被当前类访问 在指定类中是否....