- 博客(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
801
原创 深入理解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
384
原创 深入理解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
524
原创 深入理解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
557
原创 深入理解IO(BIO)底层原理
理解阻塞和非阻塞阻塞:在调用结果返回之前,当前线程被挂起; 非阻塞:在不能立刻收到返回结果之前,本次调用不会阻塞当前线程; 阻塞非阻塞强调服务端程序在等待结果时的状态。理解同步和异步同步:客户端发出请求后,在没有收到返回结果之前,一直阻塞; 异步:客户端发出请求后,立即返回,但可能没有结果;等服务端结束后回调客户端; 同步异步强调客户端程序在等待结果时的状态。BIO我们通过一个简单的程序来了解下BIOimport java.io.IOException;import java
2020-08-27 15:44:13
834
原创 在并发编程中为什么要使用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
304
原创 分布式调度框架Elastic-Job之SimpleJob类型作业的结构
Elastic-Job是一个分布式调度解决方案,由两个相互独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成。在这我们说说Elastic-Job-LiteElastic-Job-Lite定位为轻量级无中心化解决方案,使用jar包的形式提供分布式任务的协调服务。# 功能列表* 分布式调度协调* 弹性扩容缩容* 失效转移* 错过执行作业重...
2019-09-04 11:35:21
1209
原创 枚举类的创建与使用
本周对项目的状态值进行梳理,发现有不合理的地方。顺便将类中的静态常量改写成了枚举类。如下:一、枚举类UnderwritingStatusEnum.java的创建public enum UnderwritingStatusEnum { 核保状态_未提交核保("0"), 核保状态_标准件("1"), 核保状态_非标件("2"), 核保状态_拒保可申诉("3"), ...
2019-06-11 17:43:35
23176
原创 线程间通信机制--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
993
原创 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
6577
1
原创 从大层次讲java技术学习路线
Java从95年至今经过多年发展,由于各位前辈的不断创新,Java的成熟性已不可置疑;同时也导致java技术琳琅满目。那么在学习Java前我们应该如何选择技术方向呢?目前,哪些技术非常流行呢?另外,小编听到很多人说软件是吃青春饭的,30+混不好就没什么发展前途了,现实真实如此吗?针对以上问题小编从个人理解上梳理一下,意见不同者欢迎讨论。JAVA SE(java基础)java基础就不用说了,...
2018-12-26 15:44:38
215
原创 浅谈HashMap的默认值、属性和构造器
定义HashMap基于哈希表的Map实现,以key-value的形式存在,并允许使用 null 值和 null 键。继承AbstractMap,当中实现了Map的重要方法。类定义如下:public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable...
2018-11-26 10:45:37
2482
1
原创 位操作
今天在看Java8的HashMap底层原理的时候看到多处操作二进制数的地方。虽然平时写代码不怎么用到二进制的操作,建议以后还要往二进制操作上靠一靠,因为他确实能提高效率,而且是代码更为简洁。在此,我在这里说下它的定义和作用,不对的地方希望大家指正。位操作的定义现实中的世界在计算机中都是以二进制0和1表示的,它的基数为2,进位规则是:逢二进一,借位规则是:借一当二。数据在计算机中主要是以补码...
2018-11-19 18:06:53
731
原创 登陆成功后7天无操作需再次登陆
实现这种功能方法有很多,前后端都可以实现。本文将从后端(java)实现此功能。大概思路如下:登陆成功后,将当前系统时间+7天timeMillisDB(单位:毫秒)存到DB 在访问每个接口前校验登陆是否过期(使用拦截器进行统一校验)。校验规则:当前系统时间currentTimeMillis-timeMillisDB > 0 ,则过期,返回登录页;否则,更新系统过期时间(当前系统时间+7天...
2018-11-19 17:58:05
471
原创 mybatis批量操作
应用场景:今天做了一个插入数据的小功能,将含有50个对象的集合(List)插入到数据库。自然而然的就要到了mybatis批量插入,记得刚参加工作时,类似场景我会写一个for循环,逐条插入数据。 操作数据库的时候会经过这样一个流程:创建、打开、执行SQL、关闭连接,创建和打开数据库连接对性能是有损失的,下面简单地说一下批量插入和逐条插入的区别。逐条插入会执行50个创建-关闭动作,而批处理只会...
2018-11-19 17:34:59
195
原创 动态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
2629
原创 SpringSecurity环境搭建
由于最近有个公司项目需要用到SpringSecurity,于是我就毛遂自荐进行了一下尝试。套路话就不多说了,直接进入正题。第一步,引入SpringSecurity包,以下配置基于maven项目 org.springframework.security spring-security-web ${spring.security.version} org.sprin
2017-04-07 17:31:17
414
原创 spring的AbstractRoutingDataSource 多数据源切换
之前参加了一个项目,此项目涉及到多个数据源的定位与切换。此项目使用Spring的AbstractRoutingDataSource抽象类来进行完成的,下面看一下源码:package org.springframework.jdbc.datasource.lookup;import java.sql.Connection;import java.sql.SQLException;
2017-02-22 14:33:31
654
原创 利用spring的线程池ThreadPoolTaskExecutor对多个库进行数据归档
使用多线程ThreadPoolTaskExecutor对多个数据库中的数据进行数据归档
2017-01-16 17:31:14
2646
原创 ThreadLocal的作用与使用
在我们编程时,如果遇到多个线程访问同一个变量应该怎样实现?有人说使用同步。是的同步可以解决这种问题,但它是有弊端的,涉及到何时加锁与释放锁等并且线程访问锁时需要等待,这样很浪费时间。有一个更好的方案就是使用ThreadLocal工具类,之前参加了一个项目,本项目涉及到分库,在业务进行中需要根据唯一的ID去定位数据源然后做一系列的操作。ThreadLocal不是用来解决共享资源的多线程访问的问题
2017-01-13 10:40:15
11374
1
原创 @Resource与@Autowired注解的区别
一、写本博文的原因年初刚加入到现在的项目时,在使用注解时我用的@Resource。后来,同事:你怎么使用@Resource注解?我:使用它有错吗?同事:没错,但是现在都使用@Autowired。我:我研究一下。在大学,学习J2EE实训时一直使用的是@Resource注解,后来我就养成习惯了。现在对这两个注解做一下解释:@Resource默认按照名称方式进行bean匹配,@A
2017-01-10 16:21:13
89046
25
原创 Spring Bean扩展接口 -- InitializingBean源码分析
一、首先我们看一下InitializingBean接口的源码package org.springframework.beans.factory;public interface InitializingBean { void afterPropertiesSet() throws Exception;}InitializingBean接口只要一个方法afterProperti
2017-01-09 18:34:16
353
原创 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
1021
原创 整合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
327
原创 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
534
原创 定时器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
1907
原创 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
929
原创 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
7551
原创 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
3149
1
转载 Java代码优化
文章来源:http://www.cnblogs.com/dzly/archive/2012/3/11.html机器内存又爆满,除了新增机器内存外,还应该好好review一下我们的代码,有很多代码编写过于随意化,这些不好的习惯或对程序语言的不了解是应该好好打压打压了。 下面是参考网络资源总结的一些在Java编程中尽可能要做到的一些地方。1. 尽量在合适的场合使
2016-12-28 19:23:47
239
原创 利用mybatis-generator自动生成JAVA的实体类和mapping等
一:引入mybatis-generator-core jar包我的测试项目是使用的maven,pom.xml对应如下:<!-- Mybatis Generator --><dependency><groupId>org.mybatis.generator</groupId><artifactId>mybatis-genera...
2016-12-27 10:47:02
11864
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人