- 博客(179)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 搭建个人网站步骤总结
一、准备阶段1.购买一台阿里云服务器2.购买域名,进行icp备案3.官网首页底部提高备案编号4.公安备案,需要注册,填写个人信息,提交审核5.在阿里云上面申请ssl6.配置cdn,实现静态资源分发二、使用docker安装nginx默认会拉取最新的nginx镜像docker pull nginx进入nginx容器docker exec -it nginx-test /bin/bash重启容器docker restart nginx-test查看容器配置docker insp
2020-08-16 22:30:12
284
原创 JWT介绍
提到jwt首先想到的就是token,jwt跟token又有什么关系呢?大致知道jwt是生成和解析token的,但具体什么是jwt,为什么要用jwt,工作原理是什么?
2021-06-06 18:27:12
303
原创 第一篇,一个接口的工作原理是什么样的?
写接口是后端开发必做的事情,那一个接口是如何工作的呢?首先,客户端发起请求,客户端可以是浏览器,app或者是另外一个服务,发起请求一般是通过url,这里又涉及到域名解析,域名解析得到ip地址,ip默认对应的是80端口号。有了ip地址和端口号,请求就可以到达具体的服务器上。这里又涉及到端口映射,一台服务器上可能有多个服务,端口号不一致,这个时候就有可能用到nginx,做一个映射,根据...
2019-11-30 00:42:39
955
原创 一.未来学习的规划
从事软件开发已经有三年时间了,实习差不多一年。回顾之前的工作经历,大部分时间是在处理业务问题,说得不好听就是处理公司的流水账。在技术能力上,很多人都只会用,遇到问题才会想着去了解原理,或者是在遇到面试的时候。如果原理对于工作不重要,那为什么面试官会很重视,公司会很重视呢?原理当然是很重要的,记得三体里面有说到,起到颠覆性左右的往往是基础知识。任何复杂事物都是由基础构成的,音乐是由一个...
2019-11-30 00:25:02
298
原创 如何保证HashMap的线程安全?
这是一道面试题,当时没有准备,临时回答有点忘了。后面看了一下,使用Collections.synchronizedMap()包装一下就可以了,原理就是对所有的修改操作都加上synchronized,保证了线程的安全。...
2019-11-20 19:03:41
2025
原创 ConcurrentHashmap中size的实现原理
在手写hashmap的时候,考虑到并发问题,用的直接是synchronized进行加锁操作,使得线程安全,但这样在并发情况下性能会很低。ConcurrentHashmap主要使用的事synchronized加cas来实现并发控制,synchronized用于数组上,控制链表上的并发。cas用来控制size的并发修改,cas存在修改失败的可能性,这个时候引入了fullAddCount方...
2019-11-20 18:55:02
428
原创 安装RocketMQ遇到的问题
一、启动console的时候报错:1.RemotingConnectException: connect to <172.17.0.1:10909>2.RemotingConnectException: connect to <172.17.0.1:10911>原因: 172.17.0.1是私有ip,无法让外部访问到,所以console无法连接...
2019-11-07 11:46:27
417
原创 java中使用CAS遇到的问题
1.在使用cas的时候,一般会使用循环,来保证操作成功,这样会使得CPU开销很大2.一次只能保证一个元素的原子操作3.有ABA问题需要注意
2019-11-06 12:51:33
251
1
原创 deploy本地包到远程maven仓库
上传的时候一直报错: Return code is: 401, ReasonPhrase: Unauthorized. -> [Help 1]上传的语句是这样的:mvn deploy:deploy-file -Dmaven.test.skip=true -DgroupId=com -DartifactId=articfactId -Dversion=3.5.0 -Dpacka...
2019-11-04 11:33:13
441
原创 ReentrantLock源码分析
ReentrantLock与synchronized不同之处是加锁是用reentrantLock.lock(),解锁用的是reentrantLock.unlock(),实现原理是cas加上队列来实现。可以实现公平锁和非公平锁,实现公平锁其实用的就是队列,先进先出,非公平锁就没有用到队列,只用到cas保持多线程时候只有一个线程可以获得锁。用到state,每次重入的时候,用volatile修饰...
2019-11-03 23:14:34
75
原创 手写Hashmap第二版
在第一版的基础上,如果需要实现线程安全,需要在增加、删除、扩容的时候加锁。扩容的时候,需要对整个数组加锁。增加和删除的时候,只需要对链表的头结点进行加锁。具体实现代码如下:package www.dustin.li.collections;import java.util.concurrent.atomic.AtomicInteger;/** * 手写集合 * * ...
2019-10-25 18:46:27
192
原创 手写Hashmap第一版
关于hashmap的问题,经常被问到。虽然看了一下源码和相关博客,记忆还是不太深刻。发现只有手写之后,对其中的运行原理才有更深刻的理解。这里记录第一版,实现了存储、查询、删除、扩容操作,是线程不安全的,且没有实现迭代器功能。链表里面没有用到红黑树。一步步迭代,先记录自己的第一步。package www.dustin.li.collections;/** * 手写集合 * ...
2019-10-25 12:58:28
110
原创 java高频面试
必须深⼊入了了解的知识点:a. java集合数据结构b. jvm:gc、内存模型、堆分代c. 多线程:volatile、java.util.concurrent包d. spring:启动、时间e. redis:分布式锁、lua保证原⼦子性、集群f. 消息队列列:kafkag. Springcloudh. mysql搜索引擎,索引B+treejava基础:a. nio模型b....
2019-10-16 19:02:37
236
原创 netty高性能的原因
“性能是设计出来的,而不是测试出来的”。下面我们看Netty的架构设计是如何实现高性能的。(1)采用异步非阻塞的I/O类库,基于Reactor 模式实现,解决了传统同步阻塞I/O模式下一个服务端无法平滑地处理线性增长的客户端的问题。(2) TCP接收和发送缓冲区使用直接内存代替堆内存,避免了内存复制,提升了I/O读取和写入的性能。(3)支持通过内存池的方式循环利用ByteBuf,避免了...
2019-10-15 10:42:50
1383
原创 Netty源码阅读之ByteBuf
一、ByteBufHolder与平时不一样的地方几乎所有的方法都返回了自己,只有第一个方法返回的是ByteBuf。这样做的好处是,可以链式调用多个方法来进行处理。平时写代码,基本上都是一个方法返回一个类型的结果,没有像这样进行设计。...
2019-10-10 16:38:00
127
原创 一个中心,两个基本点
以健康发展为中心,以事业与知识体系建设为基本点。强化个人综合能力,为家庭提供良好的生活环境,为个人未来的发展奠定基础。健康、事业和知识,三个主要核心,将作为核心发展方向。娱乐消遣,作为奖励。一、健康 1.身体健康,精力充沛,反应灵敏,各项指标正常 2.心理健康,抗压能力强,心态积极二、事业1.财富(资产)的积累2.经验的积累三、知识1.对健康和事业中遇到的问题进行分类总结并...
2019-10-09 10:21:13
289
原创 深圳三年感受
16年十月份来到深圳实习,到现在已经有三年了。在这三年里,经历了很多,自己也发生了很多变化。三年的变化: 1.实习快结束的时候,在公司认识了一个女朋友,后来结婚了 2.从谈朋友到结婚,自己胖了三十斤,差不多就两年的时间,今年过年来花了半年时间瘦了十斤,算是胖了二十斤 3.在两个公司工作过,第一个公司做互联网金融,第二个公司也算是互联网金融,但...
2019-10-09 00:47:30
207
原创 《便便来了,你的肠子在说啥?》----肠道在喊救命
这本书,跟生活息息相关,是改善健康非常好的指南。我们知道,要想对一个东西进行优化,首先需要能够获得反馈,不断对自己的行为进行优化。这里的反馈就是对大便进行观察,留意它的形状、颜色、气味,这些信息其实都反应了肠胃的健康状态。作者将事物消化比作一个工厂的流水线,大便就是最后的产品,如果产品不合格,肯定是中间某个流程出了问题,所以需要改进其中的某些步骤。肠道是百病之源,如果肠道不能很好地...
2019-09-27 15:14:27
507
原创 简单描述下synchronize的实现原理
看到synchronize第一印象是锁。锁,保证在同一时刻只有一个线程能够访问共享资源。那synchronize是如何实现这个原理的呢?依稀记得它可以放在方法中,可以将对象包裹起来,具体怎么去实现的,还是有点模糊。 首先看synchronize包裹对象,它是包裹在共享对象上的。java对象,它有个对象头,对象头会记录指向使用自己的线程,这样就可以实现简单的偏向锁。如果这个时...
2019-09-25 17:38:19
342
原创 小米运动数据导出并做个性化统计
小米运动数据是没有对外提供接口的,它本身提供的数据统计有不足之处,比如体重数据,在一天中不同时间体重数据时不一样的,把所有数据混合在一起看,是很难得出体重变化趋势的。所以,最好是能够获取到这些数据,根据时间段来对数据进行统计,能够更加准确地发现体重变化。在网上找了很多相关资料,并没有可以直接使用的,遇到很多坑,这里分享一下。后期可以考虑做一个更加个性化的界面。一、效果图二...
2019-09-21 17:11:49
8480
4
原创 springcloud之eruaka使用时遇到的问题
当引入springcloud依赖包,但没有引入<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></depen...
2019-09-16 18:37:12
806
原创 为什么JDK1.8中放弃了分段锁
在网上找了很多参考文章,讲解的都只是一知半解,看完以后都想放弃了,但还是想把这个问题搞清楚,所以多参考了几篇博客,然后看了一下源代码,最终理解了一点。 其实一切的优化和升级都是围绕时间和空间来进行的,jdk1.8中放弃分段锁,改用cas、synchronize、volatile。分段锁,其实让锁的粒度变大了,本来每个链表上发生冲突的可能性很小,现在把几个链表聚合在一...
2019-09-09 16:04:51
1784
原创 技术原理思考20190904
先记录几个问题,今天把详细答案整理出来一、netty底层使用的是epoll,还有其他的poll,select,他们直接的区别是什么?https://www.cnblogs.com/Anker/p/3265058.htmlepoll是poll和select的加强版,poll和select主要是对fd的描述不同,epoll解决了poll和select的三个缺点,第一.直接将fd注册在内核里...
2019-09-04 16:35:32
82
原创 个人应该具备的素质
一、聪明 善于利用资源。聪明的人和不聪明的人,差距在于不聪明的人总是在做一些重复性的工作,且个人成长速度很慢。聪明的人善于抓住问题的核心,学会基础的知识,能够举一反三。聪明的人学的是术,武功中的精髓,笨的人学的是技,遇到一个问题解决一个问题,缺乏拓展能力。学习基础的知识,就像三体里面描述的,人类文明的突破往往在基础学科,基础的东西单独来看作用不大,但其在长远的发展过程中确实非常重要的...
2019-09-02 12:33:50
171
原创 springboot技术原理思考
一.springboot如何实现零配置的 主要是在依赖的jar包中包含有一个配置文件。factories.properties,里面指定了配置内所在的相对路径。在springboot项目启动的时候,会通过classloader找到jar包下面有没有factories.properties文件,如果有的话,就会读取配置文件中的配置类,然后就实现配置的自动加载。二.springboot如...
2019-08-31 15:09:17
136
原创 空间与时间 信息与能量
软件工程,本质上是信息与能源的转化。信息技术是对现实世界的建模,通过建模之后,就可以通过输入信息来控制现实世界中的物体。人与人,人与物,物与物,都通过信息来进行交流,人与人交流加速了知识的传递,人与物交流,加速了基础设施的建设,更快创造物质基础,物与物之间的交流,提供了更加强大的计算能力。 空间与时间,在算法里面,经常处理的就是空间与时间的转化。在存储资源还很有限的时候,...
2019-08-31 14:59:55
514
原创 Nacos的介绍和使用
官方文档:https://nacos.io/zh-cn/docs/what-is-nacos.html一、介绍二、踩过的坑1.版本兼容问题 当spring-boot-starter-parent的版本太低时,会有兼容性问题,启动报错。这里用2.1.0.RELEASE。引入的spring-cloud-context版本过低也会报错,这里用2.1.1.RELEASE...
2019-08-07 15:26:11
928
原创 mysql将一段文字切分之后插入表中
一、背景 在实际工作中,数据源的来源很多,有时候就是产品或运营的一段话,但是包含的信息有规律,如果手动导入到数据库有点浪费时间,所以选择批量导入数据库中。二、具体操作INSERT INTO t_location (`location`) SELECT num from ( SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('扬州,杭州...
2019-08-06 16:32:38
240
原创 docker-compose的安装与使用,安装nacos
一、背景 通常一个软件的安装过程比较复杂,使用docker之后,可以不用管这些复杂的配置,直接启动就可以了。在使用docker的时候,需要首先pull下来镜像,然后启动,如果有特殊的个性化配置,后面还会加很多的参数。为了简化这一系列的复杂操作,docker-compose应运而生,可以基于个性化的配置来启动docker服务。二、使用这里参考了这篇博客:https://blog...
2019-08-06 15:44:03
6661
原创 一、Spring源码阅读----整体概况
一、Spring能干啥1.进行对象的管理,对象的创建和销毁,不用使用new来进行对象创建了准备写第二条的,发现spring核心内容就是对象管理,那为什么必须是spring呢?2.如果仅仅是对象管理,那其实很容易实现,关键是其还有丰富的生态圈,基于spring会有很多的组件,这些组件可以在spring这个容器里面进行很好的管理。另外,spring在进行对象创建的时候,提供了很好的扩展,它...
2019-08-05 18:17:48
132
原创 hashmap源码阅读
一、背景 hashmap是高效的基于键值对存储的工具,在数据存储、检索、扩容等方面非常快速,在开源框架中基本都能看到其身影。首先它是基于内存来存储的,存储所用的数据结构为数据和链表,数组具有高效检索的特别,链表便于增删。它解决了这些问题:如果快速的进行存取,当数据量很大的时候。首先它是基于hash算法和数据来实现高效地定位,在java里面,每个对象都有一个对应的hashcode相当于身...
2019-08-05 17:52:07
110
原创 《亿级流量网站架构核心技术》读后感
一、这本书解决的问题 应对高并发场景的处理思路,结合了个人的实际经历。二、本书的亮点 可以看出,作者有丰富的实践经验,所写的内容是对于工作中遇到问题的总结,在工作中也有用到与其类似的问题,有很多处理问题思想可以在遇到类似问题时借鉴。三、读后感 周末看了这本书的四分之一,收获颇多。记得在几个月前,看到这本书一点感觉都没有,觉得这本书将的内容似乎...
2019-07-28 23:59:53
110
原创 延迟满足感
从初中开始,延迟三年的假期享受,获得了三年的优质资源以及未来更高阶段的发展,回首过去的日子,三年的付出是完全值得的。如果当时只想着回家看电视玩游戏,或许自己没办法享受到后面的资源,生活轨迹也会发生很大的改变。 从10年高中毕业,到现在已经九年了,期间经历了三年高考,四年大学,工作两年。初中奋斗的目标是市里最好的高中,放弃了周末的休息。高中奋斗的是一所好的大学,但当时渴望没有那...
2019-07-23 09:45:14
358
原创 使用mango时遇到的连接断开问题
一、背景在使用mango时,测试环境遇到了一种奇怪的问题,程序测试一段时间之后,连接断开了,导致数据库查询失败。二、原因由于使用了事务,在发生异常之后,事务没有提交。已经开始了事务,但是在开始事务的时候,设置了事务提交为非自动,在发生异常之后,连接一直是使用状态,最后导致连接池中的连接都耗尽,无可用连接使用。连接在一段时间内没有执行完,会超时断开。在使用mysql5版本之后,设置aut...
2019-07-22 15:03:13
343
原创 docker安装FastDFS
一、背景 在需要用到dfs的时候,由于安装需要很多配置,觉得很麻烦,所以准备用docker进行安装。二、安装步骤 下载fastDfs镜像 docker search fastdfs docker pull delron/fastdfs 使用docker镜像构建tracker(跟踪服务器,起到调度作用)容器 docker run -d -...
2019-07-18 14:51:29
126
转载 Spring框架理解
https://www.ibm.com/developerworks/cn/java/wa-spring1/一、相关概念理解在典型的 IOC 场景中,容器创建了所有对象,并设置必要的属性将它们连接在一起,决定什么时间调用方法。下表列出了 IOC 的一个实现模式。类型 1 服务需要实现专门的接口,通过接口,由对象提供这些服务,可以从对象查询依赖性(例如,需要的附加服务) 类型 ...
2019-07-12 18:48:26
89
原创 IntelliJ IDEA 如何生成时序图
进入扩展程序安装File>Settings>Plugins>Browse Repositories搜索SequenceDiagram,点击右边 Install 安装,然后重启 IDEA 。在需要生成流程时序图的方法 右键 > 选择 "SequenceDiagram..." > 点击 OK...
2019-07-12 18:33:13
1570
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人