自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

nwpu_geeker的博客

希望能向大牛学习!

  • 博客(105)
  • 收藏
  • 关注

转载 正确理解where和having的使用

以前在学校里学习过SQLserver数据库,发现学习的都是皮毛,今天以正确的姿态谈一下MySQL中where和having的区别。 误区:不要错误的认为having和group by 必须配合使用。下面以一个例子来具体的讲解:1. where和having都可以使用的场景 select goods_price,goods_n...

2018-08-26 17:39:51 1192

原创 java线程之间的通信方式

引言当多个线程需要协作来完成一件事情的时候,如何去等待其他线程执行,又如何当线程执行完去通知其他线程结束等待。线程与进程的区别进程可以独立运行,它是系统进行资源分配和调度的独立单位。 线程是进程的一个实体,是CPU调度和分派的基本单位,比进程更小的独立单位,它基本上不拥有系统资源。 他们之间的联系: 一个线程属于一个进程,而一个进程有多个线程,多个线程共享该进程的所有资源。 ...

2018-07-26 14:49:52 538

转载 线程池中的线程为什么不会释放而是循环等待任务呢

线程池 之前一直有这个疑问:我们平时使用线程都是各种new Thread(),然后直接在run()方法里面执行我们要做的各种操作,使用完后需要做什么管理吗?线程池为什么能维持住核心线程不释放,一直接收任务进行处理呢?线程 线程无他,主要有两个方法,我们先看看start()方法介绍:...

2018-07-25 23:35:05 5234

转载 JAVA8之collect总结

JAVA8之collect总结(给自己) 一,collect是一个终端操作,它接收的参数是将流中的元素累积到汇总结果的各种方式(称为收集器)二,预定义收集器包括将流元素归约和汇总到一个值.如下工厂方法 返回类型 用于 toList List<T> 把流中所有元素收集到List中 示例:List...

2018-07-23 22:34:45 340

转载 缓存穿透,缓存击穿,缓存雪崩解决方案分析

前言设计一个缓存系统,不得不要考虑的问题就是:缓存穿透、缓存击穿与失效时的雪崩效应。缓存穿透缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。在流量大时,可能...

2018-07-23 16:49:34 226

转载 RPC原理解析

1.RPC原理解析1.1 什么是RPCRPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP/IP或UDP,为通信程序之间携带信息数据。RPC将原来的本地调用转变为调用远端的服务器上的方法,给系统的处理能力和吞吐量带来了近似于无限制提升的可...

2018-07-23 10:37:27 255

转载 mysql联合索引的理解

命名规则:表名_字段名1、需要加索引的字段,要在where条件中2、数据量少的字段不需要加索引3、如果where条件中是OR关系,加索引不起作用4、符合最左原则https://segmentfault.com/q/1010000003984016/a-1020000003984281联合索引又叫复合索引。对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只...

2018-07-19 23:19:16 1118

转载 使用Java8的fuction函数式编程例子

前言由于这段时间使用SpringBoot的原因,很多东西都用了SpringBoot内部的Template来做,也没关心底层怎么操作的。最近忙里偷闲回答了几个问题,正巧看到一个关于Redis资源释放问题的,引起了我的兴趣,便去看了下官方文档。 Redis推荐的Java客户端是jedis,关于Jedis的配置那些我就不说了,直接上他的示例代码。/// Jedis implements Clo...

2018-07-12 14:58:18 823

转载 MYSQL中的乐观锁实现(MVCC)简析

什么是MVCCMVCC即Multi-Version Concurrency Control,中文翻译过来叫多版本并发控制。MVCC是解决了什么问题众所周知,在MYSQL中,MyISAM使用的是表锁,InnoDB使用的是行锁。而InnoDB的事务分为四个隔离级别,其中默认的隔离级别REPEATABLE READ需要两个不同的事务相互之间不能影响,而且还能支持并发,这点悲观锁是达不到的,所以R...

2018-07-09 17:32:59 287

转载 分析ReentrantLock的实现原理

Java并发编程源码分析系列:分析Java线程池的创建分析Java线程池执行原理分析Java线程池Callable任务执行原理前几篇文章分析了线程池的原理,接下来研究锁的方面。显式锁ReentrantLock和同步工具类的实现基础都是AQS,所以合起来一齐研究。什么是AQSAQS即是AbstractQueuedSynchronizer,一个用来...

2018-07-06 10:53:18 223

转载 什么是可重入锁

可重入锁,也叫做递归锁,指的是同一线程外层函数获得锁之后,内层递归函数仍然有获取该锁的代码,但不受影响。本文里面讲的是广义上的可重入锁,而不是单指JAVA下的ReentrantLock。可重入锁,也叫做递归锁,指的是同一线程 外层函数获得锁之后 ,内层递归函数仍然有获取该锁的代码,但不受影响。...

2018-07-06 10:19:00 1498

转载 Java多线程-线程池ThreadPoolExecutor的submit返回值Future

起原文地址 http://blog.csdn.net/qq_25806863/article/details/71214033一般使用线程池执行任务都是调用的execute方法,这个方法定义在Executor接口中:public interface Executor { void execute(...

2018-07-05 23:10:45 2302

转载 Java并发控制:ReentrantLock Condition使用详解

Java并发控制:ReentrantLock Condition使用详解 生产者-消费者(producer-consumer)问题,也称作有界缓冲区(bounded-buffer)问题,两个进程共享一个公共的固定大小的缓冲区。其中一个是生产者,用于将...

2018-07-05 22:04:55 215

转载 LinkedBlockingDeque源码分析

LinkedBlockingDeque是一个基于链表的双端阻塞队列。和LinkedBlockingQueue类似,区别在于该类实现了Deque接口,而LinkedBlockingQueue实现了Queue接口。该类的继承关系如下图: 本文将与LinkedBlockingQueue进行比较,关于LinkedBloc...

2018-07-05 21:35:16 276

转载 Jdk8 Optional 的使用

在实习过程中,阅读项目源码的时候看到了Optional的用法,将返回的类进行包装,调用Optional类中的一些方法。不禁利用一些业余时间,好好学习一下jdk1.8带给我们强大的用法。总之就是,简化了之前代码的书写,使用函数式编程,不用反复去检验返回值为null的情况,总之,谁用谁知道,好好学吧 我...

2018-07-05 17:52:14 735

转载 Lock锁和Condition条件

浅谈Synchronized:  synchronized是Java的一个关键字,也就是Java语言内置的特性,如果一个代码块被synchronized修饰了,当一个线程获取了对应的锁,执行代码块时,其他线程便只能一直等待,等待获取锁的线程释放锁,而获取锁的线程释放锁会有三种情况:  1).获取锁的线程执行完该代码块,然后线程释放对锁的占有;  2).线程执行发生...

2018-07-05 17:44:39 290

转载 java函数式编程之Predicate

描述:Predicate< T>接口接受一个T类型参数,返回一个boolean值。源码:public interface Predicate<T> { boolean test(T t);}123测试代码如下: Predicate<Integer> boo...

2018-07-05 15:30:43 240

原创 注解简单理解和原理

前言在项目中会使用工具类来处理一些通用的业务,而工具类有一部分是通过注解来完成的。比如:对excel的上传与解析。利用pojo封装excel解析出来的数据,动态的实现excel的解析。 什么是注解注解也叫元数据,例如我们常见的@Override和@Deprecated,注解是JDK1.5版本开始引入的一个...

2018-06-17 16:04:46 340

原创 Java正则表达式--Matcher.group函数的用法

原来,group是针对()来说的,group(0)就是指的整个串,group(1) 指的是第一个括号里的东西,group(2)指的第二个括号里的东西。最近学习正则表达式,发现Java中的一些术语与其他地方描述的有所差异。比如Java正则表达式中的“组”概念与《正则表达式必知必会》一书中讲述的“子表达式”其实是一样的,只是表述不同而已。由此也引发了使用JavaAPI时对group(int grou...

2018-05-22 15:09:10 529

转载 使用拦截器记录你的SpringBoot的请求日志

请求日志几乎是所有大型企业级项目的必要的模块,请求日志对于我们来说后期在项目运行上线一段时间用于排除异常、请求分流处理、限制流量等。请求日志一般都会记录请求参数、请求地址、请求状态(Status Code)、SessionId、请求方法方式(Method)、请求时间、客户端IP地址、请求返回内容、耗时等等。如果你得系统还有其他个性化的配置,也可以完成记录。本章目标通过Sp...

2018-05-21 11:27:15 7765

原创 ThreadLocal类的源码分析与应用场景

前言在实习的过程中项目有用到TreadLocal类,主要就是在日志控制中,通过一个bean->RequestLog自定义类来保存request请求的参数,然后在控制台中打印这些请求参数。在封装请求的参数bean中可以维护一个静态的TreadLocal对象,将每一次请求也就是不同的线程维护自己线程内的一个requestLog实例对象,封装不同的request对象中的请求参数,然后在控制台打...

2018-05-18 17:45:06 357

转载 java8 手把手教你学会写lambda表达式

前言小白刚进入公司实习,什么都需要学习。在阅读大神的代码,jdk1.8新特性运用的飞起,因此自己也要好好学习这一块,希望能和大神一样优秀,写出更简洁的代码 - -Java8发布以后,lambda表达式将大量替代匿名内部类的使用,简化代码的同时,更突出了原来匿名内部类中最重要的那部分包含真正逻辑的代码。尤其是对于做数据的同学来说,当习惯使用类似scala之类的函数式编程语言以后,体会将更加深...

2018-05-16 10:58:12 418

转载 如何在java中使用ConcurrentHashMap

ConcurrentHashMap(简称CHM)是在Java 1.5作为Hashtable的替代选择新引入的,是concurrent包的重要成员。在Java 1.5之前,如果想要实现一个可以在多线程和并发的程序中安全使用的Map,只能在HashTable和synchronized Map中选择,因为HashMap并不是线程安全的。但再引入了CHM之后,我们有了更好的选择。CHM不但是线程安全的,而...

2018-05-15 14:56:55 714 1

转载 java中fail-fast 和 fail-safe的区别

原文地址:http://javahungry.blogspot.com/2014/04/fail-fast-iterator-vs-fail-safe-iterator-difference-with-example-in-java.html在我们详细讨论这两种机制的区别之前,首先得先了解并发修改。1.什么是同步修改?当一个或多个线程正在遍历一个集合Collection,此时另一个线程...

2018-05-15 14:36:55 330

转载 JDK8新特性:函数式接口@FunctionalInterface的使用说明

我们常用的一些接口Callable、Runnable、Comparator等在JDK8中都添加了@FunctionalInterface注解。通过JDK8源码javadoc,可以知道这个注解有以下特点:1、该注解只能标记在”有且仅有一个抽象方法”的接口上。2、JDK8接口中的静态方法和默认方...

2018-05-14 20:26:58 1970

原创 超实用的MySQL replace into 用法

超实用的 MySQL replace into 用法(insert into 的增强版)今天项目中出现一个问题,大概就是向表中插入数据,如果有一个字段例如:username被设置成唯一索引,那么该用户再插入一条数据时会报错。这时如果是常规做法,需要先根据username获取之前保存的一条数据,如果存在,就修改这条数据,如果不存在,则插入。然后问了下老大,老大给了我一个特别简单使用的办法,就是 ...

2018-05-11 20:13:49 1951

转载 java注解是怎么实现的

2018-05-09 11:58:15 3085

转载 Spring Boot 揭秘与实战 源码分析 - 开箱即用,内藏玄机

前言Spring Boot提供了很多”开箱即用“的依赖模块,那么,Spring Boot 如何巧妙的做到开箱即用,自动配置的呢?开箱即用,内藏玄机Spring Boot提供了很多”开箱即用“的依赖模块,都是以spring-boot-starter-xx作为命名的。例如,之前提到的 spring-boot-starter-redis、spring-boot-starter-data-mongodb、s

2018-05-08 11:16:22 534

原创 @Controller和@RestController的区别和应用场景

@Controller和@RestController的区别和应用场景官方文档: @RestController is a stereotype annotation that combines @ResponseBody and @Controller. 意思是: @RestController注解相当于@ResponseBody + @Controller合在一起的作用。从@RestCon

2018-05-08 10:38:30 3251

原创 java中的DateTime类型和mysql中的TimeStamp类型时间数据差了13小时的问题解决

今天在项目中遇到java的TimeStamp类型的时间数据插入到mysql的DateTime类型时发现时间刚好差了13个小时。因此上网查了查相关问题的解决,折腾了半天,记录下来解决方案。不管是差了几个小时,其实就是时区的问题。可以通过先查询自己本地时区 一般都是东八区没错。然后关键就是也将数据库mysql中的时区改为东八区。 1.登录mysql mysql -uroot -p 输入密码;

2018-05-01 12:11:47 9588 3

原创 n&(n-1)位运算的妙用

做oj遇到一道题,求二进制中1的个数。发现有大佬用来(n&n-1)。觉得很神奇。有空下来细想。确实是这么个道理。记录一下自己的分析过程一、n-1发生了什么①、二进制数n,n-1后,如果最后一位是0,将向前一位借2,2-1=1。最后一位为1。如果前一位为0,将继续向前一位借2,加上本身少掉的1.则变为1。一直遇到1。减为0.所以 二进制 xxxx10000-1 = xxxx01...

2018-03-30 21:27:25 22120 1

原创 链家笔试题--java实现两个大整数相乘的算法

两个字符串表示两个非常大的数,请设计算法计算这两个大数的乘积,结果用字符串表示。例如S1=”7832974972840919321747983209327”,S2=”1987432091904327543957”,设计算法计算出S1*S2的结果,结果用String输出,不准用BigInter。思路: 根据手工计算两数相乘的过程,用代码实现这个过程。注意没有考虑负数的情况。代码如下:...

2018-03-29 16:39:09 2177

原创 leetcode+华为笔试题-java实现返回一个整数数组中最大子数组的和

方法一:暴力枚举 定义一个最大值max初始化一个很小的数,定义一个变量sum表示求和值,遍历数组元素,从第一个元素开始,依次相加,如果和sum比最大值max大就将sum赋值给最大值。然后再来一个循环控制从第i个数组元素开始求和,直到n. 时间复杂度:O(n^2)方式二:贪心法 因为每次求和都是将i前面的元素相加,会出现重复的情况,如果出现相加完之后是负数,说明这时我就要继续遍历找到第...

2018-03-29 10:49:45 1469 2

转载 AtomicInteger源码分析——基于CAS的乐观锁实现

1 悲观锁与乐观锁我们都知道,cpu是时分复用的,也就是把cpu的时间片,分配给不同的thread/process轮流执行,时间片与时间片之间,需要进行cpu切换,也就是会发生进程的切换。切换涉及到清空寄存器,缓存数据。然后重新加载新的thread所需数据。当一个线程被挂起时,加入到阻塞队列,在一定的时间或条件下,在通过notify(),notifyAll()唤醒回来。在某个资源不可用的时候,就将c

2018-03-28 17:29:22 768

转载 Java四种引用包括强引用,软引用,弱引用,虚引用

强引用:只要引用存在,垃圾回收器永远不会回收 Object obj = new Object(); //可直接通过obj取得对应的对象 如obj.equels(new Object()); 而这样 obj对象对后面new Object的一个强引用,只有当obj这个引用被释放之后,对象才会被释放掉,这也是我们经常所用到的编码形式。软引用:非必须引用,内存溢出之前进行回收,可以通过以...

2018-03-27 16:06:17 739

转载 数据库三大范式的理解

一: 引言       作为一个数据库的学习者,搞懂关系数据库的三大范式是很有用的。然而教科书上有关数据库范式的介绍都是采用学术性的定义,语法羞涩,让人难懂,故写下自己对数据库范式的理解,给初学者提供帮助,也备日后查看。       本文不介绍规范化程度高于3NF的范式,因为其在实际应用中基本不会用到,原因也是很明...

2018-03-26 23:01:04 3882

转载 用户态切换到内核态的3种方式

a. 系统调用 这是用户态进程主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作,比如fork()实际上就是执行了一个创建新进程的系统调用。而系统调用的机制其核心还是使用了操作系统为用户特别开放的一个中断来实现,例如Linux的int 80h中断。 b. 异常 当CPU在执行运行在用户态下的程序时,发生了某些事先不可知的异常,这时会触发...

2018-03-26 16:52:51 10868

原创 剑指Offer-29-java实现查找数组中出现次数超过一半的元素

思路: 数组中有一个数字出现的次数超过数组长度的一半,也就是说它出现的次数比其他所有数字出现次数的和还要多。 因此我们可以考虑在遍历数组的时候保存两个值: 一个是数组中的一个数字, 一个是次数。当我们遍历到下一个数字的时候,如果下一个数字和我们之前保存的数字相同,则次数加1:如果下一个数字和我们之前保存的数字,不同,则次数减1 。如果减1之后,此时次数为零,我们需要保存下一个数字,并把次数设为

2018-03-26 15:58:34 1889

转载 Redis的字典渐进式扩容与ConcurrentHashMap的扩容策略比较

本文介绍Redis的字典(是种Map)与ConcurrentHashMap的扩容策略,并比较它们的优缺点。(不讨论它们的实现细节)首先Redis的字典采用的是一种‘’单线程渐进式rehash‘’,这里的单线程是指只有一个线程在扩容,而在扩容的同时其他的线程可以并发的进行读写。Redis系统后台会定时给予扩容的那个线程足够的运行时间,这样不会导致它饿死。大致过程是这样的:ht...

2018-03-26 11:21:45 2537 1

转载 MD5加密算法全解析

“MD5”加密算法全解析 大家好,我们现在来讲解关于加密方面的知识,说到加密我认为不得不提MD5,因为这是一种特殊的加密方式,它到底特殊在哪,现在我们就开始学习它全称:message-digest algorithm 5 翻译过来就是:信息 摘要 算法 5...

2018-03-26 10:50:26 1129

空空如也

空空如也

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

TA关注的人

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