自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Leeon的博客

所有的迷茫都是想得太多,做的太少,共勉!

  • 博客(160)
  • 资源 (4)
  • 收藏
  • 关注

原创 供应链业务MQ应用场景经验总结

写在前面:做供应链业务一年有余了,这一年里MQ帮我们解决了很多问题,在此做一些经验总结;另外,各个公司消息中间件提供的功能大同小异,最基础的推消息、下游异常重试机制应该是都具备的,本文所述也是建立在这样的能力基础上的~场景一:削峰填谷,降低响应时间,下游异常自动重试、保证成功举例:对库存模块而言,入库是一个增量操作,当通过了数据校验之后就理应执行成功,但入库操作常常伴有复杂的写库逻辑及乐观...

2018-12-16 16:31:31 1121 2

原创 PHP实现Redis单据锁,防止并发重复写入

一、写在前面: 在整个供应链系统中,会有很多种单据(采购单、入库单、到货单、运单等等),在涉及写单据数据的接口时(增删改操作),即使前端做了相关限制,还是有可能因为网络或异常操作产生并发重复调用的情况,导致对相同单据做相同的处理;为了防止这种情况对系统造成异常影响,我们通过Redis实现了一个简单的单据锁,每个请求需先获取锁才能执行业务逻辑,执行结束后才会释放锁;保证了同一单据的并发重复操作...

2018-04-10 00:03:40 6716

原创 MySQL InnoDB锁机制分享

写在前面:在设计新零售供应链wms(仓库管理系统)库存模块时,为了防止并发情况对库存的影响,查阅了一些资料,对InnoDB锁机制有了更全面的了解,在此做出分享,如有疏漏望不吝指正,愿共同进步!(此篇为1.0版本,后续随理解深入,会逐步迭代完善~)博客搬家:https://segmentfault.com/a/1190000014133576一、为什么要加锁 锁机制用于管理对共享...

2018-04-01 01:40:38 1541 1

原创 正则匹配所有括号中的内容&PHP实现

正则表达式:(?<=【)[^】]+ 注:以匹配中文括号中内容为例,如果匹配非中文括号,则需要在括号前增加转义符PHP实现示例:<?php $strSubject = "abc【111】abc【222】abc【333】abc"; $strPattern = "/(?<=【)[^】]+/"; $arrMatches

2018-06-21 22:00:37 7240

原创 PHP获取二维数组中指定Key的重复Value

<?php/** * 判断二维数组中指定Key是否存在重复Value * @param array $arrInput 二维数组 * @param string $strKey 键名 * @return bool */function hasRepeatedValues($arrInput, $strKey){ //参数校验 if (!is_array($a...

2018-05-13 14:59:31 3505

原创 PHP三种数组合并方式区别示例

一、写在前面目前工作中接触到的PHP数组合并方式主要有三种: 1、+操作符 2、array_merge() 3、array_merge_recursive()它们的区别主要体现在对于相关键名(数字键名、字符串键名)的处理方式,下面本文将以两个实际例子来体现~二、相同字符串键<?php$arrFirst = [ "first_key" => 1...

2018-05-13 14:55:38 12840 1

原创 Mysql 【order by 不唯一字段】与【limit】混用的坑

背景: 分页查询排序后的数据,是一个非常常见的业务场景;但当使用不唯一的字段排序时,分两页查询的数据可能出现同一条数据,并丢失数据!示例: 同样的查询条件,offset不同,竟然取到了同一条数据?!原因解析(取自Mysql官方文档): 上面官方文档里面有提到如果你将Limit row_count与order by混用,mysql会找到排序的row_count行后立马返回,而不...

2018-03-30 17:12:22 3379

原创 通过实际业务场景理解后端接口的幂等性

写在前面:之前在设计接口时因经验尚浅,并未过多考虑幂等性,但这两天出现的一个线上问题让我认识到了某些情况下接口幂等性的重要性;非幂等场景: 服务A将单据A信息通过RPC远程过程调用传给下游服务B接口(非幂等接口)用于生成关联单据B,服务B接口会校验是否已经接收过单据A,如果已接收过,会报错『重复的单据』,如果未接收过,则生产关联单据B并写库,将结果返回服务A,服务A收到结果后修改此单据状态,...

2018-03-30 17:09:16 1872 3

原创 expect实现自动登录脚本

写在前面:目前在公司是一人一台虚拟机,大多数工作都要在虚拟机上完成,为此每天要执行很多次【ssh xxx@xxxxxx】指令登录虚拟机;有很多方式解决这个问题,如使用xshell、secureCRT等工具记录常用的连接,我就写了一个简单的脚本实现一键登录~login.sh脚本内容如下:#!/usr/bin/expectspawn ssh xxx@xxxxxxexpect "*passw...

2018-03-30 16:47:46 3182

原创 RD基本功——Vi基础与最常用指令

写在前面:作为常年与服务器、Linux打交道的后端开发RD,基本的vi操作是一定要运用非常熟练的;本篇文章就记录了一些日常工作中最常用的的指令,希望能和大家共同学习共同进步;一、vi与vim的区别 vim是vi的升级版本,它兼容vi的所有指令,并提供一些新特性,如以不同颜色标识语法等;(之后会总结一些vim的常用功能~)二、vi的三种模式 模式 功能 一般模式...

2018-03-30 16:36:41 516

原创 平时工作中一定会用到的Linux指令(一)

一、find指令——查找指令最常用参数:【-name】   根据名称查找【-iname】  根据名称查找,且忽略大小写差异最常用命令:【find 目录名 -name 文件或目录名】     根据文件名在指定目录下查找文件或目录【find 目录名 -iname 文件或目录名】    同上,-iname参数可忽略大小写差异二、grep指令——强大的文本搜索工具最常用参数:【-i】   忽略关键字大小写...

2017-12-03 18:39:19 932 1

原创 Nginx——location常见配置指令,alias、root、proxy_pass

1、【alias】——别名配置,用于访问文件系统,在匹配到location配置的URL路径后,指向【alias】配置的路径。如:location/test/ {     alias/first/second/img/; }即:请求/test/1.jpg(省略了协议与域名),将会返回文件/first/second/img/1.jpg。2、【root】—

2017-10-17 10:27:29 17574 3

原创 初识Redis与Memcached

一、Redis与Memcached区别(初识版):1、Memcached只提供String一种value类型;而Redis除了支持String数据类型,同时还提供Hash、List、Set、Sorted Set等数据类型。2、Memcached最大键长250个字符,键值最大容量1MB;Redis一个键值对的最大容量512MB。3、Memcached是纯Cache,所有数据全部保存在内存

2017-09-12 23:01:23 699

原创 亲测GO环境搭建,理解go build、go install、go get

前言:秉承着作为一个新人,要有着“指哪打哪”的觉悟。在老大的需求下,顶上前端的空缺先干阵子前端。当然,在工作之余还是要好好朝着既定的方向努力的,实习结束后还了电脑,这次毕业再来换了新Mac,重新搭下Go的环境,顺便好好总结下,以后随着学习的深入,也会持续更新。GO下载:GO语言中文网下载:https://studygolang.com/dlMac下直接通过brew instat

2017-09-09 14:09:59 40106 1

原创 Shell、Bash,与终端配置文件

shell——命令解析器,也是一种程序设计语言 bash——是shell的具体实例,zsh、bash都是shell的实例在终端中可以通过【echo $SHELL】指令查看当前使用的shell实例,可以通过【chsh -s /bin/zsh】切换成zsh或其他shell实例。全局配置文件(都在/etc/目录下,etc为environment config缩写):/etc/profile(不推荐修改

2017-09-07 20:26:53 4156

原创 Git撤销修改场景及对应指令详解

本文原则:开门见山、简明扼要,希望能给大家学习工作提供帮助!场景一:撤销工作区的修改(未执行git add)指令:git checkout 【目录或文件名】实例:1、修改了test.txt文档,git status 会出现如下提示:2、git checkout test.txt,无提示3、git statu

2017-09-06 23:48:38 621

原创 回来了&继续加油

博客搬家:https://segmentfault.com/blog/leeonfancy经历了一些变动,来到了一家『同城物流』公司做『新零售供应链』,运气不错,遇到非常棒的团队,有幸『从零到一』经历了几个大系统的设计研发,要学习的还很多很多,继续加油!距离我上一篇博客将将近一年了吧……这一年我游历了很多地方,经历了很多事,博客也因为懒、因为忙放下了许久。现在毕业了,和女友来到...

2017-09-06 23:44:42 830 2

转载 UML类图中几种关系的总结

在UML类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)         1. 泛化(Generalization)        【泛化关系】:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特

2016-10-07 10:44:55 1720

原创 多线程编程(二)——面试题,每个线程只打印一种字符,多个线程协同顺序打印n次字符串(求大神的其他实现方案)

(这个是欢聚时刻(YY)的笔试题,在笔试的时候没有写出来,后来自己写了出来,希望大神能给出更优秀的解决方案……ps:现在面试官总有面试时问笔试编程题思路的习惯,呵呵)题目简述:输入一个字符串以及打印次数,为每一个字符创建一个线程,这个线程只负责打印一种字符,多线程循环打印字符串。效果如下:废话不多说直接上代码:public class 笔试题 { //标识

2016-10-04 11:49:29 4308 2

原创 多线程编程(一)——写一个简单的死锁

(整个九月忙着找工作,好多收获,好多遗憾,最终结局还可以接受,技术路还很远,再接再厉!面去哪儿网时,写惯了算法的我突然让写了几个多线程编程,有点蒙蔽,最近好好整理一下)死锁发生的原因:1、系统资源有限2、进程或线程推进顺序不恰当3、资源分配不当死锁发生的四个条件:1、互斥条件:一份资源每次只能被一个进程或线程使用(在Java中一般体现为,一个对象锁只能被一个线程持有)2

2016-10-03 19:11:50 9475 1

转载 Java远程方法调用RMI简介

Java远程方法调用RMI简介 Java RMI (Remote Method Invocation 远程方法调用)是用Java在JDK1.1中实现的,它大大增强了Java开发分布式应用的能力。Java作为一种风靡一时的网络开发语言,其巨大的威力就体现在它强大的开发分布式网络应用的能力上,而RMI就是开发百分之百纯Java的网络分布式应用系统的核心解决方案之一。其实它可以被看作是RPC的J

2016-09-26 21:56:51 883

转载 Java 内存区域和GC机制最详解

Java 内存区域和GC机制目录Java垃圾回收概况Java内存区域Java对象的访问方式Java内存分配机制Java GC机制垃圾收集器Java垃圾回收概况  Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代 码,对内存泄露和溢出

2016-09-22 01:35:35 2619

原创 Java核心基础之容易被忽视的细节问题——异常处理

不管是工作还是面试,细节决定成败。1、在try块中声明的变量是局部变量,在catch、finally、以及异常处理外都不能被访问。所以我们要把InputStream/OutputStream一类的变量声明在try块外,以方便在finally块中关闭连接。

2016-09-17 17:08:04 777

原创 IP、TCP、UDP首部详解

一、IP首部:1、第一个4字节(也就是第一行):(1)版本号(Version),4位;用于标识IP协议版本,IPv4是0100,IPv6是0110,也就是二进制的4和6。(2)首部长度(Internet Header Length),4位;用于标识首部的长度,单位为4字节,所以首部长度最大值为:(2^4 - 1) * 4 = 60字节,但一般只推荐使用20字节的固定长度。

2016-09-16 11:02:32 27782

转载 基础才是王道——TCP/IP详解学习笔记 这位仁兄写得太好了

TCP/IP详解学习笔记 这位仁兄写得太好了TCP/IP详解学习笔记   这位仁兄写得太好了.http://blog.csdn.net/goodboy1881/category/204448.aspxTCP/IP详解学习笔记(13)-TCP坚持定时器,TCP保活定时器TCP/IP详解学习笔记(12)-TCP的超时与重传TCP/IP详解

2016-09-15 21:26:22 35761

原创 JavaWeb核心基础面试知识深度详解

一、Servlet是什么?JSP是什么?它们的联系与区别是什么?Servlet是Java编写的运行在Servlet容器的服务端程序,狭义的Servlet是指Servlet接口,广义的Servlet是指任何实现Servlet接口的类,我们一般理解的为后者。Servlet的作用是接收浏览器发给服务器的请求Request,经过处理后,将返回响应Response给浏览器。JSP是一种后端脚本语言,

2016-09-15 21:19:31 13036

转载 Java并发编程:CountDownLatch、CyclicBarrier和Semaphore

Java并发编程:CountDownLatch、CyclicBarrier和Semaphore(转载自海子的博客)  在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法。  以下是本文目录大纲:  一.CountDownLatch用法

2016-09-13 15:12:25 831

原创 Java多线程必须掌握的十个问题

在此列举的只是Java多线程最基础的知识,也是面试官最常问到的,先打牢基础,再去探讨底层原理或者高级用法,除了这十个问题,在此再推荐一些其他的资料:JVM底层又是如何实现synchronized的:http://www.open-open.com/lib/view/open1352431526366.htmlJava线程池详解:http://blog.csdn.net/zhangliangzi/article/details/52389766Java线程池深度解析:http://www.cnblogs

2016-09-09 18:19:29 13678 1

转载 Java中断interrupt详解

interrupt简述interrupt() 方法只是改变中断状态而已,它不会中断一个正在运行的线程。这一方法实际完成的是,给受阻塞的线程发出一个中断信号,这样受阻线程就得以退出阻塞的状态。 更确切的说,如果线程被Object.wait, Thread.join和Thread.sleep三种方法之一阻塞,此时调用该线程的interrupt()方法,那么该线程将抛出一个 Interrupte

2016-09-09 11:19:09 14021 1

原创 Java中如何正确而优雅的终止运行中的线程

Java中终止线程的方式主要有三种:1、使用stop()方法,已被弃用。原因是:stop()是立即终止,会导致一些数据被到处理一部分就会被终止,而用户并不知道哪些数据被处理,哪些没有被处理,产生了不完整的“残疾”数据,不符合完整性,所以被废弃。So, forget it!2、使用volatile标志位看一个简单的例子:首先,实现一个Runnable接口,在其中定义volatile标

2016-09-09 10:42:21 20203 7

原创 单例模式三种模式,饿汉、饱汉、双重锁模式,实例及优劣详解

单例模式是一种很基础的设计模式,在面试时可能会被要求手写不同类型的单例模式代码,主要有三种模式:1、饿汉模式://饿汉模式,很饿很着急,所以类加载时即创建实例对象public class Singleton1 { private static Singleton1 singleton = new Singleton1(); private Singleton1(){

2016-09-05 11:21:57 23370 4

原创 Spring原理初探

一、Spring的设计理念概述Spring核心:Spring三大组件为Context、Bean、Core,核心为Bean,Bean对于Spring就相当于对象对于面向对象,其重要性可想而知。Spring流行原因:解决了一个非常关键的问题,通过Spring,可以把对象之间的依赖交由配置文件管理,也就是依赖注入机制(DI)。在Spring中,这些依赖的具体应用是由IOC容器控制管理的,IOC容

2016-09-04 23:29:49 902 2

原创 Java并发核心基础——线程池使用及底层实现机制详解

Java线程池概述:从使用入手:java.util.concurrent.Executosr是线程池的静态工厂,我们通常使用它方便地生产各种类型的线程池,主要的方法有三种:1、newSingleThreadExecutor()——创建一个单线程的线程池2、newFixedThreadPool(int n)——创建一个固定大小的线程池3、newCachedThreadPo

2016-08-31 23:03:32 12897 2

原创 《Java虚拟机》必知必会——十四个问题总结(内存模型+GC)

一、Java概述1、Java相较于PHP、C#、Ruby等一样很优秀的编程语言的优势是什么?(1)体系结构中立,跨平台性能优越。Java程序依赖于JVM运行,javac编译器编译Java程序为平台通用的字节码文件(.class),再由JVM与不同操作系统匹配,装载字节码并解释(也有可能是编译,会在第三个问题中说到)为机器指令执行。(2)安全性优越。通过JVM与宿主环境隔离,且J

2016-08-30 12:11:47 3894

原创 细节决定成败,浅析一些容易被忽视的Java关键字

一、default关键字default关键字,并不是访问修饰符中的default(默认的访问权限,不加public、private、protected访问修饰符的情况自动使用,同一包下的类可以访问字段),而是Java8的新特性,default关键字是不能修饰字段的。Java8以前的认知,Java的接口中的方法只能定义不能有方法体,方法体是由实现类去实现的。但是如果当我们要去扩展接口时,所有

2016-08-28 22:38:38 1729

原创 Spring AOP四种实现方式Demo详解与相关知识探究

一、前言在网络上看到一篇博客Spring实现AOP的4种方式,博主写的很通俗易懂,但排版实在抓狂,对于我这么一个对排版、代码格式有强迫症的人来说,实在是不能忍受~~~~(>_我亲手实现了一遍,重新整理,加上了一些不易关注到的细节、漏掉的知识,以及自己对AOP的一些理解,写成这篇博客。二、AOP相关概念(1)AOP是什么?AOP与拦截器的区别?太抽象的不说,如果你知道St

2016-08-27 18:19:05 36190 8

原创 MySQL性能优化——易实现的MySQL优化方案汇总

1、索引优化及索引失效情况汇总2、表结构优化小技巧3、临时表的优化4、其它优化技巧

2016-08-26 16:44:10 20931 1

原创 Java反射机制实例详解

一、前言类其实也是一种对象,是java.lang.Class类的实例。编译阶段类信息会被编译成.class文件,在类加载阶段,类加载器把.class文件读入JVM内存,生成java.lang.Class对象(这时已经可以通过Class对象查看类信息了),再经过类的连接(验证、准备、解析)与类的初始化阶段后即可使用类对象。我们通常使用的new关键字与反射创建实例时都会触发类初始化。(类的加载

2016-08-25 19:33:08 1963

原创 关于JVM一个容易被忽略的小问题

一个例子:public class A{ public static int a = 6;}然后两次运行程序:第一次:public class Test1{ public static void main(String[] args){ A a1 = new A(); a1.a ++; System.out.println(a1.a);

2016-08-25 10:22:22 689

原创 Java定时框架Quartz实例详解与定时任务的Mongodb、Mysql持久化实现(三)Quartz持久化

就像我在上一篇中说的,把调度器信息存储在内存中非常的快也易于配置。但当调度器进程一旦被终止,所有的 Job 和 Trigger 的状态就丢失了。所以我们就需要把调度器信息持久化到数据库,在服务器重启时就可以自动启动终止的任务。Quartz不可能没有考虑到这个问题,可以通过引入Jar包与配置实现,并支持多种数据库版本。一、持久化到MongoDB1、引入Jar依赖好吧,我承认,这竟然是我做

2016-08-12 23:18:29 5621 1

Java操作MongoDB增删改查完美入门Demo

一个完全符合企业设计规范的Java操作MongoDB数据库,涉及各种增删改查操作及@Test增删改查使用示范,可极大方便MongoDB开发,可直接通过代码学习MongoDB的使用。 使用环境:Myeclipse、MongoDB

2016-06-21

SSH整合框架登录加增删改查demo

spring+struts2+hibernate整合框架,具有user登陆、info表增删改查功能,包结构标准,面向接口编程,具有Hibernate数据库Junit测试类,可作为web项目架构基础! 数据库文件在项目WebRoot根目录下 数据库:Mysql IDE: Myeclipse 服务器:Tomcat 测试绝对可用!

2016-06-05

Javaweb项目ajax请求Json实例

JavaWeb将数据包装成JSON以及JSP通过ajax对JSON的获取与解析(代码实例) 运行环境:MyEclipse

2016-03-31

spring+springMVC+mybatis增删改查demo(格式规范,测试可用!)

javaweb项目spring+springMVC+mybatis后台架构整合框架,格式规范,包含数据库文件,与使用文件,测试可用!使用环境:MyEclipse+tomcat+MySQL

2016-01-29

空空如也

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

TA关注的人

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