理论(后半部分有实操详解) 哲学思考 易经思维:向各国人讲述一种动物叫乌龟,要学很久的各国语言,但是随手画一个乌龟,全世界的人都能看得懂。 道家思维:努力没有用(指劳神费心的机械性重复、肢体受累、刻意行为),要用心(深度思考、去感悟、透过现象看本质)才有用。 举例:类似中学做不出来的几何题的底层原理:不是不知道xx定理或公式(招式),而是不知道画辅助线的思路(内功)。 总结:万事万物、用道家思维思考本质与规律,用易经思维从众多信息中简化模型练出来的内功,叫觉悟(内力),而知识仅仅是外功(招式)。 做研发的,可能距离成功一步之遥,别因为一叶障目而放弃。 消息队列与消息中间件 消息队列:一种...

  yThMa20bw7iV   13天前   31   0   0 PHP

源码理解思维的提升 分享一些个人见解。Laravel里面的某些概念,就像魔术一样,看起来很厉害,当知道魔术怎么变的,就会认为也不过如此。所以不必感觉Laravel里有些概念难以理解。 应当抛除被框架约束思维的枷锁,用PHP设计的角度去思考,关注大概,而不是在在框架层面逐行磨叽。毕竟源码那么多,越是底层变量越多,越抽象,频繁的调用和变量指向,看到天亮也看不明白。 PHP设计的角度去思考怎么理解:对于Laravel源码,代码很优雅,很工程化,很正规,方便扩展,这是优点,坏处就是抽象,好比垃圾桶里的垃圾都要摆放好,太过于工程化的设计,会给写松散业务逻辑的开发者带来困惑。举个例子,Laravel里面的...

  yThMa20bw7iV   26天前   21   0   0 PHP

破除困境带你飞 能遇上高并发的,基本都是有点规模的公司,小公司基本都是CRUD。想去一线城市跳槽,想去有高并发的公司,但是没有高并发经验,没有高并发的经验,就去不了高并发的公司,去不了这样的公司,就没有高并发经验,前狼后虎两头堵的困境,干就完了。 一语道破 超卖问题是属于并发安全问题,在并发情况下出现数据一致性的问题的表现,据有代表性。这是个概率问题,不是一定发生或一定不发生。核心问题就两个: 并发引起的资源竞争却没有加锁,导致运行时序不可控(MySQL超卖)。 多个读写操作存在间隙,导致并发请求通过间隙插队引发的时序不可控问题(Redis超卖)。 解决方案也很简单,上锁或者保证无间隙执行...

  yThMa20bw7iV   27天前   22   0   0 PHP

温馨提示 不同的组件需要不同的docker配置(例如容器卷,端口,环境变量等),使用你懂得工具看hub.docker.com官方手册。 不要死记硬背,因为这种东西不是天天要写,过段时间就忘了,很容易引起挫败感。 Dockerfile或者Docker-compose的编写,可以安装一些编辑器插件辅助编写。 非官方中文文档镜像地址:https://dockerdocs.cn Dockerfile 官方文档:https://docs.docker.com/reference/dockerfile/dockerfile-reference 极简概括:用于构建Docker镜像的文本文件,包含一些指...

  yThMa20bw7iV   2024年04月15日   37   0   0 Linux

极简概括 官网:https://www.docker.com利用比虚拟机更加轻量级的容器化虚拟技术,能够低成本的把当前环境快速打包或在新环境部署相同子环境的运维工具,基于Go语言实现,跨平台(支持Linux、Windows、MacOS)。通俗类比:无论什么牌子什么价位的主机,都可以利用同一个的Windows镜像文件安装相同的系统,同时也支持对操作系统的不同进度进行打包,方便安装到另一台设备上。 解决问题 环境统一:本地开发环境、测试环境、生产环境不一致,本地测试没问题,一到线上就出故障。Docker可以打包应用程序及其所有依赖项,确保在任何环境中都能以相同的方式运行。 降低运维成本:Dock...

  yThMa20bw7iV   2024年04月14日   43   0   0 Linux

镜像分层的简单直观体现 在执行dockerpull时,会发现多个Pullcomplete字样,就能体现分层,如果是一个文件,只会有一个Pullcomplete。 dockerpullredis Usingdefaulttag:latest latest:Pullingfromlibrary/redis a2abf6c4d29d:Alreadyexists c7a4e4382001:Pullcomplete 4044b9ba67c9:Pullcomplete c8388a79482f:Pullcomplete 413c8bb60be2:Pullcomplete 1abfd3011519:Pull...

  yThMa20bw7iV   2024年04月14日   45   0   0 Linux

布隆过滤器 极简概括 英文名称BloomFilter,用于判断一个元素是否在一个大数据集合中,如果检测到存在则有可能存在,如果不存在则一定不存在。Redis官网对于布隆过滤器的说明:https://redis.io/docs/data-types/probabilistic/bloom-filter/ 使用场景 防止缓存穿透:用于快速判断某个商品数据是否存在于缓存中,如果存在,则执行下游流程,如果不存在,在此处直接拦截,避免下游流程引发的算力消耗,很适合对抗黑客刷接口的行为。 网络爬虫:在爬取网页时,可以用布隆过滤器来判断一个URL是否已经被访问过,从而避免重复爬取相同的页面。 拼写检查器:...

  yThMa20bw7iV   2024年04月09日   39   0   0 PHP

Sphinx 官方文档:http://sphinxsearch.com/docs/sphinx3.html 极简概括:由C编写的高性能全文搜索引擎的开源组件,C/S架构,跨平台(支持Linux、Windows、MacOS),支持分布式部署,并可直接适配MySQL。 解决问题:因为MySQL的like%keyword%不走索引,且全文索引不支持中文,所以需要借助其它组件。适用于不经常更新的数据的全文搜索。 同类产品:ElasticSearch、Solr、Lucene、Algolia、XunSearch。 使用思路:发送给Sphinx关键字,然后Sphinx返回id给PHP,PHP再调用MySQ...

  yThMa20bw7iV   2024年03月29日   46   0   0 PHP

概念 PHP使用分布式锁,受语言本身的限制,有一些局限性。 通俗理解单机锁问题:自家的锁锁自家的门,只能保证自家的事,管不了别人家不锁门引发的问题,于是有了分布式锁。 分布式锁概念:是针对多个节点的锁。避免出现数据不一致或者并发冲突的问题,让每个节点确保在任意时刻只有一个节点能够对公共资源进行操作,单机的锁只能够单节点使用,多节点防不住。 核心原理:分布式锁的核心原理,就是在每个节点执行时,先去一个公共的地方判断是否持有锁,如果有锁就说明资源被占用,没锁就可以持有该资源。 通俗举例:多个部门,开部门会议,需要占用会议室的位置,发现会议室门关着,不知道里面有没有人,此时门外面有个牌子说明是会议...

  yThMa20bw7iV   2024年03月23日   48   0   0 PHP

置顶说明 严格来说,所谓人云亦云的接口幂等性,大部分场景是要求接口防重或数据幂等,而不是接口幂等,很多人都搞混了。举例:后端做了支付防重,用户对单一订单重复支付,再次支付不是提示支付成功(接口幂等是要求多次请求返回的结果一致),而是提示请勿重复支付。很多时候是防重是保证MySQL表数据的幂等,而不是接口幂等。 接口幂等与接口防重 接口幂等:对于一个接口进行多次请求,服务器响应的结果一致。 接口防重:对于一个接口进行多次请求,服务器不会产生额外的副作用,或产生业务逻辑意料之外的情况。 常规方案 前端实现方案(多用户防重) 耳熟能详的防抖:用户点击按钮后,可将按钮置灰几秒钟,一方面提示用户不能...

  yThMa20bw7iV   2024年03月23日   17   0   0 PHP

前置概念 无并发的解决方案 一些小型项目,或极少有并发的项目,这些策略在无并发情况下,不会有什么问题。 读数据策略:有缓存则读缓存,然后接口返回。没有缓存,查询出数据,载入缓存,然后接口返回。 写数据策略:数据发生了变动,先删除缓存,再更新数据,等下次读取的时候载入缓存,或一步到位更新数据后直接更新缓存。 以上这种方案,有个高大上的名字,叫CacheAsidePattern。 并发情况下的分布式缓存一致性问题 并发:无论是Java的多线程,还是PHP的多进程(默认的单线程),用户量或请求量一上来,就可能有并发问题,正确的应对并发,保证数据不出错,显得尤为重要。 缓存:任何组件(不仅是Re...

  yThMa20bw7iV   2024年03月20日   27   0   0 MySQL

近期看到了一个前阿里资深开发的学术分析视频:高并发情况下,一个事务内有更新操作还有查询操作,那是先更新好,还是先无锁查询好?仅70秒的视频,深感学问太深,但是海哥讲的有待补充,于是写下了这篇文章,作为补充。 鸣谢:前阿里资深开发极海Channel的技术分享。 先说答案 这是个开放性的问题,必须看业务场景,抛开业务场景谈架构设计,都是耍流氓。 场景1:如果update语句的参数操作依赖于查询操作,那么必须先查询,再更新,否则update语句的参数都凑不齐。 场景2:如果update语句的参数操作不依赖于查询操作,但两个操作的是一张表,业务强制要求select获取的数据必须是最新的,则也需要先更...

  yThMa20bw7iV   2024年03月15日   69   0   0 MySQL

声明测试表,供文章案例使用 CREATETABLE`cs`( `id`int(10)unsignedNOTNULLAUTO_INCREMENT, `num`int(10)NOTNULLDEFAULT'0', PRIMARYKEY(`id`) )ENGINE=InnoDBAUTO_INCREMENT=1DEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_unicode_ci; 事务的分类 显示事务: readwrite:读写事务,默认模式,表示当前事务可以读写数据。 readonly:只读事务,很少用,表示当前事务不能修改数据。 withconsistentsnap...

  yThMa20bw7iV   2024年03月10日   81   0   0 MySQL

本文说明的是MySQL锁,和操作系统或者编程语言的锁无关。 概念 作用:在并发情况下让数据正确的读写。优点:并发情况下对数据读写可控,防止出错。缺点:降低性能、增加难度。 分类 数据操作类型划分 读锁(共享锁、S锁) 写锁(排它锁、独占锁、X锁) 粒度划分 表级锁 S锁、X锁 意向锁 自增锁 元数据锁 行级锁 记录锁 间隙锁 临键锁 插入意向锁 页级锁 严格度划分 悲观锁 乐观锁 加锁方式 隐式锁 显示锁 其它 全局锁 死锁 测试用表 CREATETABLE`cs`( `id`int(10)unsignedNOTNULLAUTO_INCREMENT, `num1...

  yThMa20bw7iV   2024年03月10日   52   0   0 MySQL

注:以下所有内容均为自己总结的笔记,涉及底层原理,难度对标18K-25K薪资,偏理论,不保证百分百准确性。 索引查找快速的原理? 创建索引的本质是排序,排好序之后再找数据就快了。对于B+tree索引,B+tree对数据排序后采用多路查找思想的非线性查找方案,减少了大量的查询次数,从而避免多次磁盘io,进而快速找到结果。 为什么推荐用自增id做主键? 自增id直观,且不用刻意维护这个字段,减少工作量,还能避免主键更新引起的页分裂。举例说明页分裂:数据是存在页上的,页1存储id为1、2、5的数据,如果没有设置自增,如果突然新增了id为3、4的数据,页1无剩余空间存储,就需要将页1数据进行拆分,页1...

  yThMa20bw7iV   2024年03月09日   42   0   0 MySQL

SlowLog 简介 用于记录执行时间超过指定值的SQL语句的详细信息,多用于调试和监控。 配置 因为开启会略微影响性能,所以默认没有开启,所以需要配置。 查看是否开启 showvariableslike'%slow%'; +---------------------+-------------------------------------+ |Variable_name|Value| +---------------------+-------------------------------------+ |slow_launch_time|2| |slow_query_log|OFF| ...

  yThMa20bw7iV   2024年03月09日   30   0   0 MySQL

什么是MySQL的页? 页是指存储引擎使用的最小的数据存储单位。当MySQL执行读取或写入操作时,是以页为基本单位来进行操作的。即使读写一条数据,MySQL也会按页操作。MySQL的存储引擎会将数据分成多个页,并根据需要将这些页加载到内存中进行处理。通过使用页来组织数据,MySQL能够更高效地管理存储空间,减少读取数据时的硬盘I/O次数,从而提高数据库的性能。 MySQL页的组成? 页头:页头包含了关于该页的一些元数据信息,例如页类型、页号、页大小等。页头还可能包含用于管理该页的一些控制信息。 记录:记录是页中存储的实际数据内容,记录可以包含行数据、索引信息等。记录的组织方式和格式会根据具体...

  yThMa20bw7iV   2024年03月08日   57   0   0 MySQL

推荐:SQL语句执行顺序相关问题。 MySQLServer架构 分层概述 MySQLServer架构可抽象为3层。 连接层:验证用户名密码,认证成功后,获取当前账号的权限并缓存,并分配TCP连接池和线程池资源。 处理层:实现核心的处理功能。 存储层:将处理后的数据高性能安全的写入磁盘,或从磁盘中正确的读取。 模块构成与执行顺序 连接层:提供多个线程用于客户端和服务器交互,连接层包含连接池与线程池。 连接池:MySQL可以有多个客户端进行连接,为了解决TCP连接频繁创建销毁引起的性能损耗,所以建立了TCP连接池,采用长连接模式复用TCP连接。 线程池:MySQL采用多线程的方式运行,My...

  yThMa20bw7iV   2024年03月08日   77   0   0 MySQL

索引相关 类型隐式转换大坑 字段filed1是varchar类型,且加了索引,如果wherefiled1=123;type可能是all,因为123是数字类型,mysql内部会用函数做隐式转换,用了函数,索引就失效了。 大数据深度分页,用主键 selectfield1,field2fromtablelimit100000,10; selectfield1,field2fromtablewhereid>100000limit10; 避免使用MySQL函数 MySQL内置了很多函数,使用函数可能导致索引失效,尽量让MySQL只做简单的增删改查。 避免类型的隐式转换 varchar等字符串...

  yThMa20bw7iV   2024年03月08日   49   0   0 MySQL

个人认为,90%的公司的数据体量和并发量压根用不上从服务器,结合Redis,一台性能强劲的云MySQL服务器,做好日常备份。足够了。 概念 一个MySQL主(Master)服务器上的数据自动复制到至少一个的MySQL从(Slave)服务器的过程,利用binlog,主服务器上的数据更改会被自动地同步到从服务器,以保持至少两个服务器上数据的一致性。注意:客户端请求MySQLServer,写主还是写从,读主还是读从,决定权在客户端。 解决了什么问题? 负载均衡:一台机器读写可能扛不住,多个服务器过来帮忙,主负责写,从负责读。 读写分离:起到了数据备份的作用,鸡蛋不要放到一个篮子里。 高可用性:一台...

  yThMa20bw7iV   2024年03月07日   72   0   0 MySQL
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~