开发轶事
MC-闰土
程序员到最后拼的是文化!
展开
-
AWS存储S3上传、下载、预签名url
【代码】AWS存储S3上传、下载、预签名url。原创 2024-04-11 13:15:14 · 828 阅读 · 2 评论 -
最简单的spring-framework-5.1.x源码编译教程
dd原创 2021-01-08 16:55:31 · 773 阅读 · 0 评论 -
AOP后置通知获取目标方法的参数以及配置详解
AOP后置通知获取目标方法的参数以及配置详解原创 2017-10-20 09:51:05 · 286783 阅读 · 0 评论 -
RabbitMQ客户端连接池的实现
目前RabbitMQ官方给的出的客户端发送消息的Demo的都是基于短连接来做的,例如: ConnectionFactory cf = new ConnectionFactory(); cf.Uri = serverAddress; using (IConnection conn = cf.CreateConnection(转载 2017-12-25 17:07:29 · 291894 阅读 · 5 评论 -
Spring Session实现Session管理的原理与详细配置
长期以来,session管理就是企业级Java中的一部分,以致于我们潜意识就认为它是已经解决的问题,在最近的记忆中,我们没有看到这个领域有很大的革新。但是,现代的趋势是微服务以及可水平扩展的原生云应用(cloud native application),它们会挑战过去20多年来我们设计和构建session管理器时的前提假设,并且暴露了现代化session管理器的不足。本文将会阐述最近发布的转载 2017-12-06 09:24:59 · 237016 阅读 · 3 评论 -
开发中使用临时表的应用场景以及注意事项
一、临时表的两种表现形式。 在SQL Server数据库中,临时表主要有两种形式,分别为全局临时表与局部临时表。这两种表有很大的不同,主要体现在名字上、可见性上以及可用性上。具体来说,本地临时表的名字是以#符号开头的;而全局临时表则是以##两个#字符号开头。从可见性上来说,局部临时表是有当前用户创建的,并且只有当前用户的会话才可以访问。而对于全局表来说,只要这个临时表存在,那原创 2017-12-19 09:27:05 · 237868 阅读 · 0 评论 -
理解Java中的引用传递和值传递
关于Java传参时是引用传递还是值传递,一直是一个讨论比较多的话题,有论坛说Java中只有值传递,也有些地方说引用传递和值传递都存在,比较容易让人迷惑。关于值传递和引用传递其实需要分情况看待,今天学习和分析一下,着急可以先看最后的结论。1.基本类型和引用类型在内存中的保存Java中数据类型分为两大类,基本类型和对象类型。相应的,变量也有两种类型:基本类型和引用类型。基本原创 2018-01-12 10:47:52 · 233297 阅读 · 1 评论 -
JNI字段描述符“([Ljava/lang/String;)V”
在JNI中,当我们使用GetFieldID/GetStaticFieldID或GetMethodID/GetStaticMethodID及定义JNINativeMethod等时,我们需要表示成员变量的类型,或函数传入参数或返回的类型。JNI把Field的类型,或函数传入参数或返回值的类型进行简写以char*的形式进行表示。 对于成员变量,直接用java类型的简写表示成员变量的类转载 2017-12-28 12:38:21 · 286646 阅读 · 0 评论 -
java.util.concurrent.locks包下常用的类
首先要说明的就是Lock,通过查看Lock的源码可知,Lock是一个接口:public interface Lock { void lock(); void lockInterruptibly() throws InterruptedException; boolean tryLock(); boolean tryLock(long time, ...原创 2018-03-15 00:02:22 · 233370 阅读 · 0 评论 -
解读分库分表中间件Sharding-JDBC与实现分库分表功能
分库分表适用场景分库分表用于应对当前互联网常见的两个场景——大数据量和高并发。通常分为垂直拆分和水平拆分两种。垂直拆分是根据业务将一个库(表)拆分为多个库(表)。如:将经常和不常访问的字段拆分至不同的库或表中。由于与业务关系密切,目前的分库分表产品均使用水平拆分方式。水平拆分则是根据分片算法将一个库(表)拆分为多个库(表)。如:按照ID的最后一位以3取余,尾数是1的放入第1个库(表),尾数是2的放...转载 2018-03-08 21:22:25 · 239843 阅读 · 0 评论 -
简单的RSA和AES加密算法的java实现
AES如下:package com.timliu.security.symmetric_encryption;import java.security.Key;import java.security.Security;import javax.crypto.Cipher;import javax.crypto.KeyGenerator;import javax.crypto.Sec...原创 2018-04-09 23:21:17 · 283262 阅读 · 0 评论 -
sendRedirect()之后的代码是否会继续执行
两个问题Servlet中,重定向之后的代码是否会继续执行? 重定向是在所有代码执行完毕后跳转,还是执行到重定向代码时立即跳转?设计代码在重定向之前和之后让程序各循环sleep五秒,在控制台打印输出,看页面在什么阶段跳转//重定向前循环sleep五秒for (int i = 0; i < 5; i++) { System.out.println("before re...转载 2017-12-07 00:05:15 · 236170 阅读 · 2 评论 -
linxu下部署nginx的SSL证书(HTTPS)依赖模块与使用nginx.conf配置https协议详解
网站使用https协议原创 2017-12-01 17:55:18 · 285333 阅读 · 0 评论 -
掌握线程通讯流(管道流)的使用
掌握线程通讯流(管道流)的使用转载 2017-10-20 10:52:31 · 284849 阅读 · 0 评论 -
支付宝手机网站支付接入详细教程
支付宝手机网站支付接入详细教程转载 2017-10-20 09:38:35 · 238755 阅读 · 0 评论 -
数据库的字符集与排序规则、视图、函数、存储过程
数据库的字符集与排序规则、视图、函数、存储过程原创 2017-11-10 16:44:08 · 283115 阅读 · 0 评论 -
SpringMVC中的数据校验
SpringMVC中的数据校验转载 2017-11-20 10:36:00 · 283711 阅读 · 0 评论 -
Calendar中add函数和roll函数的用法及区别
Calendar中add()和roll()函数的用法一、取某个时间点后的整点时刻。例如1984年7月7日15:23:05后的整点时刻即为1984-07-07 16:00:00。实现如下:Calendar calendar = Calendar.getInstance();calendar.add(Calendar.HOUR_OF_DAY, 1);//小时上加1calendar.原创 2017-11-29 13:26:05 · 283118 阅读 · 0 评论 -
Java常见排序:冒泡排序、快速排序、选择排序、插入排序、归并排序
冒泡排序、快速排序、选择排序、插入排序、归并排序原创 2017-11-22 18:29:13 · 285259 阅读 · 1 评论 -
web.xml的加载过程配置详解
一:web.xml加载过程 简单说一下,web.xml的加载过程。当我们启动一个WEB项目容器时,容器包括(JBoss,Tomcat等)。首先会去读取web.xml配置文件里的配置,当这一步骤没有出错并且完成之后,项目才能正常的被启动起来。 启动WEB项目的时候,容器首先会去读取web.xml配置文件中的两个节点: 和 如图: 紧接着,容器创建一个Serv转载 2017-12-02 09:24:31 · 270762 阅读 · 7 评论 -
4种mysql存储引擎比较详解
数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以 获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。MySql的核心就是存储引擎。存储引擎查看MySQL给开发者提供了查询存储引擎的功能,我这里使用的是MySQL5转载 2017-12-02 09:32:04 · 284555 阅读 · 0 评论 -
数据库事务的四大特性以及事务的隔离级别
如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性:⑴ 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。⑵ 一致性(Consistency) 一致性是指事务必须使数据库从一个转载 2017-12-11 16:40:29 · 283003 阅读 · 0 评论 -
电商高并发下会产生的问题——借鉴淘宝
问题1:问题2:问题3:原创 2018-04-25 09:42:42 · 284922 阅读 · 0 评论 -
数据库的锁机制
在并发访问情况下,可能会出现脏读、不可重复读和幻读等读现象,为了应对这些问题,主流数据库都提供了锁机制,并引入了事务隔离级别的概念。并发控制在计算机科学,特别是程序设计、操作系统、多处理机和数据库等领域,并发控制(Concurrency control)是确保及时纠正由并发操作导致的错误的一种机制。数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔...转载 2018-04-25 10:14:18 · 232451 阅读 · 0 评论 -
并发情况下的商品超卖问题解决方案之行级锁
先来就库存超卖的问题作描述:一般电子商务网站都会遇到如团购、秒杀、特价之类的活动,而这样的活动有一个共同的特点就是访问量激增、上千甚至上万人抢购一个商品。然而,作为活动商品,库存肯定是很有限的,如何控制库存不让出现超买,以防止造成不必要的损失是众多电子商务网站程序员头疼的问题,这同时也是最基本的问题。从技术方面剖析,很多人肯定会想到事务,但是事务是控制库存超卖的必要条件,但不是充分必要条件。...原创 2018-04-25 10:28:14 · 237378 阅读 · 3 评论 -
分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移到Cassandra,因为Cassandra没...转载 2018-10-22 09:25:28 · 233477 阅读 · 0 评论 -
你的Spring事务为什么不会自动回滚?
Spring的事务传播行为有七种,当前我说的是默认的那种。我们知道Spring的声明式事务是基于AOP的,那么就是AOP玩的又是代理对象,那你是不是就知道了,这个事务的大概实现原理了。。。首先我们要明确RuntimeException与Exception之间的关系与他们分别的含义:1.在Java中异常的基类为Throwable,他有两个子类Exception与Errors,同时Runt...原创 2018-10-24 22:48:22 · 287544 阅读 · 3 评论 -
nginx监控与性能调优
监控nginx有自带的监控模块,编译nginx的时候,加上参数 --with-http_stub_status_module#配置指令 ./configure --prefix=/usr/local --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module...原创 2018-11-01 16:49:24 · 287155 阅读 · 0 评论 -
Spring bean 通过实现 InitializingBean ,DisposableBean 接口实现初始化方法和销毁前操作
关于在spring 容器初始化 bean 和销毁前所做的操作定义方式有三种:第一种:通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作第二种:通过 在xml中定义init-method 和 destory-method方法第三种: 通过bean实现InitializingBean和 DisposableBean接口对于初始...原创 2018-11-08 10:20:44 · 234118 阅读 · 0 评论 -
调用Spring所管理的bean的方法时候,为何不会出现线程安全问题?
首先jvm会在内存中开辟一块存储空间做为线程栈空间,每个线程都有自己的栈(后进先出)。调用方法时,会在栈中压入一个栈帧,用来存储这个方法的参数和局部变量;方法返回时 ,栈帧就会弹出,方法的参数和局部变量就会清除;方法调用时,调用栈不断处于涨落之中,如果调用的层级过深,调用栈可能会溢出Spring创建的bean默认是singleton的,线程调用某个bean时,是持有一个bean对象...原创 2018-11-08 10:39:28 · 239804 阅读 · 0 评论 -
jetty启动logback阻塞控制台空白或者抛出I/O error occurred while parsing xml file
解决办法很简单,把logback.xml的dtd注释掉。Java程序在解析xml文件时,如果xml文件中指定了dtd,在默认会从指定的url下载dtd文件,但是很多情况下如果网络连接不上,或者防火墙原因,dtd文件无法下载下来导致程序报连接超时异常,解析xml失败。我的就是因为这个dtd文档地址被墙了,折腾我好久。。。xmlns,schema,dtd,我就不科普了...原创 2018-12-28 20:30:22 · 285897 阅读 · 0 评论 -
Java多线程实现异步调用
首先我们来一个实际的应用场景:用户请求一些报表数据,但是这些数据需要实时计算,那么用户要等待的时间就会很久,这时候我们就可以用异步的方式来处理,更通俗的场景就是生活中烧开水的时候,你可以去包饺子。蛋糕店定蛋糕,你可以先下单,不用在那里一直等着,约定个时间过来取。以下的DEMO是按照生成报表异步实际需求!public class Host { public stat...原创 2018-07-20 14:00:52 · 235583 阅读 · 0 评论 -
spring4.X+spring-data-solr2.6.x 整合代码详解
POM.xml文件如下: <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-solr</artifactId> <version>2.1.13.RELEASE&l...原创 2018-07-13 17:59:00 · 234061 阅读 · 0 评论 -
项目开发中的分布式缓存击穿以及处理方案
什么是缓存击穿在谈论缓存击穿之前,我们先来回忆下从缓存中加载数据的逻辑,如下图所示因此,如果黑客每次故意查询一个在缓存内必然不存在的数据,导致每次请求都要去存储层去查询,这样缓存就失去了意义。如果在大流量下数据库可能挂掉。这就是缓存击穿。场景如下图所示:我们正常人在登录首页的时候,都是根据userID来命中数据,然而黑客的目的是破坏你的系统,黑客可以随机生成一堆userID,然后将这些请求怼到你的...转载 2018-05-21 12:18:01 · 233036 阅读 · 2 评论 -
延时任务处理订单超时方案(非定时)
在开发中,往往会遇到一些关于延时任务的需求。例如生成订单30分钟未支付,则自动取消生成订单60秒后,给用户发短信对上述的任务,我们给一个专业的名字来形容,那就是延时任务。那么这里就会产生一个问题,这个延时任务和定时任务的区别究竟在哪里呢?一共有如下几点区别 定时任务有明确的触发时间,延时任务没有 定时任务有执行周期,而延时任务在某事件触发后一段时间内执行,没有执行周期...转载 2018-05-21 23:24:20 · 250117 阅读 · 7 评论 -
java实现web项目的长连接已经心跳检测机制的实现方案
实现原理: 长连接的维持,是要客户端程序,定时向服务端程序,发送一个维持连接包的。 如果,长时间未发送维持连接包,服务端程序将断开连接。客户端: Client通过持有Socket的对象,可以随时(使用sendObject方法)发送Massage Object(消息)给服务端。 如果keepAliveDelay毫秒(程序中是2秒)内未发送任何数据,则自...转载 2018-06-13 20:51:04 · 290582 阅读 · 1 评论 -
ConcurrentHashMap的那些事儿
HashMap允许插入key和value是null的数据的,而ConcurrentHashMap是不允许key和value是null的。这个是为什么呢?ConcurrentHashMap的作者是这么说的: The main reason that nulls aren’t allowed in ConcurrentMaps (ConcurrentHashMaps, Concurre...原创 2018-06-07 09:54:17 · 283757 阅读 · 0 评论 -
完整的RSA开发流程以及加解密Demo
import java.security.KeyFactory;import java.security.KeyPair;import java.security.KeyPairGenerator;import java.security.PrivateKey;import java.security.PublicKey;import java.security.spec.PKCS8En...原创 2018-06-14 21:36:54 · 284272 阅读 · 0 评论 -
基于Oauth2.0授权的服务端与客户端的实现
oauth本身不是技术,而是一项资源授权协议!Apache基金会提供了针对Java的oauth封装。我们做Java web项目想要实现oauth协议进行资源授权访问,直接使用该封装就可以。 其实这个很简单,我直接给出项目地址好了:Oauth2实现java...原创 2018-07-01 13:04:32 · 284082 阅读 · 0 评论 -
Nginx配置location的root与alias
nginx指定文件路径有两种方式root和alias,root与alias主要区别在于nginx如何解释location后面的uri,这会使两者分别以不同的方式将请求映射到服务器文件上。最基本的区别alias 指定的目录是准确的,给location指定一个目录。root 指定目录的上级目录,并且该上级目录要含有locatoin指定名称的同名目录。以root方式设置资源路径:语法: root pat...原创 2018-06-28 14:17:40 · 234143 阅读 · 0 评论