- 博客(140)
- 资源 (2)
- 收藏
- 关注
原创 spring---@Pointcut表达式
cn.javass包及所有子包下IPointcut前缀类型的的以test开头的只有一个参数类型为java.util.Date的方法,注意该匹配是根据方法签名的参数类型进行匹配的,而不是根据执行时传入的参数类型决定的。任何一个以接受“传入参数类型为 java.io.Serializable” 开头,且其后可跟任意个任意类型的参数的方法执行,args指定的参数类型是在运行时动态匹配的。任何带有一个参数的方法,且传入的参数类型是有一个泛型参数,该泛型参数类型是HashMap的基类型;将不匹配,必须使用“* *(
2025-01-23 15:43:26
962
原创 淘宝架构演化
LAMP(Linux+Apache+MySQL+PHP)标准架构,初期采用拿来主义,只具备基本功能。数据库:读写分离,MyISAM存储引擎2003年5月—2004年1月。
2024-11-25 10:31:37
812
原创 编程软件---git
git add . (空格+ 点) 这是最常用的命令,表示当前目录所有文件,不小心就会提交其他文件。git commit -m’xxx’ 这是最常用的提交命令,表示将add的内容提交。git commit 的意思是提交文件到版本库,只有add之后才能commit。git add 如果添加了错误的文件的话,怎么撤销?git commit 如果想撤回怎么办?git add 的意思增加文件到版本库。
2024-11-18 17:35:27
458
原创 常用命令集
而有的软件必须修改注册表的注册值;甚至有的软件有依赖服务,注册值是无法修改的,只要电脑启动,依赖服务自启,注册值便不能修改,例如浏览器。但是,我是因为目录有空格而修改的,但是实际发现,C盘里的文件夹不就有空格吗,比如:C:\Program Files (x86),可见,windows是接受空格的,那我这就有点脱裤子放屁了。
2024-11-18 17:33:40
621
原创 架构系列---高并发
年轻的时候看到文章说到百万并发总是感慨万千,虽然很多文章都是标题上有两个字,但是也不妨碍我对这些的憧憬,到底怎么样才能扛百万并发呀?这系统该多么牛逼呀但是接触多了高并发的系统,再系统学习这方面知识后 ,你就会发现 : 百万并发确实牛皮,但是也没有那么神秘。虽然有不少技术点,但是思路其实不难。核心要点 :不论多大的流量,其最终的目的都是对流量进行分流,即负载均衡。文章效果 :能对流量分发和负载均衡有一个全面的理解,但是细节方法的使用无法提供高并发的应对方案:分而治之。
2024-11-04 15:01:57
1291
原创 Redis系列---常见问题
这个涉及到redis的删除机制:Redis里面如果有大量的key,怎样才能高效的找出过期的key并将其删除呢,难道是遍历每一个key吗?所以,不会立即删除,因为删除key时肯定是主服务来删除(因为redis是单线程的),所以当他在执行删除指令的时候,他就无法进行其他的操作,立即删除会影响性能;这里说明一下,Redis是单线程的,所以一些耗时的操作会导致Redis卡顿,比如当Redis数据量特别大的时候,使用keys * 命令列出所有的key。redis的并发量远比mysql要大,因为它没有io操作。
2024-10-31 18:14:36
1207
原创 Redis系列---数据管理
性能开销:在一些特定操作中,如按得分范围查询(ZRANGEBYSCORE)或根据排名进行范围查询(ZRANGE),操作的复杂度为O(log(N) + M),其中N是集合的大小,而M是返回的小集合大小。redis中的过期时间是单独存储的,Hash结构,field是内存地址,value是过期时间,保存了所有key的过期描述,在最终进行过期处理的时候,对该空间的数据进行检测, 当时间到期之后通过field找到内存该地址处的数据,然后进行相关操作。因此,在存储较大规模的数据时,内存开销可能会显著增加。
2024-10-31 17:18:35
1306
1
原创 微信开发心得
首先:微信业务由前端来驱动,后端是服务于前端的,提供各种必须参数。其次,微信业务体系中只有两种授权,用户授权和公众号授权。当钱相关的 额度和频率 无法满足自己的业务需求时,自己本地使用积分进行提现存储,也是个不错的方案,即引入业务钱包系统。微信红包或者零钱都是同步接口,微信会在第一时间返回结果,成功/失败,成功就是肯定成功,但是失败中有一种特殊情况,叫做未知,未知的情况下需要轮循获取最终结果,但是未知时大概率会最终成功。因此可以将未知当做成功处理,然后轮循发现失败时再回滚。微信中重要的五个返回值。
2024-10-30 18:07:26
946
原创 问题排查思路
如果线上出现了问题,我们更多的是希望由监控告警发现我们出了线上问题,而不是等到业务侧反馈。所以,我们需要对核心接口做好监控告警的功能。如果是业务代码层面的监控报警,那我们应该是可以很快地定位出是哪儿的问题,毕竟告警逻辑都是我们写的嘛。如果是服务器资源/所依赖的中间件告警,那我们可能就要花点时间去排查啦。不管怎么样,无论是系统告警还是是业务侧反馈系统或者接口出了问题。我们要想想在近期有没有发布过系统,如果近期发布过系统,判断能不能立马回滚到上一个版本,恢复系统平稳正常运行(在线上环境下,可用性是相当重要
2024-10-30 13:41:06
244
原创 行业事故记录
通过这次故障我们深刻认识到,语雀作为一款服务千万级客户的文档产品,应该做到更完善的技术风险保障和高可用架构设计,尤其是面向技术变更操作的“可监控,可灰度,可回滚”的系统化建设和流程审计,从同 Region 多副本容灾升级为两地三中心的高可用能力,设计足够的数据和系统几余实现快速恢复,并进行定期的容灾应急演练。只有这样,才能提升严重基础设施故障时的恢复速度,并从根本上避免这类故障再次出现。14:07,数据存储运维团队收到了健康系统的报警,然后开始定位问题。15:10 评估新方案,开始执行。
2024-10-29 14:41:42
399
原创 屠龙之人终成恶龙
我亲爱的玩家,我听见了背后你们凄厉的哀嚎,可是资本总在前方对我妩媚微笑啊。失败!继续下一个失败!就在此时,大量的游戏研发团队正在走向失败,闭上眼睛想象一下这个画面,然后睁开眼睛看看周围。它正发生在你的身边吗?在2006年,国内有超过60款自主研发的网络游戏面世,最后活下来的并能够盈利的,不超过15款。不用怀疑这一点:超过75%的项目都直接失败了或远未达到预期!在竞争日益激烈的中国网游市场中,这个比例甚至还在提高。大盘大盘新出炉还冒着热气的游戏,等不到大规模宣传,就在各种级别的内部测试中无声无息地被倒进
2024-09-25 15:55:12
1084
原创 Redis系列---Redission分布式锁
两者都是阻塞加锁, 前者会一直阻塞,相应的该方法不存在返回值,因为无意义;后者可以传入一个等待时间,等待时间内持续阻塞,相应的该方法存在返回值,因为要确认是否成功加了锁。根据业务场景自己判断使用哪种锁,二者其实相似,trylock就是lock的进阶,加了一个等待时间而已。无论是redission还是redis的setNx,只要是锁,都必须有加锁和释放锁两个动作,二者缺一不可,并且需要把释放锁放到final中,这样可以保证锁一定被释放。然而,虽然看门狗机制设计得很好,但在某些极端情况下,仍然可能出现死锁。
2024-09-20 11:07:29
1312
原创 优化---代码重构
伴随着需求的大量迭代没有人可以在最初就预料到到一个程序最后会变成什么样子。所以在一个程序非常混乱,补丁无数,难以维护时,重写便是最好的重构。当然重写也是最彻底的重构,但是重写是一件耗时耗力且在用户层面难以感知到的操作,所以时时刻刻的重构远优于一次彻彻底底的重写。对于一个成熟的程序来说进行不间断的重构是必要的。重构的目的就是让程序不断保持-易维护易扩展。
2024-07-07 17:41:02
570
原创 JAVA系列---HttpServletRequest
在代码中通过注解注入HttpServletRequest的方式,拿到的其实并不是真正的 HttpServletRequest,而是一个Spring项目启动时自动注入的代理对象org.springframework.web.context.support.``WebApplicationContextUtils.RequestObjectFactory。该对象跟ServletRequest.class做了映射关联,放入了Spring管理bean注入的map中。@Override。
2024-06-20 11:50:09
2315
原创 JAVA系列---函数式接口
该接口在jdk8的实现增加了FunctionalInterface注解,代表Comparator是一个函数式接口,使用者可放心的通过lambda表达式来实例化。函数式编程也不会改变java的核心:bean.method(param),jvm只能将bean当参数,所以jvm其实还是将Lambda表达式的结果当成对象,由此表象上看似java支持了函数语句当参数。但上面的并不是我们常见的代码,那是因为我们常用的是极简风,以下是简化过程:参数类型省略-》参数占位省略-》返回语句省略。
2024-06-13 16:45:15
804
原创 安全系列---入门
目录xss注入问题Authenticator认证器xss注入问题现象:前端显示内容非预期原因:反射型注入和存储型注入,本质都是利用输入框输入一段js代码。解决:利用html的转义解析,当浏览器遇到HTML转义符时,它会将其识别为一个特殊序列,并将其替换为它所代表的相应字符。 例如,转义符“& lt;”表示小于符号(<),“ & gt ; ”表示大于符号(>)。 该机制通过防止特殊字符被解释为标记或代码来确保HTML代码被正确呈现。 为什么HTML转义符在web开发中很重
2024-05-17 11:07:57
405
原创 EJB和Spring
EJB实现原理: 就是把原来放到客户端实现的代码放到服务器端,并依靠RMI进行通信。RMI实现原理 :就是通过Java对象可序列化机制实现分布计算。服务器集群: 就是通过RMI的通信,连接不同功能模块的服务器,以实现一个完整的功能。
2024-04-22 11:44:11
953
2
原创 浏览器数据找回
在IndexedDB中可以找到你丢失的博客内容,找到你需要找回的那条数据,记住key值。网站上分享的文章应该都是个人的心血,对于一些操作问题导致心血丢失真的很奔溃,终于找到一个弥补的办法,csdn的文章谷歌浏览器亲测有效,理论上其他浏览器的其他网站应该也可以,适用以下场景。注意看text里的内容,有些是浏览版,有些是Markdown编辑版,最好找Markdown版本,可以直接复制重新发布博客。,因为浏览器只有触发编辑时才会记录到浏览器缓存数据库,每个界面对应的缓存数据库不一样。以谷歌和csdn为例子。
2024-04-22 08:11:40
776
原创 微服务---RPC
RPC:远程过程调用,指计算机 A 上的进程,调用另外一台计算机 B 上的进程(基于某种传输协议通过网络),其中 A 上的调用进程被挂起,而 B 上的被调用进程开始执行,当值返回给 A 时,A 进程继续执行。调用方可以通过使用参数将信息传送给被调用方,而后可以通过传回的结果得到信息。而这一过程,对于开发人员来说是透明的。开发人员不需要了解具体底层网络传输协议。与之对应的是本地过程调用,在不同的操作系统中叫法不同,使用方式也不太一样。在Windows编程中,称为LPC;
2024-04-21 23:20:51
1516
原创 springboot---四大核心
springboot项目中几乎项目依赖中基本上全是各种各样的starter, 那么到底什么是starter?starter是一组方便的依赖描述符,当我们使用它时,可以获得所有需要的Spring和相关技术的一站式服务,典型的如spring-boot-starter-web,引入之后,自动引入所有有关spring web项目相关的依赖。--监控依赖-->
2024-01-31 16:23:27
1347
原创 JAVA系列---多线程
如流程图所示,当提交任务后,线程池首先会检查当前线程数,如果此时线程数小于核心线程数,比如最开始线程数量为 0,则新建线程并执行任务,随着任务的不断增加,线程数会逐渐增加并达到核心线程数,此时如果仍有任务被不断提交,就会被放入 workQueue 任务队列中,等待核心线程执行完当前任务后重新从 workQueue 中提取正在等待被执行的任务。,它的第二个参数是个布尔值,如果布尔值传入 true 代表增加线程时判断当前线程是否少于 corePoolSize,小于则增加新线程,大于等于则不增加;
2023-12-29 15:12:08
943
原创 JAVA系列---Servlet详解
CGI、WSGI、servlet 和类似的东西。其作用大同小异, 实质就是服务器运行脚本并发送其输出的一种方式,而不是一些静态网页。Web 开发昨天还没有诞生,标准(和名称)还没有被某个神圣的实体透露。人们尝试了不同的方法来使相同(或类似)的东西工作,而通用网关接口(interface)一直是旨在标准化这些东西的规范。嗯,在 20 多年前的那个时代,互联网(和网络开发)主要是一项学术业务,学者们喜欢“大”名(嗯,营销人员更喜欢他们)。
2023-11-23 18:49:26
367
原创 大局观场景
但是,由于与开发整体式应用程序所需的长期成本相比,资源成本通常较低,且具有能够横向扩展应用程序的某些区域的优点,因此增加资源使用量好过使用大型、长期应用程序。像这类游戏,都是对网络,内存,CPU 的优化需求很高,整个游戏进行过程中,几乎不存在什么 RPC call,真的需要 remote data,也应该是 prefetch,就是在游戏刚开始的时候加载好。账号系统,符文系统,英雄系统,皮肤系统,好友系统,好友之间 messaging,这些都是常规操作,如果流量足够大,当然可以用微服务的架构去做。
2023-11-13 17:37:47
193
原创 MySQL系列---Online DDL
适用于mysql的5.7及以上的版本:增加、删除索引不会锁表,且删除索引速度非常快,即使表很大的情况下,无关CREATE INDEX语句还是ALTER TABLE语句,CREATE INDEX的内部执行逻辑也是ALTER TABLE。无限制条件的update语句也不会锁表:UPDATE jml_qrcode SET aaa = ‘22’;它的执行逻辑应该是逐行修改,总之不会锁表,最多锁行。修改字段默认值及修改字段限制也不会锁表,应该都是逐行;
2023-10-13 11:46:02
2129
原创 MySQL系列---分区表实验
任意表达式 + 正整数分区数量 + 服务器内置算法对任意数据类型求hash + 分区表达式非整数时极易分区不均衡。VARCHAR(99) NOT NULL, 为key分区字段。整数表达式 + 连续递增区间 + switch判断逻辑。datetime NOT NULL, 为key分区字段。整数表达式 + 不重复离散值逗号分隔。整数表达式 + 正整数分区数量。分区表达式where查询。分区表达式where查询。分区表达式为穷尽离散值。
2023-08-02 15:00:39
307
原创 springboot---定时任务实现
如果15号正好是周六,则找最近的周五(14号)触发, 如果15号是周未,则找最近的下周一(16号)触发.如果15号正好在工作日(周一至周五),则就在该天触发。#序号(表示每月的第几个周几),例如在周字段上设置”6#3”表示在每月的第三个周六.注意如果指定”#5”,正好第五周没有周六,则不会触发该配置(用在母亲节和父亲节再合适不过了);L 表示最后的意思。在日字段设置上,表示当月的最后一天(依据当前月份,如果是二月还会依据是否是润年[leap]), 在周字段上表示星期六,相当于”7”或”SAT”。
2023-07-08 14:39:03
3651
原创 springboot---IoC 和 AOP
创建了许多重复对象,造成大量资源浪费;更换实现类需要改动多个地方;创建和配置组件工作繁杂,给组件调用方带来极大不便。切面逻辑编写繁琐,有多少个业务方法就需要编写多少次。
2023-05-18 18:47:13
1264
原创 计算机原理---常见网络问题
我们知道,在Internet上有千百万台主机,为了区分这些主机,人们给每台主机都分配了一个专门的地址,称为IP地址。通过IP地址就可以访问到每一台主机。IP地址由4部分数字组成,每部分都不大于256,各部分之间用小数点分开。例如“百度搜索”主机的IP地址就是:“119.75.217.109,”在浏览器上输入这个IP地址,就可以访问到百度的主页。我们的每个虚拟主机用户,都分配一个永久的IP地址。
2023-05-10 13:52:19
797
原创 springboot---检验请求参数
举例说明自定义注解的实现:需要一个自定义注解来校验入参name不能和已存在name重名自定义注解@Target({//下面三个属性是必须有的属性 String message();Class
2023-03-23 14:15:40
995
原创 JAVA系列---优化 if/else
但是,大量使用if / else 会使程序变得臃肿和冗长,而且随着时间推移,业务的增加,也会导致代码逻辑复杂,维护性差,而且改一点就需要回忆整个逻辑。判断可以说是我们程序中必不可少的逻辑处理方式,最简单的就是 if / else 语句,以上就是最常见if/else if,用时候确实很爽。场景:只有 if 和else ,符合/不符合条件的操作无交集。场景:符合/不符合条件操作后的返回值不同。场景:不同条件下执行的操作或返回的值不一样。场景:需要对值进行 null 判断。场景:不同条件下需要执行不同的操作。
2023-03-22 13:31:27
1025
原创 JAVA系列---内存泄露示例
这绝大概率就是内存泄漏了啊。但是在生产上的内存走势图完全看不出来这个趋势,我前面说了,主要因为 GC 情况的数据只会保留一周时间,所以就算把整个图放出来也不是那么直观。我再带着你看看另外一个视角,这是我真正定位到问题的视角。就是分析内存 Dump 文件。分析内存 Dump 文件的工具以及相关的文章非常的多,我就不赘述了,你随便找个工具玩一玩就行。我这里主要是分享一个思路,所以就直接使用 idea 里面的 Profiler 插件了,方便。
2023-03-20 18:17:37
1167
原创 springboot---循环依赖
一个@Async注解引发了项目报错实际报错:核心报错其实就一句:百度翻译:大白话:在创建bean名称commonServiceImpl时,发现commonServiceImpl在循环依赖中已经以原始bean实例引用注入到其他bean(jmlMoneyflowingServiceImpl)中,但是最终bean实例commonServiceImpl被进行包装,导致前后不一致,出现了多个版本实例。但是,如上伪代码,将@Async注解去掉,项目启动则不会报错,即有@Async注解则出现循环依
2022-11-17 21:13:42
7172
6
原创 MySQL系列---隔离级别与存储引擎
加锁不是一件好事,加锁时一定要慎之又慎,如果可以用逻辑处理并发影响或者依赖数据库处理那么就不要加锁,加锁对性能的影响极大,如果没有感受到影响,无他,并发量太小未达到瓶颈罢了,加锁的影响无论何时何地都是切实存在的。,是的,完全同步,不要想会不会这么巧,你是不是扯犊子,使用锁不就是因为完全同步的线程执行时会出现问题,锁的目的不就是为了禁止完全同步的程序往下执行吗?个人历程,从最开始的不加锁,到加锁,再到滥用锁,再到精准用锁,最后到锁合并。晚上睡觉的时候一直睡不着,想着自己的锁是不是有漏洞。
2022-08-19 13:56:10
69
ftp_install_offline_Centos8.zip
2020-05-28
ftp_install_offline_Centos7.zip
2020-05-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人