首页 文章 精选 留言 我的

精选列表

搜索[技能退化],共7427篇文章
优秀的个人博客,低调大师

mysql技能梳理

这几天看完了 即客时间的MySQL实战45讲。又梳理了一遍自己的MySQL知识 事务 不管是什么数据库,事务都是要考虑的。 一般情况下开发注重的是隔离性,如幻读,脏读,不可重复读。然后就是MySQL是怎么实现的。 知道事务的基本概念,那么就该知道数据库锁是什么个意思,然后有些时候死锁,数据库的卡顿,长时间没有响应都是因什么而起 索引和查询 MySQL 设计思想是”如果内存够,就要多利用内存,尽量减少磁盘访问“,而B+树就是能拥有高效查询减少磁盘访问次数的存储结构。基本上纵观MySQL的知识点,基本上都是遵循这个思想。 索引的结构 学习索引,要知道索引是什么样子的结构,为啥用B+,不用数组,不用哈希表,不用二叉树。一是为了减少io操作,二是结构不行,哈希只适合等值,数组插入性能不行,不过用来做静态存储还是可以的。 键 主键: 叶子节点存的是整行的数据。 非主键:叶子节点存的是主键的值 明白了键的存储方式后,查询的时候有一项优化叫覆盖索引,目的就是避免回表,实际操作是联合索引,使用联合索引就要知道最左匹配原则,然后就是知道在查询时,多条件的时候,怎么使用索引的 索引的创建和维护 创建时需要考量的有索引的长度,索引的使用场景,如果是联合索引还需要考虑怎么利用最左匹配原则来少创建索引 需要考虑长度的一般都是字符串索引,太长的是创建不了的。如果太长了也需要创建,可以考虑指给前缀创建索引,如果字符串类似身份证号似的,前缀都差不多一样,就需要换个思路,例如倒过来,使用hash值等 索引随着数据的删除或新增会产生空洞的,有时候会发现删了半个表的数据了,但磁盘空间没减少多少,这是因为索引的空间没有释放。针对这些,我们可以通过重建索引来解决 现在很多业务都是逻辑删 SQL 关于数据库的基本概念和存储的方式理解后,我们就可以进一步去分析理解一条SQL的执行效率是因何而定的 order by 排序的时候有个用来排序的空间sort_buffer, 先说对无索引的排序,MySQL会根据内存的大小决定使用全字段排序还是rowid排序,rowid就是只在sort_buffer 对需要排序的的字段+主键进行排序,然后根据主键进行回表取回所有数据。全字段排序就是全字段都在sort_buffer里,排序完直接给结果,就不用回表了。因为回表有磁盘访问,所以咱们尽量避免。 刚入行时,前辈就说,使用mybatis在select时别用*,需要什么字段就写什么。原因是传输的数据多,io消耗大,确实,但不仅消耗io,还有内存呢。 优化 使用覆盖索引,查询的条件以及order by的条件能联合起来,这样查的时候基本上就是有序的,可以避免排序 覆盖索引简直是万能,但是,索引长度越长,占用的空间也就越大。所以还是需要慎重的。 join 很多公司优化最多的恐怕就是join。 用小表作为驱动表,小表就是where后行数小的表。有时候我们会用left join ,但实际上有时候并不是左边的就是驱动表,哪个为驱动表是优化器来选择的。不过我们还是可以根据业务来预估的。 join的时候,也有个空间用来join,join_buffer。 避免全表扫描,尽管我们有查询条件,但在没有索引的情况下必然是全表扫描,然后两个表都是全表扫描,然后再匹配一下,最简单的join语句,也需要计算 tableA.size*tableB.size次。表越大,查询时间约久。 换种思路 使用临时表呀,当两个非常大的表join时,把要查询的东西插入临时表,再从临时表查询,也许会更快。 使用前,要先测试 使用hash join,数据库中是没有hash join,这个操作是在业务代码里。java举例来说,多个表join时,可以分别根据条件查出list,转成HashMap,然后遍历匹配就好啦~ group by 引用课程里的原话: 如果对 group by 语句的结果没有排序要求,要在语句后面加 order by null; 尽量让 group by 过程用上表的索引,确认方法是 explain 结果里没有 Using temporary 和 Using filesort; 如果 group by 需要统计的数据量不大,尽量只使用内存临时表; 也可以通过适当调大 tmp_table_size 参数,来避免用到磁盘临时表; 如果数据量实在太大,使用 SQL_BIG_RESULT 这个提示,来告诉优化器直接使用排序算法得到 group by 的结果。 count Count 是需要扫表的,而对于有索引的字段来说,min,max不需要,因为最大值最小值就是索引的边界嘛 我们有时争议 count(0),count(字段)还是count(*)。 如果不需要跳过null的情况,还是用 \*的好,这个MySQL是有优化的。总结其说的,count(*)和coun(0)类似,> count(主键) > count(普通字段) 参考 https://time.geekbang.org/column/article/72775 网上还有其他理论的,https://www.cnblogs.com/-flq/p/10302965.html 但一个给出了原因,第二个只说了结论,我更倾向于前者说的 语句的执行 更新语句 update t set a=1 where id=2; 基本上操作都是在内存里,所以查询的时候内存如果有也是直接取内存的。当需要从数据库查的时候,有个merge的过程,从charge_buffer 到磁盘。 在这里我们要重点了解下redolog ,MySQL不会直接把更新操作更新到磁盘上,是把更新操作都记录在redolog里,攒的差不多了,再一起更新到磁盘。redolog和binlog的二次提交也是MySQL的事务的重要操作。 当MySQL宕机时,redolog也是恢复数据的重要一环。 查询语句 select xx,yy from t where xx =1 order by yy; 查询缓存的在8.0版本开始删除了。 日志 MySQL能够回滚到任何一个时刻的状态,这是真的。这个需要从binlog讲起。binlog里记录了所有的操作记录,有3种格式,statement,row,mixed。statement基本上跟执行的SQL一致,row则包含当时的所有字段的值,mixed就是混合的状态。考虑数据库的恢复以及主从同步的情况,可能需要设置成mixed的模式。 三种模式的讲解参考 : https://www.cnblogs.com/rinack/p/9595370.html 性能 基本上用好索引后,大部分优化都解决了。但除此之外,还有一些关于锁的,关于IO的。 例如大规模的删数据,修改表结构,都会产生锁,当并发量的时候,更是执行时间看不见尽头... 偶尔什么也没做,也会发现数据库卡一下。这可能是刷新脏页。脏页就是内存和磁盘不一致的页面,在适当的场景需要同步merge。例如redolog写满了,内存不足了,还有2个场景基本不用考虑MySQL空闲了,MySQL关闭了。刷脏页的速度也跟脏页的比例,写磁盘的速度,不过写在流行的SSD就提速了很多,很多服务器IOPS已经不再是瓶颈。 刷新脏页频率可以通过参数设置,从而达到调优的效果,有点像java的GC,不同的是一个是持久化,一个是清理内存。emmm,前者在持久化也清理内存! 高可用 主从,主主互备 在还是个萌新的时候,就搞过主从,是直接按照网上的文档弄的,当时知其然不知其所以然。现在总结下,这个思想类似算法的分而治之然后再收集合并。纲领是这样,做起来很复杂。思路基本上2种 使用代理,类似 mycat 系统直连,在代码里配置上主从的数据库地址,然后拦截器根据语句属性自动切换 各有优缺点,第一种开发上省事了,但运维的难度还是有的,第二种开发上麻烦点,但现在成熟的代码库挺多的,但灵活度上可能不如第一种,例如切换主从,切换数据库... 但不管那种方式,都有主从同步延时的风险,这个可能是因为网络,可能是因为从库硬件不行,也有可能使用了大事务。总之,能预防,有监控,发生问题,有解决方案。 做笔记嘛,还是思维导图感觉好用

优秀的个人博客,低调大师

10大IT技能

在看一篇文章:IT Skills Development: Top 10 Essential IT Skills,谈谈自己的看法。 http://technet.microsoft.com/en-us/magazine/ff944586.aspx 1. Windows PowerShell 这个是针对Windows的管理员来说的,如果让我定义的话会是Linux。 2. Server Virtualization 这个同意,的确很重要。 3. Failover Clustering 这个在购买的设备中都有详细的安装说明,或者供应商的技术人员会帮忙搞定,这是基本的服务。 4. SAN Management 同上 5. Compliance 这个的确非常重要,保证服务质量,项目管控,这是IT的基础。 6. Recovery Techniques 数据是越来越重要了,但是基本上这个靠硬件实现,如磁带机。 7. Traffic Management 数据流向及安全性越来越重要。 8. IPv6 对于这个,还是没有普及,但不知相对IPv4它的设置上会有什么不同,这个对于IT属于基础架构范畴,可以透明对待。 9. Conferencing 这个我是感觉越来越重要了,协同工作是大势,随着全球化,我们需要在不同地方协同一起工作,相关方面工具的使用对提高员工工作效率有很大作用。 10. Mobile Computing 随着智能机的普及,手机实现了大部分电脑的功能。对手机提供支持,熟悉几个主流的系统Android,iOS等,对IT人来说也很重要。 本文转simmy51CTO博客,原文链接:http://blog.51cto.com/helpdesk/759362,如需转载请自行联系原作者

优秀的个人博客,低调大师

模切企业数字化困境:通用 ERP 为何频频退化为 Excel 台账

在模切行业数字化转型过程中,一个十分普遍的现象值得从业者警惕:企业斥资采购 ERP 系统,实施上线之后,ERP 仅仅承担数据存档功能;销售报价、卷材库存、刀模管理、生产成本核算依旧依靠大量 Excel 手工表格维护。订单、领料、分切出库的数据依靠复制粘贴跨表格流转,形成 “系统一套账,Excel 一套业务账” 的双账并行局面。

优秀的个人博客,低调大师

jianying-editor技能安装教程

我用AI自动剪了一条35秒短视频,全程没碰剪映时间线 在这里插入图片描述 前几天有个朋友跟我吐槽: "剪映是真好用,但每次导入素材、拖时间线、加字幕、配BGM,一套操作下来,比拍视频还累。" 我太懂这种感觉了。 直到我最近翻到一个开源小工具——jianying-editor,它能让你用Python脚本,一句话就把素材、字幕、配音、BGM全塞进剪映草稿里。 指令 1:豆包你好,帮我安装 Jianyi

优秀的个人博客,低调大师

技能篇:docker的简易教程

虚拟机技术每家公司发展到一定规模都必须考虑的,更好的环境隔离,更好的事故排查,更好的服务部署 docker的原理 docker更换阿里源 docker容器的相关命令 Dockerfile文件编写 docker镜像的相关命令 1 docker的原理 Docker 利用Linux 中的核心分离机制,例如Cgroups,以及Linux的核心Namespace(名字空间)来创建独立的容器。一句话概括起来Docker就是利用Namespace做资源隔离,用Cgroup做资源限制,利用Union FS做容器文件系统的轻量级虚拟化技术。Docker容器的本质还是一个直接运行在宿主机上面的特殊进程,看到的文件系统是隔离后的,但是操作系统内核是共享宿主机OS,所以说Docker是轻量级的虚拟化技术 docker 镜像分层 docker 容器,理解为一个或多个运行进程,而这些运行进程将占有相应的内存,相应的CPU计算资源,相应的虚拟网络设备以及相应的文件系统资源。而 docker 镜像,则像一个未运行的软件包,为 docker 容器的运行提供文件资源。 docker 镜像是分层的。启动镜像时,一个新的可写层会加载到镜像的顶层。这一层通常称为"容器层",之下是"镜像层",可能存在多个层。容器层可以读写,容器所有发生文件变更写都发生在这一层。镜像层只允许读取,read-only 在容器层的文件增删操作,命令安装,都会被记录下来。我们可以通过 commit 命令来创建一个新的镜像 2 docker 更换阿里源 # vi /etc/apt/sources.list ~~更新源 # sudo apt-get clean # sudo apt-get update ~~ 安装vim # apt-get install vim 复制代码 ubuntu 18 的阿里镜像文件。使用下面的数据替换原 sources.list 里的数据 deb http://mirrors.aliyun.com/ubuntu/ trusty main multiverse restricted universe deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main multiverse restricted universe deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main multiverse restricted universe deb http://mirrors.aliyun.com/ubuntu/ trusty-security main multiverse restricted universe deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main multiverse restricted universe deb-src http://mirrors.aliyun.com/ubuntu/ trusty main multiverse restricted universe deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main multiverse restricted universe deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main multiverse restricted universe deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main multiverse restricted universe deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main multiverse restricted universe 复制代码 3 docker容器的相关命令 run 实例化容器 创建一个新的容器并运行:docker run [options] image [command]。image 可以是镜像ID 也可以是仓库名+Tag名:repository[:tag] options 常用参数 -i 以交互模式运行容器,通常与 -t 同时使用 -t 为容器重新分配一个伪输入终端,通常与 -i 同时使用 -d 后台运行容器,并返回容器ID --name=<name> 为容器指定一个名称 -p 指定端口映射,格式为:主机(宿主)端口:容器端口 --net="bridge" 指定容器的网络连接类型,支持bridge/host/none/container: 四种类型 -e ="v" 设置环境变量 复制代码 示例 [root@lwl]# docker run -it -p 80:80 --name mynginx nginx:latest /bin/bash root@b8573233d675:/# ~~ 如果容器的启动命令是依赖伪终端执行,则需要 -it,如 ubuntu:14.04 镜像 ~~ 没有依赖伪终端执行的启动命令,可去掉-it,因为-d 参数会直接返回容器ID [root@lwl]# docker run -it -d -p 80:80 --name mynginx nginx:latest 315cc38afc2f06abb5a2fbb075ebca16455367b2de685cf0c5ba828ab62dd5a1 [root@lwl]# 复制代码 start、stop、restart 启动与停止 ~~ 启动已被停止的容器 。 container 可以是容器名 也可以是容器ID # docker start container ~~ 停止运行中的容器 # docker stop container ~~ 重启容器 # docker restart container 复制代码 ps 容器查询 // 列出容器 # docker ps [-options] -a :显示所有的容器,包括未运行的。 -f :根据条件过滤显示的内容。 --format :指定返回值的模板文件。 -l :显示最近创建的容器。 -n :列出最近创建的n个容器。 --no-trunc :不截断输出。 -q :静默模式,只显示容器编号。 -s :显示总的文件大小 // 相当于在 container 容器里使用 top命令 # docker top container 复制代码 rm 删除容器 # docker rm container 复制代码 cp 文件传输 本机和 docker 容器之前的文件传输 ~~ 复制本地目录 srcPath 到 容器 container 的目录 destPath # docker cp srcPath container:destPath ~~ 复制容器 container 的目录 srcPath 到本地目录 destPath # docker cp container:destPath srcPath 复制代码 exec 在运行的容器中执行命令 docker exec [options] container command -d :分离模式: 在后台运行 -i :即使没有附加也保持STDIN 打开 -t :分配一个伪终端 ~~ 在容器 mynginx 中以交互模式执行容器内 /root/run.sh 脚本 # docker exec -it mynginx /bin/sh /root/run.sh ~~ 在容器 mynginx 中开启一个交互模式的终端 # docker exec -it mynginx /bin/bash 复制代码 logs 获取容器的日志 docker logs [options] container -f 跟踪日志输出 --since 显示某个开始时间的所有日志 -t 显示时间戳 --tail 仅列出最新N条容器日志 [root@lwl]# docker logs -f mynginx 192.168.239.1 - - [10/Jul/2021:16:53:33 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36" "-" 2021/07/10 16:53:33 [error] 5#5: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 192.168.239.1, server: localhost, request: "GET /favicon.ico HTT .... 复制代码 4 Dockerfile文件编写 # docker build -f /path/to/a/Dockerfile 复制代码 // 1 FROM:指定基础镜像,必须为第一个命令,格式: FROM <image> FROM <image>:<tag> // 2 MAINTAINER: 维护者信息 格式: MAINTAINER <name> // 3 ENV:设置环境变量 格式 // 4 ARG:用于指定传递给构建运行时的变量 格式: ARG <name>[=<default value>] // 5 WORKDIR:工作目录,类似于cd命令 格式: WORKDIR /path/to/workdir ENV <key>=<value // 6 ADD:将本地文件添加到容器中,可以访问网络资源,类似wget ADD <src>... <dest> // 7 COPY:功能类似ADD,但是是不会自动解压文件 // 8 RUN:构建镜像时执行的命令 格式 RUN <command> // 9 CMD:构建容器后调用,也就是在容器启动时才进行调用 CMD command param1 param2 (执行shell内部命令) // 10 ENTRYPOINT:配置容器,使其可执行化 ENTRYPOINT command param1 param2 (shell内部命令) 复制代码 Dockerfile 示例 # 基础镜像 FROM centos # 维护者信息 MAINTAINER tianfeiyu #ENV 设置环境变量 ENV PATH /usr/local/nginx/sbin:$PATH #ADD 文件放在当前目录下,拷过去会自动解压 ADD nginx-1.8.0.tar.gz /usr/local/ ADD epel-release-latest-7.noarch.rpm /usr/local/ # RUN 执行以下命令 RUN rpm -ivh /usr/local/epel-release-latest-7.noarch.rpm RUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && yum clean all RUN useradd -s /sbin/nologin -M www # WORKDIR 相当于cd WORKDIR /usr/local/nginx-1.8.0 RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make install RUN echo "daemon off;" >> /etc/nginx.conf # CMD 运行以下命令 CMD ["nginx"] 复制代码 5 docker 镜像的相关命令 镜像查看列举:docker images 镜像搜索:docker search <imageName>;imageName 是 repository[:tag] 的模糊词 拉取:docker pull repository[:tag] 删除单个镜像:docker rmi 镜像ID 或者docker rmi repository[:tag] 给镜像打别名(标签):docker tag oldRepository[/:oleTag] newRepository][/:newTag] # docker tag ubuntu:15.10 lwl/ubuntu:v3 复制代码 构建镜像 ~~ 根据 Dockerfile 构建镜像 # docker build -t repository[:tag] dir # docker build -t lwl/ubuntu:v1 . options 参数 --build-arg=[] 设置镜像创建时的变量 -t 镜像的名字及标签,通常 name:tag 或者 name 格式 -f 指定要使用的Dockerfile路径 复制代码 ~~ 根据正在运行的 container 容器 构建镜像 # docker commit [options] container repository[:tag] options 参数 -a :提交的镜像作者; -c :使用Dockerfile指令来创建镜像; -m :提交时的说明文字; -p :在commit时,将容器暂停 复制代码 推送:docker push repository[:tag] 欢迎指正文中错误 创作不易,如果对大家有所帮助,希望大家点赞支持,有什么问题也可以在评论区里讨论😄~ 如果你觉得这篇文章对你有点用的话,麻烦请给我们的开源项目点点star: http://github.crmeb.net/u/defu 不胜感激 ! 来自 “开源独尊 ” ,链接: https://ym.baisou.ltd/post/798.html

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册