垃圾收集器与底层三色标记算法
垃圾收集算法
分代收集理论当前虚拟机的垃圾收集都采用分代收集算法,这种算法没有什么新的思想,只是根据对象存活周期的不同将内存分为几块。一般将java堆分为新生代和老年代,这样我们就可以根据各个年代的特点选择合适的垃圾收集算法。
比如在新生代中,每次收集都会有大量对象(近99%)死去,所以可以选择复制算法,只需要付出少量对象的复制成本就可以完成每次垃圾收集。而老年代的对象存活几率是比较高的,而且没有额外的空间对它进行分配担保,所以我们必须选择“标记-清除”或“标记-整理”算法进行垃圾收集。注意,“标记-清除”或“标记-整理”算法会比复制算法慢10倍以上
标记-复制算法为了解决效率问题,“复制”收集算法出现了。它可以将内存分为大小相同的两块,每次使用其中的一块。当这一块的内存使用完后,就将还存活的对象复制到另一块去,然后再把使用的空间一次清理掉。这样就使每次的内存回收都是对内存区间的一半进行回收。
标记-清除算法算法分为“标记”和“清除”阶段:标记存活的对象, 统一回收所有未被标记的对象(一般选择这种);也可以反过来,标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象 。它是最 ...
Nacos入门使用教程
拉取配置在nacos中新建完配置后,那作为一个SpringBoot应用我们如何来获取配置呢?
Java SDK首先,我们可以直接使用Nacos提供的Java SDK来获取配置。
首先在项目中,添加如下依赖:
123456<dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>2.1.1</version></dependency>
然后可以使用如下代码来获取nacos中的配置:
123456789101112131415try { String serverAddr = "localhost:8848"; String dataId = "user.properties"; String group = "DEFAULT_GROUP"; Properties properties = ...
Docker学习
docker工作原理
环境隔离
手工快速部署
工作原理
docker的整体分为四个部分:远程镜像仓库、本地镜像、本地容器、docker;跟运行应用一样理解:github远程代码,本地克隆代码,运行应用,idea;远程镜像仓库是云端的镜像仓库,供用户上传、下载需要的镜像,默认是dockerhub,也可以换成其他仓库;本地镜像是下载好的镜像,或自己打包好的镜像,镜像可以理解为容器的模板,也可以理解为电脑安装操作系统的光盘;本地容器是真正运行的实例,容器是根据镜像创建的,容器被创建后,即可跟Linux系统一样独立使用。docker软件是连接以上三个部分的基座,也是运行容器的引擎。docker是可以跨平台安装的,官方有详细的安装步骤说明,包括基于Linux、Unix的系统、Windows等。
所以一般相同镜像可以跨平台使用,其中Windows的docker存在一些限制。
docker镜像docker镜像名称是两部分组成的,用冒号隔开。一是镜像名、二是tag版本,比如: mysql:8.0值得一提的是,不同tag版本的镜像是完全独立的,技术上是不依赖关联的,更多是业务上的关联。
如m ...
抓狂!!github又连不上了,来款GitHub加速神器
每次访问github的时候,有没有遇到过以下图片情况:
1.FastGithub地址:https://github.com/dotnetcore/FastGithub
github加速神器,解决github打不开、用户头像无法加载、releases无法上传下载、git-clone、git-pull、git-push失败等问题。
1 写在前面
fastgithub不具备“翻墙”功能,也没有相关的计划
fastgithub不支持Windows7等已被发行方停止支持的操作系统,并且也不会主动提供支持
fastgithub不能为您的游戏加速
fastgithub没有主动在github之外的任何渠道发布
2 部署方式双击运行FastGithub.UI.exe
3 软件功能
提供域名的纯净IP解析;
提供IP测速并选择最快的IP;
提供域名的tls连接自定义配置;
google的CDN资源替换,解决大量国外网站无法加载js和css的问题;
4 证书验证4.1 gitgit操作提示SSL certificate problem需要关闭git的证书验证:git config --global h ...
有了FFmpeg,以后不需要付费视频剪辑了
ffmpeg安装1.官网下载:http://ffmpeg.org/
2.解压并进入bin目录,可以看到这三个文件
3.设置环境变量
点击“系统属性->高级系统设置->环境变量->系统变量”,选择“Path”条目,点击“编辑->新建”,把第一步的bin文件夹路径复制粘贴进去,然后点击确定即可。
输入命令“ffmpeg –version”,输出一下信息即安装成功!
1ffmpeg -i xx.mp4 #查看xx视频文件信息
痛点:无损压缩视频无损压缩以下命令能解决:
1ffmpeg -y -i xx.mp4 -c:a copy -c:v libx264 -profile:v high -r 30 -crf 30 -s 720x1080 xx-out.mp4
针对以上问题,我的解决思路如下:1、手机播放端一般不需要这么高分辨率,降低720p;2、帧率30fps也可以适当降低,降低到22~25都可以;3、码率压缩,选用-crf固定码率比压缩/-b:v最高码率压缩方式都可以;4、视频编码h264(main)可以调整到h264(high);以上 ...
揭秘MySQL索引:数据结构与算法
在MySQL数据库中,索引是一种重要的数据结构,用于加快数据库查询速度。本文将详细介绍MySQL中的索引数据结构,以及聚集索引、聚簇索引、稀疏索引的区别和原理。同时,我们将讨论自增主键的重要性,最左前缀优化原则,联合索引原理及底层数据结构,以及在千万级别大表上如何进行索引优化。
一、索引数据结构MySQL使用B树(B-Tree)作为基本的索引数据结构。B树是一种平衡的多路搜索树,能够有效地支持查找、插入和删除操作。MySQL支持的索引类型还包括哈希索引和位图索引等。
索引数据结构
二叉树:单边增长的倾斜问题,变相为链表,查找效率低,与全表扫描差别不
红黑树:大数据量情况下,高度不可控
B-Tree :非叶子节点存储数据,IO磁盘检索的时候交互多,效率变低
Hash表:不支持范围查询,只能精准匹配
1.1.RBTree-红黑树普通的二叉查找树在极端情况下可退化成链表,此时的增删查效率都会比较低下。
1.2.RBTree-红黑树普通的二叉查找树在极端情况下可退化成链表,此时的增删查效率都会比较低下。
1.3.B-tree的特征
叶节点具有相同的深度,叶节点的指针为空
所有索引元素 ...
猫抓(cat-catch)以及ffmpeg 的应用
1.痛点:看到喜欢的视频怎么快速保存下来 假如通过录频软件保存下来,每个电脑只能录频一个视频,效率低!
2.猫抓下载猫抓是一款浏览器的插件,每个页面都可以把视频扒下来,支持chrome、firefox、edge。
浏览器插件安装:🐴Chrome
https://chrome.google.com/webstore/detail/jfedfbgedapdagkghmgibemcoggfppbb
🦄Edge
https://microsoftedge.microsoft.com/addons/detail/oohmdefbjalncfplafanlagojlakmjci
居然没办法在线下载插件,禁止获取!!!
🦊Firefox
https://addons.mozilla.org/addon/cat-catch/ 😂我很荣幸和uBlock有一样的待遇 需非国区IP访问
单独下载安装:📘Chrome/Edge等Chromium内核浏览器 源码加载方法
https://github.com/xifangczy/cat-catch/releases 下载 So ...
Explain详解与索引优化
Explain工具介绍使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈,在 select 语句之前增加 explain 关键字 ,MySQL会在查询上设置一个标记,执行查询会返回执行计划的信息,而不是执行这条SQL
注意:如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中
Explain分析示例
参考官方文档:https://dev.mysql.com/doc/refman/5.7/en/explain-output.html
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859示例表:DROP TABLE IF EXISTS `actor`;CREATE TABLE `actor` (`id` int(11) NOT NULL,`name` varchar(45) DEFAULT NULL,`update_time` datetime DEFAULT NULL ...
Mysql8以及5.7centos安装
1.Mysql 5.7 安装参考步骤卸载MariaDB在CentOS中默认安装有MariaDB,是MySQL的一个分支,主要由开源社区维护。
CentOS 7及以上版本已经不再使用MySQL数据库,而是使用MariaDB数据库。
如果直接安装MySQL,会和MariaDB的文件冲突。
因此,需要先卸载自带的MariaDB,再安装MySQL。
1.1 查看版本:
1rpm -qa|grep mariadb
1.2 卸载
1rpm -e --nodeps 文件名
1.3 检查是否卸载干净:
1rpm -qa|grep mariadb
安装mysql1.下载mysql 5.7
1[root@localhost ~]# wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz
检查是否本地已经安装了mysql
1rpm -qa | grep mysql
卸载以前的mysql
1rpm -e 已经存在的MySQL全名
2.解压文件
1[root@localhost ~] ...
Hexo|butterfly搜索引擎优化(SEO)
1.安装插件12npm install hexo-generator-baidu-sitemap --savenpm install hexo-generator-sitemap --save
修改站点配置文件
123456url: https://blog.hihahoo.com# 站点地图sitemap: path: sitemap.xmlbaidusitemap: path: baidusitemap.xml
hexo g , hexo s 后,可以访问 localhost:4000/sitemap.xml 查看站点地图。
2.提交百度收录查看站点是否被收录。
1site:https://blog.hihahoo.com
登录百度搜索资源平台,添加站点信息
通过上图的验证码对网站的所有权验证,建议选择验证码方式,直接修改主题配置文件
12345site_verification: # - name: google-site-verification # content: xxxxxx - name: baidu-site-verification co ...