技术
文章平均质量分 88
艾小仙
关注互联网技术发展
展开
-
一个奇葩的线上问题,导致我排查了一天!
昨天线上又出了个问题,花了一天的时间才找到原因,说起来原因其实特别的坑爹啊。事情是这样的,最近我们上线了一个刷新用户 token 的功能,也就是 APP 里经常有的,只要你经常操作,就能让你一直保持在线状态,不用一直重新登录,需求就是这么一个并不复杂的需求,也很快的上线了。但是上线之后发现了一个用户在某段时间持续长达 15 天没有调用过刷新 token 的接口,还一直保持在登录状态(默认 toke...原创 2022-08-24 22:34:04 · 198 阅读 · 0 评论 -
程序员最容易读错的单词,听到status我炸了
最近在跟同事讨论问题的时候,他突然对我说。。。这个不太对,需要改一下。。。我当时应该是愣住了,然后想了一下,你说的是吗???看着他疑惑不解的眼神,我当时的表情。。。好吧,好吧,我承认我低估了我们理科同志们的文科英语水平,以至于我发现,我这些年不也是这样水深火热的过来的嘛。于是,带着好奇、疑惑和忐忑的心情,我重新 Google、百度了一遍那些我觉得不太确认的单词到底怎么读,结果简直颠覆了我的三观。。。我不想直接贴个列表给大家看,我要带你们一个一个,一个两个,一个三个的仔细看看他喵的怎么读的。。。原创 2022-08-21 23:03:01 · 208 阅读 · 0 评论 -
从-99打造Sentinel高可用集群限流中间件
OK,到此,延迟注册不生效的原因找到了,我们做一个总结。默认情况下,配置了延迟注册的时间并不会生效,因为事件监听默认是true,服务启动之后就会立刻注册到EurekaServer。如果需要延迟注册生效,必须、都为false。即便我们把所有途径都封死了,但是发送心跳的线程仍然会去注册,所以这个延迟注册的时间最多也不会超过30秒,即便配置的延迟时间超过30秒。OK,到此为止,结束,我是艾小仙,欢迎拍砖。httpshttpshttpshttpshttpshttpshttps。...原创 2022-08-04 14:52:08 · 143 阅读 · 0 评论 -
我也是醉了,Eureka 延迟注册还有这个坑!
OK,到此,延迟注册不生效的原因找到了,我们做一个总结。默认情况下,配置了延迟注册的时间并不会生效,因为事件监听默认是true,服务启动之后就会立刻注册到EurekaServer。如果需要延迟注册生效,必须、都为false。即便我们把所有途径都封死了,但是发送心跳的线程仍然会去注册,所以这个延迟注册的时间最多也不会超过30秒,即便配置的延迟时间超过30秒。OK,到此为止,结束,我是艾小仙,欢迎拍砖。httpshttpshttpshttpshttpshttpshttps。...原创 2022-07-25 17:14:14 · 357 阅读 · 0 评论 -
这样优化Spring Boot,启动速度快到飞起!
别人都写从0开始实现xxx,我先从-1开始就显得更牛逼一些。今天,先开个头,来教大家怎么实现一个中间件。首先,我们新建一个多 module 的项目用于测试。项目包含两个模块,用户中间件模块的开发,用于测试。开发中间件项目创建 OK 了,接着开始开发一个最最最简单的中间件。在目录下创建文件,用于自动装配,别问我啥是自动装配,然后配置一个自动装配类。实现 ,最简单的方式,直接使用注解声明一个 Bean 交给 Spring 管理。然后实现真正的中间件逻辑的处理部分。这样的话,一个最简单的中间件就开发好了原创 2022-07-21 17:15:46 · 2347 阅读 · 1 评论 -
从-1开始实现一个中间件
别人都写从0开始实现xxx,我先从-1开始就显得更牛逼一些。今天,先开个头,来教大家怎么实现一个中间件。首先,我们新建一个多 module 的项目用于测试。项目包含两个模块,用户中间件模块的开发,用于测试。开发中间件项目创建 OK 了,接着开始开发一个最最最简单的中间件。在目录下创建文件,用于自动装配,别问我啥是自动装配,然后配置一个自动装配类。实现 ,最简单的方式,直接使用注解声明一个 Bean 交给 Spring 管理。然后实现真正的中间件逻辑的处理部分。这样的话,一个最简单的中间件就开发好了原创 2022-06-21 20:09:06 · 316 阅读 · 1 评论 -
搭建个人博客,Docsify+Github webhook+JGit解决方案
一开始博客使用的 Halo,发现问题比较多啊,时不时的莫名其妙主题各种报错,有时候还要升级,麻烦的要死,于是就想弄简单点。这两天抽空反复倒腾了一遍,不小心还把镜像给尼玛删了,发的文章都没了,痛定思痛,要做改变!众所周知,我懒出名了,我觉得这种事情你不要老是让我操心啊,最好是一年都不要动一下才好,这搞的跟什么一样。研究一会儿,最终还是决定 docsify+github 来弄,初步的想法是本地写好 MD 文件直接 push 到 github上,然后触发 github 的webhook,触发脚本去 pull 代码原创 2022-06-17 09:34:54 · 665 阅读 · 0 评论 -
Eureka服务下线太慢,电话被告警打爆了
某年某月的某一天,就像一张破碎的脸。。。错了,重来。某天,忽然发现大量的告警,经过多番调查研究考察(此处省略3000字),发现是由于 Eureka 服务下线太慢,而仍然有大量的请求打进来导致的报错。于是,又经过了大量详细周密的考察和研究,终于找到了问题并且解决了(此处省略5000字)。全文完。… …好了,那是不可能的啦,怎么说也要意思一下写个300字凑个原创啊。为啥服务都下线了还会有那么多的请求一直进来呢?呐,我们都知道 Eureka 是 AP 模型,其实根本原因在于 Eureka 使用了三级缓存来保存服务原创 2022-06-17 09:34:08 · 182 阅读 · 0 评论 -
Eureka服务下线太慢,电话被告警打爆了
某年某月的某一天,就像一张破碎的脸。。。错了,重来。某天,忽然发现大量的告警,经过多番调查研究考察(此处省略3000字),发现是由于 Eureka 服务下线太慢,而仍然有大量的请求打进来导致的报错。于是,又经过了大量详细周密的考察和研究,终于找到了问题并且解决了(此处省略5000字)。全文完。… …好了,那是不可能的啦,怎么说也要意思一下写个300字凑个原创啊。为啥服务都下线了还会有那么多的请求一直进来呢?呐,我们都知道 Eureka 是 AP 模型,其实根本原因在于 Eureka 使用了三级缓存来保存服务原创 2022-06-08 18:01:08 · 228 阅读 · 0 评论 -
并发编程从入门到放弃系列开始和结束
对于 Java 部分的面试来说,突然想到并发这一块的内容是不太完整的,这篇文章会通篇把多线程和并发都大致阐述一遍,至少能够达到了解原理和使用的目的,内容会比较多,从最基本的线程到我们常用的类会统一说一遍,慢慢看。对于基本的概念,大家应该都很熟悉了,进程是资源分配的单位,线程是CPU调度的单位,线程是进程中的一个实体。对于我们的Java程序来说,天生就是多线程的,我们通过main方法启动,就是启动了一个JVM的进程,同时创建一个名为的线程,main就是JVM进程中的一个实体线程。线程几种基本状态:几个状态之间原创 2022-06-01 10:37:35 · 354 阅读 · 0 评论 -
Sentinel集群限流探索
最近看了下关于分布式限流的部分,看到Sentinel的分布式限流,也就是集群限流的部分,想搭个环境看看,结果发现网上关于这方面的内容基本可以说没有,你甚至很难跑起来他的demo,就算能跑起来,估计也得自己研究半天,麻烦的要死。我猜测很重要的原因可能就是Sentinel关于这块做的并不完善,而且从官方的Issue中能看出来,其实官方对于这块后续并没有计划去做的更好。那么废话不多说,在此之前,肯定要先说下关于Sentinel集群限流方面的原理,没有原理一切都是空中楼阁。集群限流原理原理这方面比较好解释,原创 2022-04-30 18:43:10 · 1531 阅读 · 0 评论 -
Maven Archetype 多 Module 自定义代码脚手架
大部分公司都会有一个通用的模板项目,帮助你快速创建一个项目。通常,这个项目需要集成一些公司内部的中间件、单元测试、标准的代码格式、通用的代码分层等等。今天,就利用 Maven 的 Archetype 插件来简单实现这一功能。通过上面的图很清楚可以看到,实际利用这个插件机制就简单的几个步骤:archetype:create-from-project ,根据自己的项目代码生成原型项目通过 install 等命令生成原型文件archetype:generate,通过原型生成目标项目看起来挺简单的原创 2022-01-14 15:55:25 · 733 阅读 · 0 评论 -
真实字节二面:什么是伪共享?
这个问题来自最近一个朋友字节面试碰到的,最后他也成功拿到了字节offer,这个问题我想可能挺多人不太清楚,所以想拿出来单独说一说。好了,让我们进入正题。什么是伪共享首先大家都知道,随着CPU和内存的发展速度差异的问题,导致CPU的速度远远快于内存,所以一般现在的CPU都加入了高速缓存,就是常说的解决不同硬件之间的性能差异问题。这样的话,很简单的道理,加入了缓存,就必然会导致缓存一致性的问题,由此,又引入了缓存一致性协议。(如果你不知道,建议去百度一下,这里不做展开)CPU缓存,顾名思义,越贴近CP原创 2021-03-01 11:52:47 · 378 阅读 · 0 评论 -
关于MVCC,我之前写错了,这次我改好了!
关于MVCC的原理,在《我想进大厂》之mysql夺命连环13问写过一次,但是当时写的其实并不准确,这个理解可以应付面试,帮助快速理解,但是他的真正实现原理我想再次拿出来说一说。简单理解版以下先引用我之前写过的那篇中的内容,可以快速理解,建议先简单看看。要说幻读,首先要了解MVCC,MVCC叫做多版本并发控制,实际上就是保存了数据在某个时间节点的快照。我们每行数据实际上隐藏了两列,创建时间版本号,过期(删除)时间版本号,每开始一个新的事务,版本号都会自动递增。还是拿上面的user表举例子,假设我原创 2021-02-24 00:25:32 · 447 阅读 · 1 评论 -
《我想进大厂》之Zookeeper夺命连环9问
谈谈你对Zookeeper的理解?Zookeeper是一个开源的分布式协调服务,由雅虎公司创建,由于最初雅虎公司的内部研究小组的项目大多以动物的名字命名,所以后来就以Zookeeper(动物管理员)来命名了,而就是由Zookeeper来负责这些分布式组件环境的协调工作。他的目标是可以提供高性能、高可用和顺序访问控制的能力,同时也是为了解决分布式环境下数据一致性的问题。集群首先,Zookeeper集群中有几个关键的概念,Leader、Follower和Observer,Zookeeper中通常原创 2021-02-02 13:01:26 · 644 阅读 · 0 评论 -
《我想进大厂》之分布式事务篇
对于分布式事务,相信所有人都应该很了解,为什么会有分布式事务?无论是数据量导致的分库,还是现在微服务盛行的场景都是他出现的原因。这一篇内容还是避免不了俗套,主要的范围无非是XA、2PC、3PC、TCC,再最后到Seata。但是,我认为这东西,只是适用于面试和理论的了解,你真要说这些方案实际生产中有人用吗?有,但是会实现的更简单,不会套用理论来实现,大厂有大厂的解决方案,中小公司用框架或者压根就不存在分布式事务的问题。那,为什么还要写这个?为了你面试八股文啊,小可爱。事务要说.原创 2021-01-18 14:00:47 · 793 阅读 · 0 评论 -
听过闰年闰月,听过闰秒吗?
闰年闰月大家都知道,可是你听说过闰秒这回事情吗?闰年是为了弥补是我们的历法365天和地球实际公转365.25天的差距,所以每4年会一年是闰年,多出来的那一天就是2月29日。闰月则是和阴历有关,不同于阳历的以公转制定的方式,阴历以月亮绕地球的时间来计算,所以会和阳历的365.25天相差10天21小时,于是,多出来的时间累积下来凑成一个月,也就是闰月了。那么什么是闰秒?闰秒会带来什么影响?怎么解决闰秒带来的问题?闰秒定义要了解闰秒,首先需要了解几个基本的概念。平均太阳日:天空中的太阳连续原创 2021-01-16 12:19:42 · 651 阅读 · 0 评论 -
最近线上发生的两个坑爹锅
最近由于在技改,发生了不少问题,前文中说的缓存穿透只是其中之一,想了想,虽然都是比较简单的问题,但是应该实际中还是有不少人碰到过,这些问题看似很简单,但是你绝对应该踩过。==和equals关于和equals区别,我相信稍微做过一两年开发的同学都应该很清楚,可是,然而,这个坑在很多开发的时候仍然频繁出现,为什么?因为有时候有的同学认为没什么区别,就用吧,然而,一些意外总是如期而至。不久前,由于线上RPC框架切换,我们就发生了一点小问题。本来,线上的接口是这样定义的:然后,接口查询中使用到了一个枚举原创 2021-01-13 10:51:21 · 408 阅读 · 0 评论 -
没人告诉过你更复杂的缓存穿透怎么解决
你应该从网上看过太多的文章说缓存穿透怎么解决?无非就是布隆过滤器,缓存空值什么的。但是,更深入的一个问题,缓存空值有没有问题?如果缓存的空值太多怎么办?如果用的redis,那么太多的空值会不会打爆你的redis?如果用的本地缓存,会不会打爆你的内存?继而引发的问题就是还是会打爆你的数据库。从线上问题说起前不久,我们线上环境压测,在QPS压倒2W之后RT达到了几十秒,排查后发现是redis的连接数不够导致大量的连接超时。经过考虑之后,我们最终决定弃用redis缓存的方案,改为本地缓存,因为原创 2021-01-11 12:58:27 · 298 阅读 · 0 评论 -
面试官:数据库自增ID用完了会怎么样?
看到这个问题,我想起当初玩魔兽世界的时候,25H难度的脑残吼的血量已经超过了21亿,所以那时候副本的BOSS都设计成了转阶段、回血的模式,因为魔兽的血量是int型,不能超过2^32大小。估计暴雪的设计师都没想到几个资料片下来血量都超过int上限了,以至于大家猜想才会有后来的属性压缩。这些都是题外话,只是告诉你数据量大了是有可能达到上限的而已,回到Mysql自增ID上限的问题,可以分为两个方面来说。1.有主键如果设置了主键,并且一般会把主键设置成自增。我们知道,Mysql里int类型是4个原创 2021-01-04 12:56:37 · 624 阅读 · 0 评论 -
一次群聊引发的血案
就在不久前,读者群因为一个提问引发了激烈的讨论!代码如下:从问题来看,大家讨论的问题的焦点在于 map 去 put 一个对象的时候,究竟会不会因为对象没有完全初始化完成而导致另外一个线程 get 的时候只是拿到了对象的引用,导致报错呢?从提供的代码的写法来看,是一个最基本的DCL稍微改变了的写法,在探讨map的问题之前,我想先从DCL(双重检查校验)说起。DCL的由来在最初的时候,我们常规的单例写法就像这样:很容易你就应该知道,这段代码不是线程安全的,所以有了加锁的单例方法实现。但是s原创 2020-11-23 10:59:55 · 406 阅读 · 1 评论 -
3分钟学个算法:链表反转
题目描述输入一个链表,反转链表后,输出新链表的表头。输入{1,2,3,4,5}返回值{5,43,2,1}解题初拿到这题,很容易联想到反转系列用java的api中提供了几个类似的api如Collections.reverse()和StringBuilder.reverse()。他们提供了直接对集合、字符串的反转api。需要的就是根据链表构建集合,再将集合反转,反转后再重新构建链表指向关系。代码如下:public static ListNode reverseByList(ListNode原创 2020-11-17 11:37:18 · 380 阅读 · 0 评论 -
世界上最好玩的6种表情符号编程语言
谁能想到我们最喜欢的表情符号可以用来设计新的编程语言?聪明有才华的人已经想象并开发出了成熟的编程语言,我们可以用它来编写表情符号和表情符号。这些基于表情符号的语言大多是深奥的编程语言( esoteric programming language),称为esolang。然而,这些语言相对来说比其他语言更容易理解。esolang的定义是:Esolang 不是为普通的软件开发目的而设计的。他们只是是作为一个概念的证明或者就是一个笑话。如果你想了解世界上最难的语言,你可以看看我的另一篇文章。让我们看看这原创 2020-11-13 22:24:39 · 1475 阅读 · 0 评论 -
百亿级数据分表后怎么分页查询?
当业务规模达到一定规模之后,像淘宝日订单量在5000万单以上,美团3000万单以上。数据库面对海量的数据压力,分库分表就是必须进行的操作了。而分库分表之后一些常规的查询可能都会产生问题,最常见的就是比如分页查询的问题。一般我们把分表的字段称作shardingkey,比如订单表按照用户ID作为shardingkey,那么如果查询条件中不带用户ID查询怎么做分页?又比如更多的多维度的查询都没有shardingkey又怎么查询?唯一主键一般我们数据库的主键都是自增的,那么分表之后主键冲突的问题就是一个无法避免原创 2020-11-09 08:40:41 · 2249 阅读 · 0 评论 -
让你怀疑人生的重载和重写的区别
内容90%翻译修改自https://software.rajivprab.com/2019/08/14/nuances-of-overloading-and-overriding-in-java/如果你认为你对java的重载和重写已经很了解了,那么我想通过下面的例子你可能会感到怀疑人生了。如果你能完全回答对下面的题目,那我觉得你真的非常非常牛X了。单一调度class Parent { void print(String a) { log.info("Parent - String"); } v原创 2020-10-30 23:08:28 · 396 阅读 · 1 评论 -
世界上最难的5种编程语言
当我们谈论 c,c++ ,Java,Python的时候,有些语言不仅很难,而且对于大多数软件开发者来说几乎是无法理解的。这些语言被称为深奥的编程语言,英文称为esoteric programming language,简称esolang。下面是五种最难理解的语言,我试着用这些语言编写程序Hello World,貌似非常有趣的样子。MalbolgeMalbolge 是 Ben Olmstead 在1998年发明的,这种 esolang 被认为是最复杂的编程语言。据说,Malbolge 编程语言的作者原创 2020-10-14 22:27:48 · 16996 阅读 · 16 评论 -
再深入一点|binlog和relay-log到底长啥样?
上一篇mysql面试的文章之后收到不少朋友的意见,希望深入讲讲复制、日志的格式这些,今天,我们就来深挖一下mysql的复制机制到底有哪一些,以及binlog和relay-log的结构到底是什么样子的。binlog作用binlog的主要作用是记录数据库中表的更改,它只记录改变数据的sql,不改变数据的sql不会写入,比如select语句一般不会被记录,因为他们不会对数据产生任何改动。用一个实际的场景看下binlog产生的过程,准备sql:create table test(text varchar(2原创 2020-09-11 01:06:35 · 4181 阅读 · 2 评论 -
css:box-shadow的发光效果
如果用过twitter,你可能已经留意到当输入框获得焦点后,它的边框会有蓝色发光的效果,并且这里运用了transition属性,使得发光效果有很平滑的过渡。本教程将讲述如何运用box-shadow属性来做到这样的效果。CSS代码如下:input {transition: all 0.30s ease-in-out;-webkit-transition: al转载 2013-07-05 21:43:00 · 3209 阅读 · 0 评论 -
uploadify3.2+struts2文件上传
HTML页面Insert title here 开始上传 JS$('#upload-button').uploadify({ 'width': '265', 'height': '65', 'buttonText': '上传图片',原创 2013-01-30 16:14:13 · 3425 阅读 · 8 评论 -
CAS单点登入SSO配置说明
安装环境Tomcat7.0JDK6CAS SERVER 3.5.1,下载地址 http://www.jasig.org/cas/downloadCAS CLIENT 3.2.1,下载地址 http://downloads.jasig.org/cas-clients/?C=M;O=D常用命令-genkey:在用户主目录创建一个默认文件“.keystore”,还会产生一个mykey原创 2013-02-20 15:08:18 · 2948 阅读 · 0 评论 -
jquery图表插件highcharts的安装使用
1.下载highcharts 官网地址2. 解压后要在项目里使用,需要引入几个js文件(1) jquery-1.8.2.js(2)highcharts.js*(3)如果需要导出图片的话这个也是必须的exporting.js3.简单的demo$(function () { var chart = new Highcharts.Chart({原创 2012-11-30 15:55:39 · 1873 阅读 · 0 评论 -
mybatis insert操作返回值问题
select LAST_INSERT_ID() mybatis 返回值是插入的数量,写好这句话以后,我们在service层直接返回插入的对象就好了。Mybatis会自动把插入数据库以后的id填充到当前对象中。这个返回值肯定一直是1的。原创 2012-12-14 14:39:09 · 5880 阅读 · 0 评论 -
mongoDB安装及使用
安装1.官网为:http://www.mongodb.org/2.解压复制到E:\develop\mongodb3.在E盘创建目录data\db4.当前目录创建\data\db,创建\log5.运行cmd.exe进入dos操作,进入 E:\develop\mongodb\bin, 运行mongod -dbpath=E:\develop\mongodb\data\db6.原创 2013-01-08 16:35:39 · 1010 阅读 · 0 评论 -
Jquery获取窗口,浏览器,滚动条高度方法
alert($(window).height()); //浏览器时下窗口可视区域高度alert($(document).height()); //浏览器时下窗口文档的高度alert($(document.body).height());//浏览器时下窗口文档body的高度alert($(document.body).outerHeight(true));//浏览器时下窗口文档body的总高度原创 2013-01-16 09:40:33 · 2545 阅读 · 0 评论 -
Spring+Hibernate+Jersey整合
导入需要的jar包项目结构Spring配置<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframewo原创 2013-01-24 19:01:11 · 4239 阅读 · 2 评论 -
100套CSS3分页效果
附上下载地址:http://download.csdn.net/detail/awl910213/5542183原创 2013-06-07 23:38:50 · 2181 阅读 · 0 评论 -
solrcloud,tomcat,外部zookeeper配置详解
之前由于在项目中使用的solr3.6,服务器总是莫名其妙的挂掉,各种解决未果,于是尝试换到solr4,想试试solrcloud和zookeeper集群看看效果怎么样,实际效果比3.6稳定很多,下面说一下项目中我们的具体现在一个测试的配置。 我们配置3台zookper服务器和3台solr服务器,由于没有多台机器测试,zookeeper的集群都在一台服务器上,tomcat部署在3台服务器上。zoo原创 2013-05-10 15:42:04 · 6314 阅读 · 0 评论 -
java jsp标签分页,jquery 插件分页封装
分页CSS.pagination{ margin: 20px auto 0; width: 960px; font-size:12px; text-align: center;}.pagination a{ border:1px solid #CCCCCC; color: #336CA9; font-weight: bold;原创 2013-04-09 15:25:38 · 2935 阅读 · 1 评论