- 博客(82)
- 收藏
- 关注
原创 一文带你了解分布式ID生成器Ray
背景在应用程序中,经常需要全局唯一的ID作为数据库主键。我们需要什么样的ID生成器高性能 -> 1.生成性能高 2.插入性能高 3.索引性能高高可用 -> 1.依赖中间件要少 2.避免单节点问题不重复 -> 1.集群内全局不重复易使用 -> 1.接入简单 2.零学习成本语义性 -> 1.ID带有一些其它信息如何满足这几点要求生成性能高 -> 大多数时间为内存分配,减少IO,减少锁插入性能高 -> 全局递增,避免页分裂索引性能高 ->.
2020-05-18 20:30:02
718
原创 基于Redis实现分布式锁之前,这些坑你一定得知道
开头基于Redis的分布式锁对大家来说并不陌生,可是你的分布式锁有失败的时候吗?在失败的时候可曾怀疑过你在用的分布式锁真的靠谱吗?以下是结合自己的踩坑经验总结的一些经验之谈。你真的需要分布式锁吗?用到分布式锁说明遇到了多个进程共同访问同一个资源的问题, 一般是在两个场景下会防止对同一个资源的重复访问:提高效率。比如多个节点计算同一批任务,如果某个任务已经有节点在计算了,那其他节点就不用...
2020-03-11 17:02:32
582
原创 5 分钟搭建 Node.js 微服务原型
微服务已成为在 Node.js 中构建可扩展且强大的云应用的主流方法。同时也存在一些门槛,其中一些难点需要你在以下方面做出决策:组织项目结构。将自定义服务连接到第三方服务(数据库,消息代理等)处理微服务之间共享的代码。将项目容器化。在本地运行和调试,然后将其部署到云中。SMF 框架是开箱即用的解决方案:https://github.com/krawa76/smf让我们看看它如...
2020-03-11 16:29:36
587
原创 SpirngMVC源码简析
SpirngMVC流程综述用户发送请求至前端控制器DispatcherServlet。DispatcherServlet收到请求调用HandlerMapping处理器映射器。处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。DispatcherServlet调用HandlerAdap...
2020-03-10 15:59:09
371
原创 Tomcat中一种半通用回显方法
前段时间学习了一波Linux下基于文件描述符的反序列化回显方式的思路。在自己实现的过程中发现,是通过IP和端口号的筛选,从而过滤出当前线程(也可以说是请求)的文件描述符,进而加入回显的内容。但是同时也有一个疑问,我们使用回显的目前主要是因为一些端口的过滤,一些内外网的隔离。从而将一些无法从别的途径传输的执行结果,通过http请求的方式,附加在原本的response中,从而绕过一些防护和限制。...
2020-03-10 15:58:43
937
原创 备战金三银四:2020java面试题分享,请查收
本文收录的面试题包括MySQL、Redis、java、JVM等相关内容。我相信很多人都在计划着跳槽,也或者在等金三银四的到来,请对找工作保持十二分的热情,而且越早准备越好。临时狂背知识点什么的,可能大致的都了解,细问就什么都不知道了,面试京东我也是提前一个月就开始准备了,毕竟不打无准备的仗一:Java多个线程同时读写,读线程的数量远远大于写线程,你认为应该如何解决 并发的问题?你会选择加...
2020-03-09 17:00:31
578
原创 看一看Spring Security 原理分析
引言在试题系统开发过程中,认证方式越来越完善,也对Spring Security有了更加深刻的理解。本文,我们一起来领略Spring Security的设计原理。原理必备基础Servlet是Java Web领域中的软件开发规范,Tomcat是实现Servlet规范的Java Web服务器。package javax.servlet;public interface Servlet...
2020-03-09 16:58:22
483
原创 java中的Volatile关键字使用
java中的Volatile关键字使用在本文中,我们会介绍java中的一个关键字volatile。 volatile的中文意思是易挥发的,不稳定的。那么在java中使用是什么意思呢?我们知道,在java中,每个线程都会有个自己的内存空间,我们称之为working memory。这个空间会缓存一些变量的信息,从而提升程序的性能。当执行完某个操作之后,thread会将更新后的变量更新到主缓存中,...
2020-03-07 17:53:35
314
原创 一篇文章,让你看懂 Spring Cloud
Spring CloudSpring Boot 让我们从繁琐的配置文件中解脱了出来,而 Spring Cloud,它我们提供了一整套的微服务解决方案,大大的降低了微服务开发的门槛,同时也减少了开发成本。Spring Cloud 的组成Spring Cloud 并不是特指某个框架,它其实是一系列成熟框架的组合,通过 Spring Boot 风格的封装,屏蔽掉了复杂的配置和实现原理,最终给开发...
2020-03-07 17:03:49
413
原创 掌握这些学习路线图,进入BATJ年薪三四十万不是梦!!!
Web应用,最常见的研发语言是Java和PHP。后端服务,最常见的研发语言是Java和C/C++。大数据,最常见的研发语言是Java和Python。可以说,Java是现阶段中国互联网公司中,覆盖度最广的研发语言,掌握了Java技术体系,不管在成熟的大公司,快速发展的公司,还是创业阶段的公司,都能有立足之地。一个Java工程师需要掌握的技术是非常广泛的,有不少技术人问,除了掌握Java语法...
2020-03-06 17:13:15
695
原创 聊一聊Redis之数据结构
基本数据结构简单动态字符串Redis中的字符串使用“简单动态字符串”(SDS)表示,无论是字符串值还是键底层都采用“简单动态字符串”。free:未使用空间大小;len:字符串长度;buf:以空字符结尾的char数组。为了减少内存重新分配次数,SDS做出了以下优化:空间预分配:额外分配的未使用空间数量由以下公式决定:如果对SDS进行修改之后,SDS的长小于1MB,那么程序分...
2020-03-06 16:21:11
466
原创 2020金三银四季一名5年java程序员对面试的指导与建议
今天分享的是一位5年工作经验的Java工程师在帝都的面试经验总结,看看这些互联网公司都爱问些什么题,希望对大家的面试有指导意义。从事Java开发也有5年经验了,4月初自己的开启面试经历之旅,前后20天左右,主面互联网公司,一二线大公司或者是融资中的创业公司都面试过,拿了一些offer,其中包括奇虎360等首先不同面试官面试风格一定不同,这里是我总结这些天面试Java开发过程中的大多数问题,综...
2020-03-05 21:47:44
2405
原创 MySQL协议和canal实现
前言前面的文章里,我们了解到 canal 可以从 MySQL 中感知数据的变化。这是因为它模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,从而实现了主从复制。正是了解到这一点,笔者有两个问题便一直萦绕于心:它是如何模拟 MySQL slave 交互协议的?它又是怎么解析 binlog 日志的呢?今天,笔者准备就着这两个问题,扒拉扒拉 canal 的代码...
2020-03-05 16:12:02
714
原创 Redis——分布式锁深入探究
一、分布式锁简介锁 是一种用来解决多个执行线程 访问共享资源 错误或数据不一致问题的工具。如果把一台服务器比作一个房子,那么 线程就好比里面的住户,当他们想要共同访问一个共享资源,例如厕所的时候,如果厕所门上没有锁…更甚者厕所没装门…这是会出原则性的问题的…装上了锁,大家用起来就安心多了,本质也就是 同一时间只允许一个住户使用。而随着互联网世界的发展,单体应用已经越来越无法满足复杂...
2020-03-04 16:55:04
313
原创 金三银四——一名程序员的java学习心得
古人云:活到老,学到老。读书学习实乃艰苦之事,花费时间,消耗精力。然苦之外亦见其乐:得到了知识,提高了认识,完善了自己。学习,求其真,务其实,应“敏而好学,不耻下问”,才能不断促使进步。学习,不仅求知,也要懂法,学会方法比掌握知识更加重要。笛卡尔说过,“没有正确的方法,即使有眼睛的博学者也会像瞎子一样盲目摸索”,可见学习方法的重要性。学习Java不是说短期内就可以速成的,这是一个长期的事情。学员...
2020-03-04 16:52:17
546
原创 如何理解javascript中的对象
以前对javascript中的对象总有不明白的地方,在本周也遇到了疑惑,于是借着机会去深入的了解了一下javascrpit中的对象。创建对象在javascript中,创建对象有两种方式,一种是使用 new 操作符后跟 Object 构造函数:let ob = new Object();ob.name = 'object';另一种是直接使用对象字面值:let ob = { ...
2020-03-03 16:01:17
428
原创 2020年2月份编程语言排行榜分析
今天上班的路上,突然发现路边绿化带里的迎春花发芽了,这两天也是明显的感觉暖和些了,春天到咯,终于可以换下厚重的羽绒服啦。春天是播种的季节,一年之计在于春,勤恳的农民伯伯们已然开始准备春耕,翻地待种;而我们可爱的码农们也在蓄势待发,要在“春招”里大显身手,转战新战场,谋求新发展。从外貌(敷张面膜,理个新发型_)到简历,到笔试题,都做好了充足的准备,确保万无一失。前段时间呢,小编也跟大家分享了10...
2020-03-03 16:00:48
1436
1
原创 从源码分析Spring是如何解决循环依赖的
循环依赖问题什么是循环依赖首先看一下下面的Spring配置文件<!-- beanA依赖于beanB --><bean id="beanA" class="top.okay3r.ClassA"> <property name="beanB" ref="beanB"/></bean><!-- beanB依赖于beanA --&g...
2020-03-02 16:45:06
443
原创 2020java程序员必学方向之微服务架构
什么是微服务架构?看下图的这段英文,这是Martin Fowler 在2014年提出来的,微服务架构是一种架构模式,既然是架构模式,那么,它就必然需要满足一些特点。他提到,微服务架构是一系列小的微服务构成的组合,那么,什么是“小的微服务”?可能每个人的理解都不一样,大家都应该都知道SOA架构,SOA架构的粒度是比较粗的,到底我们应该以什么样的粒度拆分微服务?我认为,微服务架构本质上一个业务架构,...
2020-03-02 16:40:33
1186
原创 mybatis入门的前期准备
使用步骤如下:首先创建一个Maven工程,在pom.xml文件中引入mybatis的jar包坐标<dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</a...
2020-03-01 19:26:56
292
原创 provider之selector
一.Consumer和Selector的简单区别provider早期版本中只有Consumer,当model中调用notifyListeners()的时候,对应的Consumer的视图就会整个rebuild,而在3.x版本之后出现Selector可以仅选择model中某个值来最小范围的刷新视图,并且在4.0版本之后会对使用的值进行deep check,也可以自己自定义shouldRebuild。...
2020-03-01 17:12:30
1072
原创 你不知道的HelloGitHub!
简介分享 GitHub 上有趣、入门级的开源项目。这是一个面向编程新手、热爱编程、对开源社区感兴趣 人群的月刊,月刊的内容包括:各种编程语言的项目、让生活变得更美好的工具、书籍、学习笔记、教程等,这些开源项目大多都是非常容易上手,而且非常 Cool。主要是希望大家能动手用起来,加入到开源社区中。会编程的可以贡献代码不会编程的可以反馈使用这些工具中的 Bug帮着宣传你觉得优秀的项目S...
2020-03-01 17:12:02
615
原创 Spring Boot项目优化和JVM调优
项目调优作为一名工程师,项目调优这事,是必须得熟练掌握的事情。在 Spring Boot 项目中,调优主要通过配置文件和配置JVM的参数的方式进行。1. 修改配置文件关于修改配置文件 application.properties,推荐《Spring Boot 项目详细的配置文件修改文档》https://docs.spring.io/spring-boot/docs/current/ref...
2020-02-29 17:50:46
615
原创 一文带你了解如何使用 Redis 实现分布式锁
锁是我们在设计和实现大多数系统时绕不过的话题。一旦有竞争条件出现,在没有保护的操作的前提下,可能会出现不可预知的问题。而现代系统大多为分布式系统,这就引入了分布式锁,要求具有在分布各处的服务上保护资源的能力。而实现分布式锁,目前大多有以下三种方式:使用数据库实现。使用 Redis 等缓存系统实现。使用 Zookeeper 等分布式协调系统实现。其中 Redis 简便灵活,高可用分布...
2020-02-29 16:27:20
330
原创 Go 每日一库之 gojsonq
简介在日常工作中,每一名开发者,不管是前端还是后端,都经常使用 JSON。JSON 是一个很简单的数据交换格式。相比于 XML,它灵活、轻巧、使用方便。JSON 也是RESTful API推荐的格式。有时,我们只想读取 JSON 中的某一些字段。如果自己手动解析、一层一层读取,这就变得异常繁琐了。特别是在嵌套层次很深的情况下。今天我们介绍gojsonq。它可以帮助我们很方便的操作 JSON。...
2020-02-29 16:26:42
367
原创 金三银四—2020java学习路线图,看懂后学习java不再迷茫
最近有些网友问我如何自学 Java 后端,还有些是想从别的方向想转过来,但都不太了解 Java 后端究竟需要学什么,究竟要从哪里学起,哪些是主流的 Java 后端技术等等,导致想学,但又很迷茫,不知从何下手。我就以过来人的经历,写在这篇博客里,不一定都对,但都是我根据自己的经历总结出来的,供你们的参考。Java 基础Java 是一门纯粹的面向对象的编程语言,所以除了基础语法之外,必须得弄懂它的...
2020-02-28 17:31:09
335
原创 以Java内存模型的角度看并发
Java的内存模型:堆区:存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)。JVM的堆区(heap)被所有线程共享(相对于栈区,栈区的数据不共享),堆中不存放基本类型和对象引用,只存放对象本身。栈区:每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中。每个栈中的数据(原始类型和对象...
2020-02-28 16:17:41
240
原创 Redis-结构篇-压缩列表
什么是压缩列表压缩列表 ziplist 在 redis 中的应用也非常广泛,它是我们常用的 zset ,list 和 hash 结构的底层实现之一。当我们的容器对象的元素个数小于一定条件时,redis 会使用 ziplist 的方式储存,来减少内存的使用。 > hset test_hash me sidfate (integer) 1 > object enco...
2020-02-28 16:16:39
276
原创 疫情结束后的BATJ,面试会越来越难吗?
疫情信息仍在不断刷屏,相信今天大家都在线上远程办公。开工日期一再延迟,之前跳槽、转行、涨薪的计划都不得不暂时搁置起来。但Java 作为稳居开发榜首的语言,企业需求依旧旺盛,其实很多企业,比如腾讯、字节跳动,为了保证春招的顺利进行,尽可能提高招聘效率,做出了一些调整:首先是更多采用线上面试的形式,有的甚至直接在线发offer。其次,简历筛选环节更加严格,以尽快找到最匹配的候选人。只要认真准备,疫...
2020-02-27 17:54:48
630
原创 如何把golang的Channel玩出async和await的feel
引言如何优雅的同步化异步代码,一直以来都是各大编程语言致力于优化的点,记得最早是C# 5.0加入了async/await来简化TPL的多线程模型,后来Javascript的Promise也吸取这一语法糖,在ES 6中也加入了async和await.那么,被大家一称赞并发性能好、异步模型独树一帜的golang,能否也有async和await呢?其实,这对于golang的CSM来说是一点也不难...
2020-02-27 16:04:15
437
原创 数据库中间件分片算法之hash
前言夜深人静的时候,打开云音乐,点上一曲攀登,带上真无线蓝牙耳机,瞬间燃到爆,键盘打字如飞倦意全无。分片规则这几天有人问我,dble和MyCat到底有什么不同。其实dble作为MyCAT的同门,吸收了MyCat的精华,同时也相应的做了一些减法。只支持MySQL显得更加的纯粹。所以选择对比学习两者我觉得挺好。前面我们学习了schema.xml文件的配置,我们能独立的把逻辑库和逻辑表搭建起来,...
2020-02-27 16:03:49
453
原创 作为一名程序员找到一份java的工作需要学习哪些知识?
首先是Javase作为Java最基本的学习内容,不在多说。然后是掌握JavaScript的基本原理,因为做Java编程开发必须学会JavaScript,用到JavaScript非常多,但是现在很多公司是不用去写原生的JavaScript,但是如果你想成为一个厉害的Java开发者,JavaScript必须从理论到实际操作中都要非常得心应手。现在公司是必须要求会用框架的,所以取代JavaScrip...
2020-02-26 22:22:56
932
原创 Spring Boot配置文件注入
yml语法yml配置文件的语法主要有以下几点:key:[space] value大小写敏感空格(Tab)控制层级关系其中value的可以是简单数据类型(数字、字符串),也可以是复杂数据类型(数组、对象、集合、Map等)。注意:对于字符串,默认是不需要加双引号或者单引号。配置文件注入假设配置文件内容如下:coder: name: smartpig //简单数据 l...
2020-02-26 17:13:42
309
原创 关于SpringBoot如何处理全局异常的思考
背景日常开发中经常会遇到各种系统异常(Exception),但是将异常堆栈直接返回给页面却是很不友好的一种做法,于是在我们日常的项目开发中,个人思考总结了一种自认为还不错的全局异常处理方案义工参考,欢迎指点意见和支持。基本思路这个方案主要用到了深度优先的递归循环、策略模式和基于枚举的单例模式,针对每种不同类型异常单独实现异常处理逻辑,实际中大多也是如此。异常在抛出的时候有两种情况:一是没有...
2020-02-26 17:12:59
326
原创 一名程序员在家办公的感想—在家远程办公2周,准备离职了...
以前,特别羡慕在家办公一族,感觉好爽。没有烦人的闹钟,没有忙碌的早晨,没有拥挤的地铁,没有强制的打卡。9点上班,8点55醒也不怕迟到。床在桌边,饭在桌上,家里的一切都那么安逸。即使做同样的事情,心情肯定是愉悦的我可以撸上一整天的代码!想想就兴奋,可是…如今,因为疫情的原因,很多人已经体验到了在家办公的滋味。这滋味,好像没有想象的那样甜。以前在公司撸码,下班回家了,只要不遇到紧急事...
2020-02-26 14:53:11
2200
原创 一文带你了解Java 并发之 Executor 框架
前言在学习 JUC 的过程中我发现,JUC 这个包下面的文档写的十分的好,清楚又易于理解,这篇博客便是参考 JUC 中和 Executor 框架相关的一些类文档汇总出来的。当然了,Executor 框架涉及到的类还是不少的,全部汇总的话时间成本太高,有点亏,所以这里主要就集中在了 Executor 接口及其子接口和具体实现上。Executor 框架概览Executor 框架的起点自然就是 ...
2020-02-25 16:17:10
293
原创 【最完整系列】JAVA-容器篇-LinkedList源码解析
简介LinkedList 顾名思义其本质是一个链表,具体来说是一个双向链表,同时还有2个指针分别对应链表的头和尾。源码源码还是跟 ArrayList 一样,从我们常用的代码出发:List<String> a = new LinkedList<>();a.add("sidfate");进入初始化源码:// LinkedList 长度transient in...
2020-02-25 16:16:20
239
原创 金三银四之必不可少的java并发面试题
金三银四马上就要到了,各位小伙伴准备的怎么样了,今天博主准备了一些开发面试题,供大家参考一下:1.一个线程在运行时发生异常会怎样?答:如果这个异常没有被捕获,这个线程将会停止运行。2.什么是线程组?答:ThreadGroup类,可以把线程归属到某一个线程组中,线程组中可以有线程对象, 也可以有线程组,组中还可以有线程,它的组织结构有点类似于树,但是它使用起来不安全。3.Java中的vo...
2020-02-24 19:17:04
202
原创 spring mvc中的Sugar ,你要来点吗?
spring mvc作为展示层的组件,从参数预处理,验证,拦截,渲染。无不考虑的细致入微,你所要的做的,只是接口实现,切面接入,简单配置。今天我们以分页功能展开来说明,如何把我们复杂的参数处理从控制器进行剥离!第一步我们展示一个重量级的接口:HandlerMethodArgumentResolver第一段红色,表示在某个参数进行了注解之后,是否启用自定义的参数处理,其实就是一个标识符...
2020-02-24 19:16:39
291
原创 高可用redis简单解析和Docker搭建
哨兵1.基本概念在这边先对几个名词进行说明:Red Sentinel是Redis的高可用实现方案。1.1.主从复制的问题Redis的主从复制模式可以将主节点的数据改变同步给从节点,这样从节点就可以起到两个作用:第一,作为主节点的一个备份,一旦主节点出了故障不可达的情况,从节点可以作为后备顶上来,并且保证数据尽量不丢失(主从复制是最终一致性)。第二,从节点可以扩展主节点的读能力。1.2...
2020-02-24 19:16:18
275
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人