十年磨一剑,沉淀……

是一只热爱Coding,热爱生活的程序媛呀~
私信 关注
Hepburn Yang
码龄5年

匠心精神

  • 1,035,077
    被访问量
  • 293
    原创文章
  • 1,793
    作者排名
  • 494
    粉丝数量
  • 目前就职 Momenta
  • 于 2016-03-07 加入CSDN
获得成就
  • 获得366次点赞
  • 内容获得4,277次评论
  • 获得597次收藏
荣誉勋章
兴趣领域
  • #后端
    #分布式#Java#Spring#Spring Boot
TA的专栏
  • 个人总结
    6篇
  • PgSql
    6篇
  • OSM
    2篇
  • 可视化
  • GIS
    3篇
  • 机器学习
    2篇
  • 空间数据处理
    6篇
  • 笔记
    1篇
  • Java并发编程
    17篇
  • Dubbo服务治理
    7篇
  • MQ消息队列
    4篇
  • 数据结构与算法
    19篇
  • Mysql
    16篇
  • Angular 4
    28篇
  • 【Java学习】
    91篇
  • 操作系统
    6篇
  • 软件工程
    8篇
  • UML
    11篇
  • 设计模式
    5篇
  • JavaScript
    8篇
  • 项目
    24篇
  • mybatis
    12篇
  • 软考
    5篇
  • 【其他】
    11篇
  • 算法总结
    19篇
  • 读书
    4篇
  • java基础
    28篇
  • Spring
    11篇
  • -Redis
    6篇
  • JVM 调优
    5篇
  • 分布式
    8篇
  • Zookeeper
    4篇
  • --JVM
    6篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

wkt convert osmosis .poly ( PolygonFilter input )

MULTIPOLYGON WKT 数据地址 21523.txt Osmosis/Polygon Filter File Formatwkt 转 polyimport sysimport numpy as npfor ipath in sys.argv[1:]: if not ipath.endswith('.txt'): print(f'skip {ipath}') opath = f'{ipath}.poly' print(opath) wit
原创
149阅读
0评论
0点赞
发布博客于 5 月前

postgresql 修改字段类型为数组类型(text 改为 text[] )

语法:alter table tablename alter columnname type oldcolumntype USING columnname:: newcolumtypeeg:alter table dirty_track alter labels type text USING labels::text[];
原创
2110阅读
0评论
0点赞
发布博客于 9 月前

雪花算法踩坑 - Long 类型 id 返回前端精度丢失 (通过序列化解决)

能看到这里大概率说明你已经踩到这个坑了。原因:js的number类型支持的最大值是9007199254740992 (2的53次方-1),溢出之后的精度会丢失,导致前后端的值不一致。java的long类型最大值为9223372036854775807,远高于js number类型的最大值,所以这个坑就出现了。解决方案:id-type: ID_WORKER_STR简单来说就是id转为string类型,db和生成的id数据类型都改为string类型缺点:牺牲了long类型的性能优势通过json
原创
7243阅读
3评论
4点赞
发布博客于 9 月前

地图匹配算法-离散Fréchet距离(弗雷歇算法)Java实现

弗雷歇算法文献下面是java版本的实现package momenta.hdmap.diffosm.Frechet;import org.locationtech.jts.geom.Coordinate;import java.math.BigDecimal;import java.util.ArrayList;import java.util.Arrays;import java...
原创
1378阅读
0评论
1点赞
发布博客于 1 年前

做得到和极客的日活用户

 
发布Blink于 1 年前

【工作感悟】-- 2020年04月

换工作大概五个多月了,最近想停下来总结一下。可能我还并不是一个足够理智的人,写总结也总是从自己很感性的一面切入的,我还是想先写一下自己的主观感受。【感到开心】公司的技术氛围特别好,我喜欢这种工作状态我感觉自己很幸运,遇到了一个超nice的mentor,他很温和也很有耐心【感到成长】这段时间里更多的是一个人在做事情,没有像之前一样总觉着不管什么问题都有大家伙一起扛着,独立做事情的过...
原创
791阅读
4评论
4点赞
发布博客于 1 年前

【GIS入门】- 3.地理信息技术整体认识(3S)

地理信息技术地理信息技术是指获取,管理,分析和应用地理空间信息的现代技术的一个总称。主要包括了3S,也就是我们熟悉的RS,GPS,GIS。遥感(RS)全球定位系统(GPS)地理信息系统 (GIS)RS遥感是人们在航空器(eg:飞机,高空气球)或航天器(eg: 人造卫星)上利用一定对技术装备,对地表物体进行远距离对感知,因为不同对物体反射出对电磁波是不同的。流程是这样的:遥感的关...
原创
664阅读
0评论
0点赞
发布博客于 1 年前

【GIS入门】- 2.GIS学习途径有哪些

1. GIS空间站,中国地理信息门户网站这个网站算是比较国内早期的地理信息门户网站,里面有GIS方面的相关资料和行业动态,论文资料,讨论ArcGIS、ArcSDE等软件的应用和开发 ,可以用来拓宽视野提升对行业认知。2. NarutoGIS这是一个集在线教育、科普、研究,技术交流支持等于一体的信息平台。集成微信登录,支付,解决用户在线学习,查看相关资料,数据下载,系统代码查看等功能。...
原创
559阅读
0评论
1点赞
发布博客于 1 年前

【GIS入门】- 1. 如何学习GIS?

文章目录一、搞明白什么是GIS?二、GIS工作方向三、GIS初学者要学什么?四、 如何提高专业基础知识五、GIS学习途径六、GIS技术栈学习图谱作为一个想要在GIS领域内深入下去的初学者,内业研发方向,网上入门级别比较系统的资料不是很多,打算写一个GIS学习入门的专栏,一方面是让自己持续输出保持好记录总结的习惯,另一方面系统可以对有同样需求的读者一点帮助。一、搞明白什么是GIS?GIS 是地...
原创
2328阅读
0评论
9点赞
发布博客于 1 年前

【PostgreSQL 】-- ARRAY_AGG聚合函数

PG 的ARRAY_AGG函数是用来连接到一个数组中的输入值,就是把多个值合并到一个数组中。示例:原始sql与查询结果:SELECT case_id, case_labelFROM case_label WHEREcase_id = '6605'查询结果:使用ARRAY_AGG函数+group by的效果:SELECT case_id, array_agg(case...
原创
1220阅读
0评论
0点赞
发布博客于 1 年前

mybatis-plus-3.3.0(NoClassDefFoundError: org/mybatis/logging/LoggerFactory)

异常:引入mybatis-plus-boot-starter3.2.0之后普遍出现了这个异常,Caused by: java.lang.NoClassDefFoundError: org/mybatis/logging/LoggerFactory;原因:mybatis-plus 3.2.0以上版本需要用到一个扩展包,但是和springboot整合的starter里面还没有,所以需要单独加上...
原创
5570阅读
3评论
1点赞
发布博客于 1 年前

mybatis-plus 自定义basemapper支持批量增删改操作

com.baomidou.mybatisplus.core.mapper.BaseMappercom.baomidou.mybatisplus.extension.service.IService经常使用mybatis的开发朋友们都知道mybatis提供了上述两种类型的预定义接口来帮助我们做单表的增删改查操作,IService方式和BaseMapper这两种方式的区别以及联系是如何的呢? ...
原创
5036阅读
0评论
1点赞
发布博客于 1 年前

把事情做成

大部分人都是心里什么道理明白,只是不用动脑子的日子实在是太舒服了,不想干什么,总会找到一个看似合理的理由,然后就顺着这个台阶走下去了。
原创
442阅读
2评论
0点赞
发布博客于 1 年前

【如何学习】 -- 读刘未鹏《暗时间》有感

记录是为了更好的成长,分享从书中学到的精华,可能每一条都需要我们花上很多时间和精力去学习,不要着急,慢慢靠拢,每天都是更好的你~
原创
392阅读
3评论
2点赞
发布博客于 1 年前

【时间管理】 -- 顺应人性的时间管理法

我为什么放弃了四象限法则?市面上很火的时间管理四象限法则亲身实践了之后并没有达到预期的效果,我尝试把手头的事情按照四象限来划分,然后依次处理重要紧急的事情,紧急不重要,重要不紧急的事情,但我用了之后发现自己依旧会因为没有时间而感到焦虑。而且更多时候我没有办法去区分哪个更重要哪个更紧急,所以会有一堆重要紧急的事情,当我面对这样一堆重要紧急的事情,要去执行这些重要紧急的事情时,我开始焦虑,反倒一点...
原创
569阅读
0评论
6点赞
发布博客于 1 年前

超潜力技术达人,加油呀~

发布Blink于 1 年前

PgSql--创建与撤销唯一标识约束

SQL UNIQUE 约束UNIQUE 约束唯一标识数据库表中的每条记录。UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。PRIMARY KEY 拥有自动定义的 UNIQUE 约束。创建:alter table t_category add CONSTRAINT unique_index_t_category_category_name unique (c...
原创
2346阅读
0评论
0点赞
发布博客于 1 年前

JTS 空间数据关系分析

JTS Geometry关系分析:缓冲区分析(Buffer)包含所有的点在一个指定距离内的多边形和多多边形凸壳分析(ConvexHull)包含几何形体的所有点的最小凸壳多边形(外包多边形)交叉分析(Intersection)A∩B 交叉操作就是多边形AB中所有共同点的集合联合分析(Union)AUB AB的联合操作就是AB所有点的集合差异分析(Diff...
原创
2911阅读
0评论
1点赞
发布博客于 1 年前

JTS 空间数据关系判定

Geometry之间的关系有如下几种,JTS中都有相应的方法做关系判定:JTS Geometry关系判断:
原创
2492阅读
0评论
0点赞
发布博客于 1 年前

【JTS -- 空间数据处理】--计算两个几何图形的关系

当前需求是需要为建图算法建立评价指标,比如精准率和召回率指标,这两个指标如何计算在此不细说了,其中主要用到了JTS做空间关系计算。差分出两份OSM 文件中同一个Way节点之间的重合的Node部分,多余的部分和空缺的部分;用到了JTS 中的 buffer 和 intersection来做两个Way也就是两个LINESTRING ,但并不是所有Node经纬度完全相同的Linestring, 而...
原创
2836阅读
1评论
0点赞
发布博客于 1 年前

Java File ,byte[] , 二进制字符串之间互转

File ,byte[] , 二进制字符串之间互转的多种方法汇集 /** * File转Byte[] 方法一 * @param file * @return */ public static byte[] fileToBinArray(File file){ try { InputStream fis ...
原创
2971阅读
0评论
1点赞
发布博客于 1 年前

【2019年总结】-- 特别的一年

最开心的事情:最遗憾的事情:最感动的瞬间:2019有超级多感动的瞬间
原创
1828阅读
0评论
0点赞
发布博客于 2 年前

算法评价指标:准确率+精准率+召回率

评价指标:(1)(True Postive TP): 若一个实例是正类,但是被预测成为正类,即为真正类(2)(True Negative TN): 若一个实例是负类,但是被预测成为负类,即为真负类(3)(False Postive FP): 若一个实例是负类,但是被预测成为正类,即为假正类(4)(False Negative FN: 若一个实例是正类,但是被预测成为负类,即为假负类...
原创
1918阅读
0评论
0点赞
发布博客于 2 年前

Osmosis --主要功能

Osmosis 是用于处理OSM数据的Java命令行应用程序,包括许多插件式的组件。比如读写数据库和文件的组件、继承和修改数据源的组件、对数据排序管理的组件等,避免了实现常用功能而重复性编写代码。目前主要功能有:从数据库中生成指定区域的osm数据导入区域的osm数据到数据库生成变化数据集数据库更新记录表应用变化数据集到本地数据库比较区域osm数据生成变化数据集区域osm数据重排序...
原创
1008阅读
0评论
0点赞
发布博客于 2 年前

JTS Topology Suite 空间数据处理(一)

要了解的基本概念:要学习的内容:推荐学习资料:
原创
1232阅读
0评论
1点赞
发布博客于 2 年前

java 获取request请求头所有信息

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /** * 获取头信息 */ String headValue = r...
原创
3587阅读
0评论
0点赞
发布博客于 2 年前

mybatis 自定义TypeHandler数组映射处理器 (pgsql text[]与java String[]映射)

自定义 ArrayTypeHandlerpublic class ArrayTypeHandler extends BaseTypeHandler<Object[]> { private static final String TYPE_NAME_VARCHAR = "varchar"; private static final String TYPE_NAME_I...
原创
1549阅读
0评论
0点赞
发布博客于 2 年前

持续集成工具 Jenkins vs TeamCity

1. 先来看看受欢迎程度:2. Jenkins vs TeamCity: What are the differences?JenkinsJenkins 是一个开源工具,Jenkins的出现的时间比较早一点,因此社区规模更大,使用范围更广,Stacks数量要多,插件扩展也更丰富,另外可以在多台机器上进行分布式构建和负载测试,总结:Jenkins强大又灵活,免费,支持跨平台,学习成本会高...
原创
4588阅读
0评论
2点赞
发布博客于 2 年前

【Java并发】 -- fork/join 框架解读

场景需求方案用法原理
原创
1174阅读
1评论
0点赞
发布博客于 2 年前

mybatis 自定义TypeHandler映射Geometry空间几何数据 PGPoint (java +mybatis+ pgsql)

报错信息Type handler was null on parameter mapping for property ‘coordinates’。It was either not specified and/or could not be found for the javaType (org.postgresql.geometric.PGpoint) : jdbcType (null) ...
原创
3570阅读
1评论
0点赞
发布博客于 2 年前

Java Geometry空间几何数据的处理

a flag:pgsql中常用的空间坐标类型在Java里用一般的数据类型表示不了呢,研究一下java对空间几何数据类型的处理,研究完回来补一下博客
原创
1284阅读
0评论
0点赞
发布博客于 2 年前

mysql与pgsql

对比:适用场景性能语法
原创
1500阅读
0评论
0点赞
发布博客于 2 年前

【Mysql】-- 查询结果集中排序第N高的记录

案例:编写一个 SQL 查询,获取 Employee 表中第 n 高的薪水(Salary)。+----+--------+| Id | Salary |+----+--------+| 1 | 100 || 2 | 200 || 3 | 300 |+----+--------+例如上述 Employee 表,n = 2 时,应返回第二高的薪水 200。如...
原创
492阅读
0评论
1点赞
发布博客于 2 年前

【Mysql】-- 为查询记录编上递增序号

原始数据:select * from mto_config为查询记录编上递增序号SELECT ( @i := @i + 1 ) num, m.* FROM mto_config m, ( SELECT @i := 0 ) AS i
原创
615阅读
0评论
0点赞
发布博客于 2 年前

如何设计可以动态扩容缩容的分库分表方案

如何设计可以动态扩容缩容的分库分表方案?(1)选择一个数据库中间件,调研、学习、测试(2)设计你的分库分表的一个方案,你要分成多少个库,每个库分成多少个表,3个库每个库4个表(3)基于选择好的数据库中间件,以及在测试环境建立好的分库分表的环境,然后测试一下能否正常进行分库分表的读写(4)完成单库单表到分库分表的迁移,双写方案(5)线上系统开始基于分库分表对外提供服务(6)扩容了,扩容成...
原创
565阅读
0评论
0点赞
发布博客于 2 年前

如何把系统不停机迁移到分库分表的?

假设,你现有有一个单库单表的系统,在线上在跑,假设单表有600万数据3个库,每个库里分了4个表,每个表要放50万的数据量假设你已经选择了一个分库分表的数据库中间件,sharding-jdbc,mycat,都可以(1)停机迁移方案我先给你说一个最low的方案,就是很简单,大家伙儿凌晨12点开始运维,网站或者app挂个公告,说0点到早上6点进行运维,无法访问。。。。。。接着到0点,停机,系统...
原创
593阅读
0评论
1点赞
发布博客于 2 年前

【Mybatis】 -- 架构分层 + 缓存机制

一、mybatis的架构分层与模块划分mybatis整体架构分类:接口层:与用户应用打交道最多,核心对象是sqlSession;是上层应用和myBatis打交道的桥梁;接口层定义了很多对数据库操作的方法,接口层在收到调用请求的时候,会调用核心处理层的响应模块来完成具体的数据库操作。核心处理层:跟数据库操作相关的动作都是在此完成把接口中传入的参数解析并映射成jdbc类型解析...
原创
458阅读
0评论
0点赞
发布博客于 2 年前

如何设计一个支持高并发的系统架构

架构设计层面(1)系统拆分,将一个系统拆分为多个子系统,用dubbo来搞。然后每个系统连一个数据库,这样本来就一个库,现在多个数据库,不也可以抗高并发么。(2)缓存,必须得用缓存。大部分的高并发场景,都是读多写少,那你完全可以在数据库和缓存里都写一份,然后读的时候大量走缓存不就得了。毕竟人家redis轻轻松松单机几万的并发啊。没问题的。所以你可以考虑考虑你的项目里,那些承载主要请求的读场景,...
原创
1074阅读
0评论
1点赞
发布博客于 2 年前

【Dubbo】 -- 工作原理

dubbo的十层分层第一层:service层,接口层,给服务提供者和消费者来实现的第二层:config层,配置层,主要是对dubbo进行各种配置的第三层:proxy层,服务代理层,透明生成客户端的stub和服务单的skeleton第四层:registry层,服务注册层,负责服务的注册与发现第五层:cluster层,集群层,封装多个服务提供者的路由以及负载均衡,将多个实例组合成一个服务第...
原创
596阅读
0评论
0点赞
发布博客于 2 年前

【java并发】 --wait与notify原理

重量级锁通过对象内部的监视器(monitor)实现,其中monitor的本质是依赖于底层操作系统的Mutex Lock实现,操作系统实现线程之间的切换需要从用户态到内核态的切换,切换成本非常高。前面我们在讲Java对象头的时候,讲到了monitor这个对象,在hotspot虚拟机中,通过ObjectMonitor类来实现monitor。他的锁的获取过程的体现会简单很多.wait 和notif...
原创
3138阅读
3评论
4点赞
发布博客于 2 年前

【Nginx】

Nginx高性能的反向代理服务器正向代理:代理客户端反向代理:代理服务端http服务器服务端监听一个端口,当client发起一个请求的时候,服务端会根据请求返回相应的资源eg: apache ,nginx,tomcat,jetty静态服务器只返回静态资源,本身不具备解析jsp,servlet等资源的能力,但可以依赖第三方模块来做动态解析的补充apache(早期,并发量扛不住) , ...
原创
201阅读
0评论
0点赞
发布博客于 2 年前

【Redis】-- 核心原理(数据类型+缓存异常+集群)

一、简介分布式缓存是分布式系统中的重要组件,主要解决高并发、大数据场景下,热点数据访问的性能问题,提供高性能的数据快速访问。使用缓存常见场景是:项目中部分数据访问比较频繁,对下游 DB(例如 MySQL)造成服务压力,这时候可以使用缓存来提高效率。缓存组件有很多种,大家熟知的 Redis、Tair、MemCache 等。今天我们重点介绍 Redis 缓存数据库相关的内容知识。Redis 是开源免...
原创
442阅读
0评论
0点赞
发布博客于 2 年前

【Mysql】--事务隔离级别实现原理 (锁+mvcc)

1.事务并发带来的问题:脏读:读了未提交的事务修改的内容不可重复度 (事务内第一次读和第二次读内容不一致,有另外一个事务对数据做了修改:update或delete)幻读 (事务第二次读的时候多出来一条数据:另外一个事务中间插入了一条数据提交了: 在选定范围内一般是插入了一条数据)
原创
325阅读
2评论
0点赞
发布博客于 2 年前

【Mysql】--事务隔离级别

事务并发问题脏读,重复读,幻读事务并隔离级别读未提交读已提交可重复读串行化
原创
234阅读
0评论
0点赞
发布博客于 2 年前

【Mysql】--慢查询日志

慢查询日志是否开启,如何开启,存放位置,日志解析
原创
195阅读
0评论
0点赞
发布博客于 2 年前

【Mysql】--索引结构Btree / B+tree

对比结构图优化点
原创
228阅读
0评论
0点赞
发布博客于 2 年前

【Mysql】-- Explain分析+索引优化

# 一、索引正确的创建合适的索引是提升数据库查询性能的基础。## 索引是什么官方正解:数据本身之外,数据库还维护着一个满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,这样就可以在这些数据结构的基础上实现高级查找算法,这种数据结构就是索引。索引本身也很大,不可能全部在内存中,往往以索引文件的形式存储在磁盘上。
原创
205阅读
0评论
0点赞
发布博客于 2 年前

【Mysql】-- 逻辑架构

连接器连接器负责跟客户端建立连接,获取权限,维持和管理连接。步骤:1. 验证用户名和密码2. 根据用户名和密码认证当前连接所拥有的权限3. 连接完成后,若没有后续动作则连接处于空闲状态。
原创
167阅读
0评论
0点赞
发布博客于 2 年前

springboot --springApplication

123456789
原创
172阅读
1评论
0点赞
发布博客于 2 年前

【Java并发】-- Lock和Synchronized的选择

原创
172阅读
0评论
1点赞
发布博客于 2 年前

【Dubbo】--服务调用原理分析

文章目录1. 服务调用过程:2.源码分析2.1 服务调用方式2.2 服务消费方发送请求2.2.1 消费方请求调用路径示例:2.3.2.1 线程派发模型2.3.2.2 调用服务2.4 服务端返回调用结果2.5 服务消费方接收调用结果2.5.1 对响应数据解码2.5.2 向用户线程传递调用结果dubbo的服务调用过程主要包括发送请求,编解码,服务降级,过滤器链处理,序列化,线程派发以及响应请求等步骤...
原创
295阅读
0评论
2点赞
发布博客于 2 年前

【Dubbo】-- 服务引入原理分析

Dubbo-- 服务引入(启动阶段)服务消费端应该做哪些事情生成一个代理对象(帮我们实现网络通信的细节)建立通信连接(netty)从zk去获取目标地址(订阅节点的变化)负载均衡容错mock降级策略序列化引用远程服务的两种方式:dubbo直连(开发,测试环境)基于注册中心重点分析通过注册中心引用服务的过程,主要包括从注册中心获取配置,Invoker创建,代理类创建...
原创
207阅读
0评论
1点赞
发布博客于 2 年前

【Dubbo】-- 掌握Dubbo原理你需要明白这些

1、dubbo中"读接口"和"写接口"有什么区别?2、谈谈dubbo中的负载均衡算法及特点?3、最小活跃数算法中是如何统计这个活跃数的?4、简单谈谈你对一致性哈希算法的认识?5、服务发布过程中做了哪些事?6、dubbo都有哪些协议,他们之间有什么特点,缺省值是什么?7、什么是本地暴露和远程暴露,他们的区别?8、服务提供者能实现失效踢出是根据什么原理?9、讲讲dubbo服务暴露中本地...
原创
540阅读
1评论
0点赞
发布博客于 2 年前

【Dubbo】--服务注册与发布原理分析

文章目录1、前置工作1.1 解析配置并检查1.1 检查配置1.2 多协议多注册中心导出服务1.3 组装URL2. 导出Dubbo服务2.1 Invoker创建过程2.2 导出服务到本地2.3 导出服务到远程2.3.1 服务导出1. doLocalExport2.DubboProtocol的export3. DubboExporter. openServer(url)4. DubboExporter...
原创
1313阅读
0评论
1点赞
发布博客于 2 年前

【Dubbo】-- SPI扩展点剖析

spi,简单来说,就是service provider interface,比如你有个接口,现在这个接口有3个实现类,那么在系统运行的时候对这个接口到底选择哪个实现类呢?这就需要spi了,需要根据指定的配置或者是默认的配置,去找到对应的实现类加载进来,然后用这个实现类的实例对象
原创
150阅读
0评论
0点赞
发布博客于 2 年前

【Dubbo】-- 基本应用与核心机制

文章目录1.dubbo产生的背景2.dubbo可以满足的需求3.dubbo架构图3.1 dubbo各节点之间调用关系3.2 dubbo各个节点角色3.3 dubbo架构特点4.dubbo所支持的协议:5. Dubbo核心的配置:5.2 配置之间的关系:5.3 配置优先级6.服务调用时阻塞的吗?调用流程图?7.容错机制7.1 dubbo提供了哪些容错机制?7.2 如何配置?8.服务降级?8.2 du...
原创
267阅读
1评论
0点赞
发布博客于 2 年前

【SpringBoot】-- 核心原理

springboot是服务于spring框架的框架,基于了约定由于配置的理念;1.约定由于配置:体现:maven的目录结构默认以jar的方式打包默认会有resource文件夹main方法运行就会启动web工程,启动时创建一个内置的tomcat容器,将当前项目部署在此容器中默认application.properties为配置文件maven里面引用了spring-boot...
原创
493阅读
2评论
1点赞
发布博客于 2 年前

【Mybatis】 -- 工作流程+核心对象生命周期

JDBC连接数据库的问题1.代码重复2.结果集处理复杂,需要手动处理,对应表的字段和类型3连接管理复杂 ,需要手动打开和关闭连接4.sql写到了业务逻辑里面 耦合度太高 不利于管理mybatis特性使用连接池对连接进行管理sql和代码分离,集中管理参数映射和动态sql结果集映射缓存管理重复sql的提取插件机制工作流程图核心对象的生命周期在编程式使用的这个 dem...
原创
138阅读
0评论
0点赞
发布博客于 2 年前

【Java并发】-- Condition机制原理分析

Condition之前用synchronized的时候,使用wait/notify可以实现线程间的通信。除此之外,JUC包里提供了类似的线程通信机制,Condition 是一个多线程协调通信的工具类,可以让某些线程一起等待某个条件(condition),只有满足条件时,线程才会被唤醒;Condition基本使用ConditionWaitpublic class ConditionDem...
原创
637阅读
0评论
0点赞
发布博客于 2 年前

【Java并发】-- ConcurrentHashMap如何实现高效地线程安全(jdk1.8)

1.传统集合框架并发编程中Map存在的问题?2.早期改进策略HashTableHashTable相比HashMap是线程安全的,因为HashTable所有的方法都是加了synchronized的,锁的是整个hashMap,也就是我们说的锁的粒度比较大,由于最基本的put,set操作都加了互斥锁,造成的结果就是同一时间点只能由一个线程put或只能get,并发操作时所有的put,get操作都...
原创
2149阅读
1评论
6点赞
发布博客于 2 年前

【Java并发】-- synchronized原理 (偏向锁,轻量级锁,重量级锁膨胀过程)

放大了看,会让你惊艳的一张图。什么是Monitor?可以理解为一个同步工具,也可以描述为一个同步机制。所以java对象天生是一个Monitor, 每个Object对象里面markOop --> monitor() 里可以保存ObjectMonitor对象。
原创
498阅读
1评论
0点赞
发布博客于 2 年前

【Java并发】-- ReentrantLock 可重入锁实现原理2 - 释放锁

接着上一篇分析……给一扇传送门,【Java并发】-- ReentrantLock 可重入锁实现原理1 - 获取锁当ThreadA线程执行完任务后调用finally中的unlock()方法释放锁的时候会经历什么样的操作。ReentrantLock.unlock()1. ReentrantLock中的unlock() /* * 释放锁 */ public void unlock(...
原创
601阅读
1评论
1点赞
发布博客于 2 年前

【Java并发】-- ReentrantLock 可重入锁实现原理1 - 获取锁

Lock有很多具体的锁的实现,但最直观的实现是ReentrantLock重入锁,也是平时我们用的最多的。重入锁是独占锁的代表。ReentrantLock 重入锁表示可重入的锁,举个例子:当线程t1通过调用lock()方法获取锁之后,再次调用lock,是不会再阻塞获取锁的,直接增加重试次数就行了。synchronized 和 ReentrantLock 都是可重入锁;来个简单的demo来说明一...
原创
573阅读
2评论
2点赞
发布博客于 2 年前

【Java并发】-- 原子类+并发工具

原创
113阅读
0评论
0点赞
发布博客于 2 年前

【Java并发】-- 线程池

文章目录1.为什么要使用线程池?2.Executors提供的四种线程池区别以及应用场景:3.线程池有哪几种工作队列?ArrayBlockingQueue - 有界的数组队列 :LinkedBlockingQueue - 可支持有界/无界的队列 :DelayedWorkQueue优先级队列。PriorityBlockingQueue : 优先队列SynchronousQueue : 队列长度为1...
原创
150阅读
1评论
0点赞
发布博客于 2 年前

【Java并发】-- 并发容器

原创
122阅读
0评论
0点赞
发布博客于 2 年前

【Java并发】-- Lock体系

在 Lock 接口出现之前, Java 中的应用程序对于多线程的并发安全处理只能基于synchronized 关键字来解决。但是 synchronized 在有些场景中会存在一些短板,也就是它并不适合于所有的并发场景。 但是在 Java5 以后, Lock 的出现可以解决synchronized 在某些场景中的短板,它比 synchronized 更加灵活。Lock 的实现Lock 本质上是...
原创
146阅读
0评论
0点赞
发布博客于 2 年前

【Java并发】-- 并发关键字(synchronized / volatile / final)

原创
230阅读
0评论
1点赞
发布博客于 2 年前

【Java并发】-- 并发理论(JMM)

原创
144阅读
0评论
0点赞
发布博客于 2 年前

【Java并发】-- 并发基础

多线程发展历史一个指令在一个cpu上运行,用户输入一个指令,cpu处理完毕之后返回结果。批处理操作,将多个指令集中写入到磁带上,一次交给CPU处理,返回结果。批处理操作不能解决串行化等待的问题,如果一个线程(读写磁盘)指令执行时间比较长,后面的指令需要一直等待,CPU资源也处于阻塞态得不到充分利用。多线程技术通过线程切换可以实现多个线程同时执行,从而在一定程度上提升性能和cpu的利用率...
原创
115阅读
0评论
0点赞
发布博客于 2 年前

【并发工具】- countdownlatch、CyclicBarrier、Semaphore

这三个类用于同步一批线程的行为,分别是CountDownLatch、Semaphore和CyclicBarrier。
原创
265阅读
0评论
0点赞
发布博客于 2 年前

【Java并发】-- AQS 原理

在 Lock 中,用到了一个同步队列 AQS,全称 AbstractQueuedSynchronizer,它是一个同步工具, 也是 Lock 用来实现线程同步的核心组件, 如果你搞懂了 AQS,那么 J.U.C 中绝大部分的工具都能轻松掌握;
原创
472阅读
0评论
0点赞
发布博客于 2 年前

【Java并发】--读写锁 ReentrantReadWriteLock

关于锁,我们了解最多的基本都是排它锁,也就是这些锁在同一时刻只允许一个线程进行访问,而读锁在同一时刻可以允许多个线程访问,但写锁访问时候,所有的线程和其他写线程都会被阻塞。读写锁维护了一对锁,一个读锁,一个写锁;
原创
240阅读
2评论
1点赞
发布博客于 2 年前

图解MQ应用场景+技术选型

为什么使用消息队列啊?消息队列有什么优点和缺点啊?kafka、activemq、rabbitmq、rocketmq都有什么区别以及适合哪些场景?
原创
418阅读
2评论
0点赞
发布博客于 2 年前

动态代理原理 (jdk动态代理+cglib动态代理)

场景:
协调调用者与被调用者之间的关系,降低耦合度,保护真实对象静态代理缺点:
一个代理对象只能代理一类对象
如果要代理多个对象则需要多个proxy改造静态对象就需要引入动态代理:
实现方式:
原创
508阅读
1评论
1点赞
发布博客于 2 年前

消息队列的可靠性如何保证?(RabbitMQ)

如何保证消息队列的高可用啊?MQ的缺点,我已经说过了,有好多,可以文章链接跳转查看,导致系统可用性降低,等等。所以只要你用了MQ,接下来问的一些要点肯定就是围绕着MQ的那些缺点怎么来解决了。...
原创
158阅读
2评论
0点赞
发布博客于 2 年前

消息队列如何保证消费幂等性?

其实这个很常见的一个问题,这俩问题基本可以连起来问。既然是消费消息,那肯定要考虑考虑会不会重复消费?能不能避免重复消费?或者重复消费了也别造成系统异常可以吗?这个是MQ领域的基本问题,其实本质上还是使用消息队列如何保证幂等性,这个是架构里要考虑的一个问题。
原创
308阅读
0评论
0点赞
发布博客于 2 年前

消息队列如何保证消息可靠性传输? (RabbitMQ)

用mq有个基本原则,就是数据不能多一条,也不能少一条,不能多,就是之前提到过的重复消费和幂等性问题。不能少,就是说这数据别搞丢了。那这个问题你必须得考虑一下。
原创
397阅读
2评论
0点赞
发布博客于 2 年前

【JVM学习】--垃圾回收

一、如何判定对象为垃圾对象1.1 引用计数法(不采用)1.1.1 what?在对象中添加一个引用计数器当有地方引用此对象,引用计数器+1引用失效时候,引用计数器-11.1.2 优势:简单高效1.1.3 劣势:在堆内部相互关联(循环引用时),对外的栈内没有指向该对象的引用时,引用计数器的值不为0,这部分垃圾不会被回收。1.2 可达性分析法1.2.1 what?...
原创
158阅读
22评论
0点赞
发布博客于 2 年前

“字面量”和“符号引用”

最近看jvm时遇到了“字面量”和“符号引用”这两个概念,它们被存放在运行时常量池,看了一些博客以后对这两个概念有了初步认识。字面量可以理解为实际值,int a = 8中的8 和 String a = "hello"中的hello都是字面量符号引用就是一个字符串,只要我们在代码中引用了一个非字面量的东西,不管它是变量还是常量,它都只是由一个字符串定义的符号,这个字符串存在常量池里,类加载的时候第...
原创
906阅读
1评论
1点赞
发布博客于 2 年前

【JVM学习】--内存分配策略

# 1、基本原则:- 优先分配到Eden;- 大对象直接分配到老年代- 长期存活的对象分配到老年代- 空间分配担保(跟老年代借用空间)- 动态对象年龄判断
原创
209阅读
4评论
0点赞
发布博客于 2 年前

【java基础】-- 反射机制

java反射机制是在运行状态中,对于任意一个类(class文件),都能够知道这个类的所有属性和方法;对于任意一个对象都能够调用它的任意一个方法和属性。动态获取类中的信息,就是java反射可以理解为对类的解剖;提高了应用程序的扩展性。...
原创
174阅读
3评论
0点赞
发布博客于 2 年前

【JVM学习】--内存管理 / 对象创建

这wl里写自定义目录标题WLAN欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入...
原创
179阅读
0评论
0点赞
发布博客于 2 年前

【数据结构与算法】-- 6.2 链表的5个经典操作--单链表检测存在环和求环长

1.如何判断单链表里面是否有环?设定两个指针,一个慢指针,一个快指针,慢指针每次往前移动一步,快指针同时移动两步。如果链表中存在环,则快慢指针一定会相遇,否则快指针首先遇到null(尾指针);(1)为什么链表中存在环快慢指针就一定会相遇呢?举个简单的例子,小红和小明在操场上跑步,小明的速度是小红的两倍,假定他们同时从起点出发,那么小红跑完一圈的到达起点的时候小明一定会跑完两圈同时也到达起点,...
原创
196阅读
2评论
0点赞
发布博客于 2 年前

【数据结构与算法】-- 6.1 链表的5个经典操作--单链表反转

本文来分享关于链表的五种经典操作的实现:单链表反转链表中环的检测两个有序的链表合并删除链表倒数第n个结点求链表的中间结点1.单链表反转实现 // 单链表反转 public static Node reverse(Node list) { Node curr = list, pre = null; while (curr != null...
原创
293阅读
3评论
0点赞
发布博客于 2 年前

【数据结构与算法】-- 5. 如何实现一个队列(顺序队列和链式队列)

队列跟栈一样, 也是一种操作受限的线性表数据结构。它具有先进先出的特性, 支持在队尾插入元素, 在队头删除元素, 那究竟该如何实现一个队列呢?跟栈一样, 队列可以用数组来实现, 也可以用链表来实现。 用数组实现的栈叫作顺序栈, 用链表实现的栈叫作链式栈。 同样, 用数组实现的队列叫作顺序队列, 用链表实现的队列叫作链式队列。顺序队列package com.anomalous.array;...
原创
485阅读
3评论
0点赞
发布博客于 2 年前

【数据结构与算法】-- 4. 如何实现一个栈(顺序栈和链式栈)

栈的操作特性上来看, 栈是一种“操作受限”的线性表, 只允许在一端插入和删除数据。当某个数据集合只涉及在一端插入和删除数据, 并且满足后进先出、 先进后出的特性, 我们就应该首选“栈”这种数据结构。如何实现一个栈?实际上, 栈既可以用数组来实现, 也可以用链表来实现。 用数组实现的栈, 我们叫作顺序栈, 用链表实现的栈, 我们叫作链式栈。顺序栈package com.anomalous...
原创
413阅读
2评论
0点赞
发布博客于 2 年前

【初级算法】-- 8.验证回文字符串(利用双指针法)

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。(“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串)示例 1:输入: “A man, a plan, a canal: Panama”输出: true示例 2:输入: “race a car”输出: false/...
原创
218阅读
4评论
0点赞
发布博客于 2 年前

【操作系统】--6.设备管理

原创
118阅读
1评论
0点赞
发布博客于 2 年前

【操作系统】--5.文件管理

原创
107阅读
0评论
0点赞
发布博客于 2 年前

【数据结构与算法】--3.复杂度分析

一.为什么需要复杂度分析?代码跑一边做统计监控的数据虽然很准确,但是属于事后统计分析,局限性在于:依赖测试环境(硬件)受测试数据规模的影响很大二、什么是复杂度分析数据结构和算法是解决“如何让计算机执行时间更快,更生空间”的解决问题。所以要从执行时间和占用空间两个维度来评估算法的性能。于是用了时间复杂度和空间复杂度两个概念来描述性能问题,统称为复杂度;复杂度描述的是算法执行...
原创
312阅读
0评论
0点赞
发布博客于 2 年前

【数据结构与算法】--2.学习方法

思考:为什么要学?最大的感受是学习的过程可以锻炼自己的性能意识,写代码的时候会潜意思的考虑性能问题,所以写出低效代码的情况会越来越少。是什么?数据结构指的是“一组数据的存储结构”,算法指的是:“操作数据的一组方法”。数据结构是为算法服务的,算法是要作用在特定的数据结构上的。学什么?1.复杂度是算法与数据结构的精髓,是对效率和资源消耗量的一个衡量,学习算法与数据结构就要学会对其进行复杂...
原创
1047阅读
2评论
1点赞
发布博客于 2 年前

【操作系统】--4.内存管理

原创
188阅读
4评论
0点赞
发布博客于 2 年前

【操作系统】--3.进程调度与死锁

原创
201阅读
3评论
0点赞
发布博客于 2 年前

【操作系统】--2.进程管理

原创
1273阅读
1评论
0点赞
发布博客于 2 年前

【操作系统】--1.概论

导图
原创
183阅读
1评论
0点赞
发布博客于 2 年前

【数据结构与算法】-- 1.知识图谱

想扎实内功,想提高大脑的思考力,想提升看问题的深度,绕不开数据结构与算法,来一份数据结构和算法的知识图谱,每一个都需要一点一点的啃,学技术切忌浮躁,沉淀中。...
原创
1221阅读
0评论
1点赞
发布博客于 2 年前

【Java并发】 -- JMM如何解决原子性、可见性、有序性问题

ava中提供了一系列和并发处理相关的关键字,比如volatile、Synchronized、final、juc等,这些就是Java内存模型封装了底层的实现后提供给开发人员使用的关键字,在开发多线程代码的时候,我们可以直接使用synchronized等关键词来控制并,使得我们不需要关心底层的编译器优化、缓存一致性的问题了,所以在Java内存模型中,除了定义了一套规范,还提供了开放的指令在底层进行封装后,提供给开发人员使用
原创
1248阅读
1评论
1点赞
发布博客于 2 年前

【初级算法】-- 7.顺时针旋转二维数组90度

给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。不要使用另一个矩阵来旋转图像。示例 1:给定 matrix =[[1,2,3],[4,5,6],[7,8,9]],原地旋转输入矩阵,使其变为:[[7,4,1],[8,5,2],[9,6,3]]示例 2:给定 matrix =...
原创
1538阅读
1评论
0点赞
发布博客于 2 年前

【初级算法】-- 6.加一输出新数组

给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123+1=124。示例 2:输入: [4,3,2,9]输出: [4,3,3,0]解释: 输入数组表示数字 4329+1=...
原创
161阅读
1评论
1点赞
发布博客于 2 年前