自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 深入理解CS-LAB

计算机原理基础知识对于做开发的打工人,怎么强调其重要性应该都不过分。相比看书来讲,理解计算机原理的最好方式莫过于实践,实现一个虚拟机模拟计算机工作过程。显然这对于上班开发党来说,从头到尾实现并不现实。笔者经过一段时间的实践,完成南京大学CS实验大部分内容,相对于看书收获颇多,对于CS原理的理解较以前更加深刻。当然实验内容都比较基础,适合想尝试写下CS代码的同学。

2021-02-09 11:19:57 1014

原创 ID生成器——雪花算法

分库分表中经常遇到需要保证多个分库或分表中的`id`唯一性,为区分同一个表不同分库中的id,通常需要引入ID生成器中间件来保证id唯一性。当`id`作为分库分表参数时,有时会希望属于同一类别的数据存入到一个库中,便于查询、维护,此时`id`本身则需要包含某些用于识别。文中用场景——“用户发帖”来介绍雪花算法ID生成器的实现。基因法实现ID生成器

2020-10-15 16:08:58 4516

原创 缓存与数据库一致性策略

在缓存与数据库一致性方案中,最佳方案是采用先淘汰缓存后更新库表策略,通过缓存过期机制、双删可以满足绝大部分场景需求,但在高并发、对于数据一致性时延要求较高的场景中,可采用分布式读写锁策略。

2020-09-17 18:00:36 662 2

原创 你真的理解IO流吗

IO没有性能优劣之分,技术的选型需要根据实际场景来选择。 标准IO适用于大多数文件IO操作,`stdio`库对于多数场景做了相应优化,尽量减小系统调用,用户可定义缓冲大小、定义缓冲形式等等来满足需求,具体可参考相应OS函数手册; 在标准IO无法满足场景或性能无法进一步优化的情况下,可采用系统IO,如在读写网套接字无需缓冲时优化等等; 内存映射mmap则适用于大文件操作,对于特殊应用需要掌控`page cache`的可采用直接IO文章以文件IO为例,简要介绍IO原理,如何选择合适的IO操作

2020-07-29 18:23:51 345

原创 连接池大小如何优化

对于WEB项目开发,涉及网络调用时,连接池是很常用的技术。为什么要使用连接池技术,连接池带来的优势具体体现在哪里,连接池大小是不是越大越好等这些问题是开发过程中技术选型需要思考的问题,本文通过一个简单的案例揭开关于连接池的原理。文章介绍了连接池的原理,实现了一个简单的数据库连接池Demo,并进行高并发测试,发现连接池大小并不是越大越好,并介绍了连接池大小选择原则。

2020-07-06 21:36:26 508

原创 Spring Security Oauth2实践(3) - 单点登录(SSO)

本次分享基于Oauth2实现SSO单点登录的实践。这个场景经常用于企业开发,集成多方系统认证。分享CAS与Oauth2实现上的区别,给出Oauth2实现的一个demo,但在单点登出时,Oauth2服务端及客户需要基于过滤器方式定制开发实现。

2020-03-30 03:15:15 478

原创 Spring Security Oauth2实践(2) - 客户端对接

本文基于Spring Security OAuth2提供一个Oauth2客户端对接demo,采用SpringBoot 注解@EnableOAuth2Client配置客户端,成功实现登录、授权、获取资源信息等过程,提供一种Oauth2客户端的实践

2020-03-08 01:20:40 3271 2

原创 Spring Security Oauth2实践(1) - 授权码模式

笔者最近花了点时间研究Oauth2原理,基于spring写了一些demo用于实践探索,深深体会到Spring Security Oauth2框架的便利,框架帮我们封装太多了底层实现,所以使用起来非常方便,除了可以为第三方应用提供授权,也可以作为应用的登录框架。文章基于Spring Security Oauth2.0授权码模式实践,采用SpringBoot搭建Demo讲述基本使用过程。概述...

2019-09-21 23:13:03 3888 6

原创 两种Java Http客户端 httpclient4.3 +RestTemplate

apache httclient模式(4.3版本)public class HttpClientUtils { public static final int connTimeout=10000; public static final int readTimeout=10000; public static final String charset="UTF-8"...

2019-08-27 19:44:55 320

原创 利用jstack工具分析JVM线程

笔者是WEB JAVA后台开发,最近在线上遇到过几次服务不可用问题,基本现象是接口请求无响应或响应非常慢达到分钟级别。一般问题发生时我们都会去查看日志,经常遇到没有日志的情况(此时服务无法响应client请求),甚至要去找几个小时前的日志现象发生时,有些接口甚至没有日志打印,查找起来很困难,利用jvm的线程栈工具jstack对于查找问题有很大帮助。文章以SpringBoot为框架开发一个we...

2019-07-05 15:31:09 1198

原创 ElasticSearch聚合和OR条件查询

在使用ElasticSearch中经常会遇到统计、查询需求,实现类似sql分组计算、条件查询的语法,ES在这些方面都支持的较不错,用起来也比较方便。笔者就自己开发中用到的Java API举例如下。分组聚合查询实现类似select avg(executionTime) from t WHERE executionDate between 'A' AND 'B' group by execut...

2019-02-14 15:55:11 25828

原创 基于Spring搭建文件服务器

文件服务器的搭建架构有很多种,如基于nginx+vsftp、nginx+fastDFS等架构,其中vsftp或fastDFS用于文件读写、上传存储、下载,nginx用于映射文件 ,方便http访问静态文件,实现在线预览图片或下载等功能。这种架构使用起来很方便,而且fastDFS支持集群、主从备份等,因而很采公司或开发人员的青睐,但这种构架是无法满足某些场景的需求,如增加文件访问权限校验、时效等,...

2018-10-27 15:26:13 4479

原创 ElasticSearch使用入门及拼音搜索介绍

最近有个项目需要用到拼音搜索并高亮显示所匹配的中文,其实拼音搜索可以通过将中文转化为拼音存储在库表如mysql中,然后通过sql like语句查询搜索到对应的中文,在一些并发要求并不高、中文已知的情况下是完全可以做到拼音搜索。但是由于项目要求不仅能够搜索出来对应的中文,但是对于高亮显示匹配的中文难度成本就比较高了,此时需要通过中文拼音分词来实现。 经过一番调研,鉴于elasticsea...

2018-08-04 14:49:17 9135 4

原创 基于docker搭建jenkins+maven代码构建部署平台

由于项目开发,经常需要在本地搭一些环境进行开发或测试,大家知道搭环境、装软件、装中间件是件非常麻烦的事情,有些软件的安装可能需要依赖其它环境的安装,如安装rabbitmq首先需要Erlang语言环境,一整套安装下来不仅浪费时间而且还各种问题出现,严重影响开发进度。对于开发者来讲,life is short, 尽一切可能提高开发效率。 Docker的出现对于技术界无疑是一件划时代的事件,...

2018-04-16 20:00:01 17600 3

原创 基于BeautifulSoup简单爬虫

Python语法简单、框架多、代码少,用于爬虫是一个不错的选择。爬虫是模拟Http请求获取静态网页,并解析网页的html得到相应的信息的一种方法。文章针对糗事百科的段子做爬虫练习,并用Pandas作简单统计写入到csv文件请求网页通过urllib框架模拟http请求,获取html,分析网页html标签,针对性地提取对应信息。import urllibimport rei...

2018-04-15 22:06:09 390

原创 Python数据库基本操作

最近有个项目由于版本原因使某些重要数据丢失、未存储到数据库中,需要从线上故障日志中统计这些数据,并将统计结果输出并补偿数据库。刚开始对python并不是很熟练,最先在服务器上采用grep|awk等命令获取想要的格式化数据文件后,由于数据冗余,所以手动采取措施显然不现实,因此想到用Java来读取文件并进行此数据操作,可代码写下来发现太繁杂了,不适合做日志数据处理。经Leader提醒,毅然决定采...

2018-04-05 21:58:21 352

原创 Sonarqube代码审查平台安装_JDK1.7+Maven3.3.9

基于JDK1.7代码审查平台sonarqube安装sonarqube已经更新到7.0版本了,但是从5.6版本以后就只支持JDK1.8了,网上大部分资源也都是基于JDK1.8的,在这方面走了不少坑,尤其是在后面用Maven-scanner扫描Maven项目的时候,各种报错。经过几天摸索终于在Linux中搭建成功了,JDK版本用的是1.7,因此本文对于项目JDK版本用的是1.7的想搭建sonarq...

2018-02-26 14:20:04 3087

原创 SpringMVC自定义绑定参数、及Controller增强处理

在基于SpringMVC的WEB服务开发过程中,经常会遇到如入参解密、返参加密这样的过程,这个过程可能需要很多代码可能只需要一行调用,但是每个Controller都需要调用这样一个方法就可能会感觉繁琐,而且不利于主要业务代码阅读,有时会影响项目架构。本文通过一个小案例,基于Spring AOP思想来解决类似这样的问题,希望能起到举一反三的作用,在开发过程中能够解决一些问题、减小代码的重复,用最少的

2018-01-20 16:43:07 8013 5

原创 SpringTask执行定时任务中调用方法中断问题

使用SpringQuartz轻量级定时任务时,出现任务中的方法调用链未执行完,也未抛出异常,然后到下一次时间就继续执行下一次的任务。最后debug调试是因为异常被捕获未在打印错误信息导致的。

2017-11-26 16:51:19 5442

原创 算法练习__二叉查找树

代码只是一时的思考,算法和架构是一直需要思考的。树结构是递归的最好练习方式,文章找一些基本二叉查找树的题目练习一下。主要涉及到查找最小元素、统计元素个数等问题遍历找最小距离添加元素、查找最小元素顺序打印元素求二叉树深度,深度优先搜索找第k个最小元素

2017-10-19 17:53:11 307

原创 Spring Redis与ActiveMQ发布订阅模式源码分析

文章对SpringRedis和ActiveMQ的源码及使用简要分析一下,希望能起到抛砖引玉的作用。笔者之前在博客中写了一篇关于生产消费者模式的一个工程使用案例,10W级数据更新操作__生产消费者模式。其实发布订阅模式与生产消费者只是两种模式上的不同,在业务处理逻辑上还是比较相似的。前者数据结构是一对多队列模式,后者是点对点队列模式。

2017-09-10 21:56:27 3154

原创 Hadoop(3)__Hive安装过程与hive sql初步使用

HIVE是基于Hadoop的一个数据仓库,可以将结构化的数据文件映射成一张表,并提供类SQL的查询语句,其SQL操作的基本原理是MapReduce,在本文最后的例子中,可以发现在某些操作时,Hive SQL其实是调用了MapReduce过程进行处理,因此使用Hive可以完成数据处理的操作,避免编写MapReduce的业务逻辑,提高开发效率。

2017-09-09 12:26:39 530

原创 Netty-SocketIO实现服务器消息推送

在有些场景下,如股票价格实时显示、直播、在线聊天等场景,则需要服务器主动向客户端推送消息,显然Http协议并不太适合完全这项工作,而Netty-SocketIO是基于Netty框架下用Java实现Socket通信的组件,可用于服务器主动推送消息到客户端的情形。

2017-08-27 15:21:18 16806 4

原创 Linux上silk微信语音转换成mp3格式

最近项目中有个需求,要求把silk微信小程序语音转换成mp3格式,现在Linux中已经实现了,windows的实现方式也很简单,可在网上搜索其它方式,文章也给出了几个链接可以参考。以下是对笔者在实践过程总结,亲测可用。

2017-08-24 21:14:27 2521 1

原创 HADOOP(2)__Mapreduce分区、排序、分组

Hadoop生态中的Mapreduce在map阶段可以将大数据或大文件进行分区,然后到Reduce阶段可并行处理,分区数量一般与reduce任务数量一致;自定义实现Hadoop的WritableComparable接口(序列化并排列接口)的Bean在mapreduce中进行排序;分组的好处是在Reduce阶段时可将数据按照自定义的分组属性进行分组处理。

2017-08-12 11:37:18 682

原创 HADOOP(1)__Mapreduce_WordCount统计单词数

最近开始接触大数据方面的学习,准备做一个系列笔记来介绍笔者的学习过程。文章简单介绍Hadoop的集群搭建、Mapreduce编程的主要流程及如何提交到Linux服务器中的yarn运行MapReduce程序。针对一些常见问题也作了简单的说明。HADOOP集群搭建HADOOP是利用服务器集群,根据用户的业务逻辑,对海量数据进行分布式处理的大数据框架。

2017-07-30 11:28:55 730

原创 机器学习_scikit-learn中的SVM

支持向量机(SVM)是一种可用于分类和回归的有效监督学习方法,是一种基于最大间隔的分类器。对于 SVM 的理解需要很多数学理论知识,尤其是对于拉格朗日对偶求解的理解。由于水平有限,文章并未用python实现SVM算法,而是用Scikit-learn中的libsvm来简单介绍下支持向量机的用法。

2017-07-23 20:54:39 923

原创 机器学习_朴素贝叶斯算法识别手写数字

朴素贝叶斯算法是基于条件概率的一种分类算法,通过概率大小来进行分类,经常用于分类文档。本文用python实现朴素贝叶斯算法,并用kaggle识别手写数字的数据集来训练,得到81%的准确率。虽然准确率可能比不上其它如SVM、神经网络等算法,但是朴素贝叶斯算法相对来说简单,计算速度也较快。朴素贝叶斯理论说明朴素贝叶斯的基本公式: P(c1|w)>P(c0|w)P(c1|w)...

2017-07-17 23:59:16 6406 4

原创 机器学习_逻辑回归分类

逻辑回归分类是机器学习中常用的一种分类方法,采用单位阶跃函数的特点进行分类。本文试图用理论推导、python实现来说明该算法。单位阶跃函数单位阶跃函数即Sigmoid函数,其值范围在0~1之间,并且在x=0处会产生跳跃。表达式如下: g(z)=11+e−z g(z)=\frac{1}{1+e^{-z}} 函数图形如下。该图形有个特点是,当x<<0时,f(x)=0; 当x>>0时,f(x)=

2017-07-14 22:40:51 466

原创 zookeeper学习__分布式共享锁简单Demo

zookeeper是一个分布式协调服务,为用户的分布式应用提供协调服务。使用范围有:主从协调、服务器节点动态上下线、统一配置管理、分布式共享锁、统一名称服务…… 文章利用zookeeper实现简单的分布式锁zookeeper虽然提供的服务很多,但底层只有两个功能 1.管理程序提交的数据; 2.为程序提供数据节点监听服务分布式锁的简单实现分布式系统多个应用需要操作同一个资源,为资源操作线程

2017-07-09 23:13:35 422

原创 10W级数据更新操作__生产消费者模式

背景需求 最近有这么一个需求:由于本地系统信息与另一个系统数据可能不一致,两个系统有各自的独立数据库和业务,在通信过程中网络等原因,导致两者之间的关键信息有差异,因此本地数据库中可能有10W条记录需要更新,本地数据库的信息需要逐条与远程http请求数据,对比或更新。技术分析如果将本地数据库全部取出放入一个集合中,然后遍历并发送http请求核对数据,显然不太现实。存储10W条记录需要多大的缓存?

2017-07-07 10:30:03 691

原创 算法练习_LeetCode_链表1

最近有空就在LeetCode上刷下题,在工作中虽然很少自已写算法,JDK已经的封装好了,直接拿来就用,但是平常有空刷下题对于理解这些封装的集合API及选用还是挺有帮助的。毕竟不是计算机科班出身的,数据结构与算法平常还是要多补下。 删除链表倒数第n个数 Given a linked list, remove the nth node from the end of list and

2017-06-30 15:51:06 247

原创 Spring事务管理——回滚(rollback-for)控制

探讨Spring事务控制中,异常触发事务回滚原理。文章进行了6种情况下的Spring事务是否回滚。 以下代码都是基于Spring与Mybatis整合,使用Spring声明式事务配置事务方法。1.不捕获异常(一般处理方式)代码,其中contentMappger.updateWithErrTest(31L); 是SQL语句错误,用来测试回滚。/** * 删除多条记录 */

2017-06-18 15:24:52 24951

原创 VirtualBox安装ubuntu虚拟机,配置网络

导语 对于要学习Linux的或者需要用到Linux配置虚拟,电脑配置不是很高的同学,VirtualBox由于启动占用电脑资源少而且开源免费,是个不错的选择。本文简单介绍在Win7_64位下的安装步骤。VitualBox安装VitualBox网上有许多版本,但是很多有或多或少有启动报错问题。目前问题较少比较稳定的版本为4.3.12,安装过程比较简单,一路next就OK。Ubuntu安装下载ubu

2017-06-15 21:34:08 2046 2

原创 HTTP的“长连接"初探

背景 项目的一个功能:持续异步通知下游服务器消息,获取下游服务器的消息返回并处理。思路(1)开启一个timer.schece线程启动定时任务; (2)服务与下游的url(Controller)建立一个Http连接,并response.writer消息; (3)2min钟后,收到下游的消息或者没有收到,再response.writer消息,发现此时行不通。服务端会报空Host错误。问题分

2017-06-08 14:58:11 617

原创 解决Zookeeper启动zkServer.cmd闪退问题

主要提供一种解决启动zKServer.cmd闪退的解决思路,遇到类似的问题,都可以采用以下的思路解决。

2017-05-27 16:05:09 33648 4

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除