自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

wangzuojia001的博客

努力,努力,努力

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

原创 深入理解NIO底层原理--epoll多路复用

在使用选择和轮询时,我们管理用户空间上的所有内容,并在每次调用时发送集合以等待。要添加另一个套接字,我们需要将其添加到集合中并再次调用select/poll。epoll系统调用帮助我们创建和管理内核中的上下文。我们将任务分为3个步骤:使用epoll_create在内核中创建上下文 使用epoll_ctl在上下文中添加或删除文件描述符 使用epoll_wait等待上下文中的事件epoll底层逻辑struct epoll_event events[5]; // 使用epoll_creat

2020-09-22 14:25:13 717

原创 深入理解NIO底层原理--poll多路复用

poll方法和结构体int poll (struct pollfd *fds, unsigned int nfds, int timeout);// 结构体pollfd对于事件和返回的事件有不同的字段,所以我们不需要每次都构建它struct pollfd { int fd;// 文件描述符 short events; // 所关注的事件 short revents;// 受影响事件的个数};poll底层逻辑for (i=0;i<5;i+.

2020-09-21 15:34:40 339

原创 深入理解NIO底层原理--select多路复用

在文章深入理解NIO底层原理中我们得到结论:遍历list,性能将会降低。NIO的多路复用可以解决此缺点,如下图,通过多路复用器Select将对socket的遍历交给系统内核完成,从而解放应用程序。<center>图1:Select多路复用</center>服务端程序package com.mot.report.admin.util;import java.io.IOException;import java.net.InetSocketAddress;imp

2020-09-18 17:21:09 475

原创 深入理解NIO底层原理

在深入理解IO(BIO)底层原理一文中我们知道BIO的弊端:每一个连接请求,新建一个线程; CPU单位时间内,轮训执行线程; 处理要处理代码逻辑,还有额外的内核操作(注:System.out.println()也是内核操作,线上环境禁用); 随着线程增加,浪费CPU资源。BIO最大的缺点就是阻塞,下面我们通过非阻塞IO(NIO)了解NIO的原理。package com.mot.report.admin.util;import java.io.IOException;import ja

2020-09-15 16:18:44 509

原创 深入理解IO(BIO)底层原理

理解阻塞和非阻塞阻塞:在调用结果返回之前,当前线程被挂起; 非阻塞:在不能立刻收到返回结果之前,本次调用不会阻塞当前线程; 阻塞非阻塞强调服务端程序在等待结果时的状态。理解同步和异步同步:客户端发出请求后,在没有收到返回结果之前,一直阻塞; 异步:客户端发出请求后,立即返回,但可能没有结果;等服务端结束后回调客户端; 同步异步强调客户端程序在等待结果时的状态。BIO我们通过一个简单的程序来了解下BIOimport java.io.IOException;import java

2020-08-27 15:44:13 768

原创 在并发编程中为什么要使用volatile?

解决问题1:使变量可见大家都知道CPU的运算处理速度远高于内存(特殊机器除外)读写速度,这样就导致在访问内存操作时,CPU就要等待主存,从而造成资源的浪费。为了提高CPU性能,就出现了CPU高速缓存。参考图1: 2核处理器封装图1: 2核处理器封装假设主存中有变量x,则线程访问x的顺势是:1.去L1cache中取,若取不到则取跳2,取到返回给CPU;2.去L2cache中取,若取不到则取跳3,取到返回变量x到上一层,上一层并缓存到自己的缓存行;3.去L3cache中取,若取不到则取.

2020-07-10 15:18:42 264

原创 分布式调度框架Elastic-Job之SimpleJob类型作业的结构

Elastic-Job是一个分布式调度解决方案,由两个相互独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成。在这我们说说Elastic-Job-LiteElastic-Job-Lite定位为轻量级无中心化解决方案,使用jar包的形式提供分布式任务的协调服务。# 功能列表* 分布式调度协调* 弹性扩容缩容* 失效转移* 错过执行作业重...

2019-09-04 11:35:21 1130

原创 枚举类的创建与使用

本周对项目的状态值进行梳理,发现有不合理的地方。顺便将类中的静态常量改写成了枚举类。如下:一、枚举类UnderwritingStatusEnum.java的创建public enum UnderwritingStatusEnum { 核保状态_未提交核保("0"), 核保状态_标准件("1"), 核保状态_非标件("2"), 核保状态_拒保可申诉("3"), ...

2019-06-11 17:43:35 23092

原创 线程间通信机制--wait与notify的使用?为什么要放在synchronized代码块内?

关于wait和notify的使用,在此我们使用链表模拟队列Q,使用synchronized用于实现多线程的同步操作,在特定条件下释放线程持有的锁,然后挂起,等待条件满足进行资源竞争.import java.util.LinkedList;import java.util.concurrent.atomic.AtomicInteger;/** * @Author: jaden...

2019-05-21 14:21:31 947

原创 InnoDB select操作会锁表吗?是行锁还是表锁?

故事背景今天朋友说操作mysql超时了,我首先想到的是环境的问题。我问是不是数据源配错了,他给我的答案是否定的。然后查了下日志:java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction。跟踪到是下面SQL导致的表锁 SELECT * FROM t_cms_promotion t WHERE t.p...

2019-01-04 11:12:00 6415 1

原创 从大层次讲java技术学习路线

Java从95年至今经过多年发展,由于各位前辈的不断创新,Java的成熟性已不可置疑;同时也导致java技术琳琅满目。那么在学习Java前我们应该如何选择技术方向呢?目前,哪些技术非常流行呢?另外,小编听到很多人说软件是吃青春饭的,30+混不好就没什么发展前途了,现实真实如此吗?针对以上问题小编从个人理解上梳理一下,意见不同者欢迎讨论。JAVA SE(java基础)java基础就不用说了,...

2018-12-26 15:44:38 179

原创 浅谈HashMap的默认值、属性和构造器

定义HashMap基于哈希表的Map实现,以key-value的形式存在,并允许使用 null 值和 null 键。继承AbstractMap,当中实现了Map的重要方法。类定义如下:public class HashMap&lt;K,V&gt; extends AbstractMap&lt;K,V&gt; implements Map&lt;K,V&gt;, Cloneable...

2018-11-26 10:45:37 2345 1

原创 位操作

今天在看Java8的HashMap底层原理的时候看到多处操作二进制数的地方。虽然平时写代码不怎么用到二进制的操作,建议以后还要往二进制操作上靠一靠,因为他确实能提高效率,而且是代码更为简洁。在此,我在这里说下它的定义和作用,不对的地方希望大家指正。位操作的定义现实中的世界在计算机中都是以二进制0和1表示的,它的基数为2,进位规则是:逢二进一,借位规则是:借一当二。数据在计算机中主要是以补码...

2018-11-19 18:06:53 586

原创 登陆成功后7天无操作需再次登陆

实现这种功能方法有很多,前后端都可以实现。本文将从后端(java)实现此功能。大概思路如下:登陆成功后,将当前系统时间+7天timeMillisDB(单位:毫秒)存到DB 在访问每个接口前校验登陆是否过期(使用拦截器进行统一校验)。校验规则:当前系统时间currentTimeMillis-timeMillisDB &gt; 0 ,则过期,返回登录页;否则,更新系统过期时间(当前系统时间+7天...

2018-11-19 17:58:05 394

原创 mybatis批量操作

应用场景:今天做了一个插入数据的小功能,将含有50个对象的集合(List)插入到数据库。自然而然的就要到了mybatis批量插入,记得刚参加工作时,类似场景我会写一个for循环,逐条插入数据。  操作数据库的时候会经过这样一个流程:创建、打开、执行SQL、关闭连接,创建和打开数据库连接对性能是有损失的,下面简单地说一下批量插入和逐条插入的区别。逐条插入会执行50个创建-关闭动作,而批处理只会...

2018-11-19 17:34:59 156

原创 动态Quartz任务调度(Spring结合Quartz)

之前写过一遍配置quartz任务调度的博文,链接:点击打开链接,这种方式不够灵活,所以今天特地用java代码实现动态Quartz任务调度。闲话不多说了,直接上代码。package org.demo.schedule;import java.text.ParseException;import org.demo.core.context.SpringContextUtil;import

2017-04-18 16:46:00 2568

原创 SpringSecurity环境搭建

由于最近有个公司项目需要用到SpringSecurity,于是我就毛遂自荐进行了一下尝试。套路话就不多说了,直接进入正题。第一步,引入SpringSecurity包,以下配置基于maven项目 org.springframework.security spring-security-web ${spring.security.version} org.sprin

2017-04-07 17:31:17 375

原创 利用序列化实现深度克隆

利用序列化实现深度克隆

2017-04-01 17:24:40 2475

原创 spring的AbstractRoutingDataSource 多数据源切换

之前参加了一个项目,此项目涉及到多个数据源的定位与切换。此项目使用Spring的AbstractRoutingDataSource抽象类来进行完成的,下面看一下源码:package org.springframework.jdbc.datasource.lookup;import java.sql.Connection;import java.sql.SQLException;

2017-02-22 14:33:31 610

原创 利用spring的线程池ThreadPoolTaskExecutor对多个库进行数据归档

使用多线程ThreadPoolTaskExecutor对多个数据库中的数据进行数据归档

2017-01-16 17:31:14 2568

原创 ThreadLocal的作用与使用

在我们编程时,如果遇到多个线程访问同一个变量应该怎样实现?有人说使用同步。是的同步可以解决这种问题,但它是有弊端的,涉及到何时加锁与释放锁等并且线程访问锁时需要等待,这样很浪费时间。有一个更好的方案就是使用ThreadLocal工具类,之前参加了一个项目,本项目涉及到分库,在业务进行中需要根据唯一的ID去定位数据源然后做一系列的操作。ThreadLocal不是用来解决共享资源的多线程访问的问题

2017-01-13 10:40:15 11313 1

原创 对象锁synchronized

当多个线程访问同一个实例变量时,往往会出现脏数据。下面举一个例子:

2017-01-12 10:30:43 267

原创 @Resource与@Autowired注解的区别

一、写本博文的原因年初刚加入到现在的项目时,在使用注解时我用的@Resource。后来,同事:你怎么使用@Resource注解?我:使用它有错吗?同事:没错,但是现在都使用@Autowired。我:我研究一下。在大学,学习J2EE实训时一直使用的是@Resource注解,后来我就养成习惯了。现在对这两个注解做一下解释:@Resource默认按照名称方式进行bean匹配,@A

2017-01-10 16:21:13 88817 53

原创 Spring Bean扩展接口 -- InitializingBean源码分析

一、首先我们看一下InitializingBean接口的源码package org.springframework.beans.factory;public interface InitializingBean { void afterPropertiesSet() throws Exception;}InitializingBean接口只要一个方法afterProperti

2017-01-09 18:34:16 311

原创 Spring Bean扩展接口 -- ApplicationContextAware源码分析

一、首先我们看一下ApplicationContextAware接口的源码package org.springframework.context;import org.springframework.beans.BeansException;import org.springframework.beans.factory.Aware;public interface Applica

2017-01-09 10:20:55 994

原创 maven和pom.xml详解

maven和pom.xml的详解

2017-01-06 10:40:04 506

原创 整合SpringMVC

配置spring-mvc.xml主要是自动扫描控制器,视图模式,注解的启动这三个http://www.springframework.org/schema/beans"    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-

2017-01-05 17:33:28 275

原创 mybatis调用MySQL存储过程

一、建表CREATE TABLE test.t_sequence (  name varchar(50) NOT NULL COMMENT 'sequence名称',  currentvalue bigint(20) NOT NULL COMMENT 'sequence当前值',  increment int(10) NOT NULL COMMENT 'sequence每次增长

2017-01-05 17:14:11 501

原创 定时器quartz的配置与测试

一、引入两个jar包spring-context-support-3.1.3.RELEASE.jar和quartz-1.8.6.jar二、配置文件http://www.springframework.org/schema/beans"    xmlns:util="http://www.springframework.org/schema/util" xmlns:x

2017-01-05 16:43:32 1795

原创 Spring与Mabatis整合 IOC成功的配置

context-common.spring.xml:http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"       x

2017-01-05 16:34:09 896

原创 Spring的自动扫描、数据源配置、AOP和事务等配置

Spring的自动扫描、数据源、AOP和事务的配置

2017-01-05 15:20:02 1394

原创 编写测试类进行单元测试

Java 单元测试

2017-01-05 15:08:27 561

原创 使用eclipse创建一个Maven的web project

创建Maven项目

2017-01-05 14:32:32 420

原创 Eclipse+jdk1.8+tomcat9.0+maven3.3.9配置环境

1.安装eclipse如果你的eclipse是压缩包,可以找到eclipse.ini文件修改-vm        D:\Program Files\Java\jdk1.8.0_112\bin       2.安装jdk并配置环境变量(注意jdk位数要和eclipse位数一致)        JAVA_HOME:D:\Program Files\Java\jdk1

2017-01-03 17:54:22 7448

原创 String s2 = "abc"; 与 String s3 = new String("abc");原理解析

package testwebapp;public class Test {//大家思考一下输出结果是什么?public static void main(String[] args) {String s1 = "abc";  String s2 = "abc";  String s3 = new String("abc");  System.out.p

2017-01-03 17:29:11 3059 2

原创 Java装箱与拆箱与==符的使用

Integer.valueOf 原理

2016-12-28 21:21:58 188

转载 Java代码优化

文章来源:http://www.cnblogs.com/dzly/archive/2012/3/11.html机器内存又爆满,除了新增机器内存外,还应该好好review一下我们的代码,有很多代码编写过于随意化,这些不好的习惯或对程序语言的不了解是应该好好打压打压了。 下面是参考网络资源总结的一些在Java编程中尽可能要做到的一些地方。1. 尽量在合适的场合使

2016-12-28 19:23:47 205

原创 利用mybatis-generator自动生成JAVA的实体类和mapping等

一:引入mybatis-generator-core jar包我的测试项目是使用的maven,pom.xml对应如下:&lt;!-- Mybatis Generator --&gt;&lt;dependency&gt;&lt;groupId&gt;org.mybatis.generator&lt;/groupId&gt;&lt;artifactId&gt;mybatis-genera...

2016-12-27 10:47:02 11799 3

dbForge Studio for MySQL破解版

dbForge Studio for MySQL 是一款很好使用的MySQL客户端,最多个库进行切换的时候很方便

2018-11-19

maven 3.5.2 Java开发 下载

项目构建、管理工具 Apache maven 3.5.2 Java web 开发 maven 插件 下载 安装包

2018-01-23

Apache maven 3.3.9

项目构建、管理工具 Apache maven 3.3.9 Java web 开发 maven 插件 下载 安装包

2018-01-23

Java开发tomcat插件

Java开发,集成到eclipse for Java ee 的 Web 应用服务器 Tomcat 7.0下载

2018-01-23

空空如也

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

TA关注的人

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