自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(161)
  • 资源 (2)
  • 收藏
  • 关注

原创 ManagementFactory——java监控和管理JVM

近期在看相关代码的时候发现了一个比较有意思的类,这个类属于java的管理类,来的名字叫ManagementFactory,通过学习该类的相关源码发现这是一个用于监控和管理JVM的类。通过该类包含可以查看很多信息:操作系统模块、类加载器模块、编译器模块、内存管理模块、内存池管理模块、JVM在运行时管理的bean、JVM线程系统管理的bean等等信息通过对该源码的学习,后续工作中可能会将其用于监控JVM和相关的业务代码中在此通过简单的编码对其进行了解代码示例如下:import com.alibaba.

2020-06-07 21:18:20 2377 1

原创 SpringBoot启动流程详解

SpringBoot启动流程分析使用Springboot 进行开发已有两年的时间了,但是一直没有深入了解过其相关源码,近期有时间可以仔细阅读并分析一下相关源码,本文就从SpringBoot的启动流程开始分析学习,在分析的过程中可能有些地方不太对,还请各位读者批评指出。首先看SpringBoot启动的时序图,该时序图并不是十分全面,启动流程中还有很多细节没有纳入进来:SpringBoot的启动入口代码如下:@SpringBootApplicationpublic class Application

2020-06-07 11:46:20 989 1

原创 使用自定义的注解做操作日志监控

在项目实践中,对于不同场景需要对用户的相关操作进行监控,如对后台人员的相关操作进行监控并进行相应的日志记录等,这个时候就会用上AOP,下面我讲根据自己在项目中遇到的实际情况进行描述和分析使用场景:对用户的增删改查等操作进行记录,以达到监控的目的。监控的级别可以到方法上面,也可以到某个类上面本文主要阐述到方法级别的日志监控首先自定义一个注解:import java.lang.annotat...

2019-06-02 22:38:31 818

原创 在接口中调用rest形式的接口

在工程实践中,可能经常会遇到一个项目中的服务组件需要调用另一个项目中的服务组件,除了使用dubbo接口之外,还可以使用rest调用的形式直接调用其他非本工程的接口,其使用方式如下:{ @Value("${service.host}") String hosts; // 方法 @Value("${service.method}") String crea...

2019-05-16 23:12:13 3168

转载 Tomcat空间不足:java.lang.IllegalStateException: Unable to create the directory [/tmp/tomcat.]

在springboot启动的时候遇到一个问题,在本地启动完全没有问题,但是放到服务器上启动时,则出现下面的问题:org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is java.lang.IllegalStateException: Unabl...

2019-05-16 08:47:03 6706 1

转载 常用的linux命令汇总

1、通常查找出错误日志 cat error.log | grep ‘nick’ , 这时候我们需要输出当前这个日志的前后几行cat error.log | grep -C 5 'nick' 显示file文件里匹配foo字串那行以及上下5行cat error.log | grep -B 5 'nick' 显示foo及前5行cat error.log | grep -A 5 'nick' 显示f...

2019-05-15 14:17:54 143

原创 MYSQL排序按照自定义的顺序排序

在做项目的过程中会遇到不同情况的排序,如对某个字段根据该字段的不同值进行排序:如需要对一张表的status字段按照1,0,2的顺序排序,这个时候就不能使用传统的asc进行排序了:select * from t where type = 2 order by status asc;而是要按照该字段的值进行排序:select * from ttt where type = 2 OR...

2019-05-13 17:50:52 2922

转载 java 对象属性复制

java 对象属性复制将一个对象的属性值赋值给另一个对象, 属性名需要相同import org.springframework.beans.BeanUtils;BeanUtils.copyProperties(源对象, 目标对象);

2019-04-16 23:29:54 1245

原创 去除网页内容中的一些样式,包含图片的地址,样式,空格,回车,还有其他的一些特殊转义符

去除网页中的一些样式public static String removeImgUrl(String str){if (str == null){return “”;}else{// 可能存在中文的尖括号或者英文的尖括号,所以需要过滤两次return str.replaceAll("&lt", “<”).replaceAll("&gt", “&am

2019-01-31 10:45:56 329 1

转载 服务器负载均衡的基本功能和实现原理

负载均衡设备作为纵跨网络2-7层协议的设备,往往放置在网络设备和应用设备的连接处,对工程师在网络和应用基本知识方面的要求远高于其他设备,所以我们要在基本功能的理解上下更多的功夫。负载均衡设备还有另外一个称呼:4/7层交换机,但它首先是个2-3层交换机,这要求我们首先掌握2-3层的基本知识,然后才是本文介绍的内容。服务器负载均衡有三大基本Feature:负载均衡算法,健康检查和会话保持,这三个Feat

2017-10-09 11:29:21 662

原创 猴子下山摘桃

/* *题目描述: * 小猴子下山,沿着下山的路有一排桃树,每棵树都结了一些桃子。小猴子想摘桃子,但是有一些条件需要遵守,小猴子只能沿着下 * 山的方向走,不能回头,每颗树最多摘一个,而且一旦摘了一棵树的桃子,就不能再摘比这棵树结的桃子少的树上的桃子。那么小 * 猴子最多能摘到几颗桃子呢?举例说明,比如有5棵树,分别结了10,4,5,12,8颗桃子,那么小猴子最多能摘3颗桃子,来

2017-08-21 19:59:00 3146 1

原创 汽水瓶

题目描述 有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝? 输入

2017-08-19 16:56:22 558

原创 简单密码

密码是我们生活中非常重要的东东,我们的那么一点不能说的秘密就全靠它了。哇哈哈. 接下来渊子要在密码之上再加一套密码,虽然简单但也安全。假设渊子原来一个BBS上的密码为zvbo9441987,为了方便记忆,他通过一种算法把这个密码变换成YUANzhi1987,这个密码是他的名字和出生年份,怎么忘都忘不了,而且可以明目张胆地放在显眼的地方而不被别人知道真正的密码。他是这么变换的,大家都知道手机上的字母:

2017-08-19 16:33:52 543

原创 密码验证合格程序

密码要求:1.长度超过8位2.包括大小写字母.数字.其它符号,以上四种至少三种3.不能有相同长度超2的子串重复说明:长度超过2的子串输入描述: 一组或多组长度超过2的子符串。每组占一行 输出描述: 如果符合要求输出:OK,否则输出NG 示例1 输入021Abc9000 021Abc9Abc1 021ABC9000 021$bc9000 输出OK NG NG OKimport

2017-08-19 16:14:05 382

原创 Android Camera从App层到framework层到HAL层的初始化过程

Android camera 从上到下可以分为四个部分: Application层、 framework层、 HAL(hardware abstract layer)层、 Kernel层 一般面向开发者的话主要集中在Application层和framework层,但是一些厂商需要定制一些属于自己特有的东西的时候会去修改HAL层集成自己的一些东西,至于Kernel层一般的开发人员不会涉及到。

2017-08-10 16:20:52 13930 9

原创 Android 源码学习笔记一——前期准备

经过一个半月对Android camera源码的学习和思考,这段时间趁着机会分享一下在学习的过程。过程是艰辛的,不敢保证学习的路线是正确的,很多东西都是出于摸索之中,废话不多说,直接进主题。一、开发环境的搭建 做Android的偏底层点的开发,一般都需要在LINUX环境下进行开发和调试,因为Linux的强大与方便,很多开发在Linux下是比较简单的,所以广大程序员们选择在Linux下进行开发和调试

2017-08-10 10:28:38 497

转载 1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)

求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 输入: 输入可能包含多个测试样例。 对于每个测试案例,输入为一个整数n(1<= n<=100000)。 输出: 对应每个测试案例, 输出1+2+3+…+n的值。 样例输入: 3 5 样例输出: 6 15import java.util.S

2017-08-06 21:48:27 527

原创 斐波那契数列问题汇总

第一种情况:直接让斐波那契数列的第几项。f(1)=1,f(2)=1. 如:现在要求输入一个整数n,请你输出斐波那契数列的第n项。第二种情况:跳台阶问题也是一种斐波那契数列问题,只不过是初始情况不一样而已。 如:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶,求该青蛙跳上一个n级的台阶一共有多少种跳法。f(0)=1,f(1)=2.如:我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩

2017-05-26 14:59:29 1422

转载 serverlet总结

一,什么是Servlet?Servlet是一个Java编写的程序,此程序是基于Http协议的,在服务器端运行的(如tomcat),是按照Servlet规范编写的一个Java类。二,Servlet有什么作用?主要是处理客户端的请求并将其结果发送到客户端。三,Servlet的生命周期?Servlet的生命周期是由Servlet的容器来控制的,它可以分为3个阶段;初始化,运行,销毁。初始化阶段:1,Ser

2017-05-25 10:57:29 5206

转载 Java开发中的23种设计模式详解

设计模式(Design Patterns)——可复用面向对象软件的基础设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式

2017-05-15 17:24:12 314

原创 2048小游戏

代码:import java.awt.Color;import java.awt.EventQueue;import java.awt.Font;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.util.Random;import javax.swing.BorderFactory;i

2017-05-04 11:11:19 358

转载 Java 8新特性

在Java Code Geeks上已经有大量的关于Java 8 的教程了,像玩转Java 8——lambda与并发,Java 8 Date Time API 教程: LocalDateTime和在Java 8中抽象类与接口的比较。我们也在其他地方引用了15个必读的Java 8教程。当然,我们也探究了Java 8的一些不足之处,比如Java 8的“黑暗面”。目录结构1、介绍2、Java语言的新特性2.

2017-05-03 21:22:16 316

转载 JVM学习笔记-内存管理机制

Java与C++之间有一堆由内存动态分配与垃圾收集技术所围成的“高墙”,墙外面的人想进去,墙里面的人却想出来。 —— 《深入理解Java虚拟机:JVM高级特性与最佳实践》运行时数据区域Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途。以及创建和销毁的时间。有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。程

2017-05-01 12:47:49 417

原创 递归读取文件夹下的文件

如题:使用递归读取文件夹下面的所有文件/** * */package problem1;import java.io.File;/** * @author Hutongling * * @time:2017年4月30日 下午9:16:53 */public class 递归读取文件夹下面的所有文件 { /** * 递归读取文件夹下的 所有文件 *

2017-04-30 21:28:56 2015

转载 并发包中的Queue

说到队列尤其是阻塞队列,不得不说jdk的并发包(Java.util.concurrent)中的相关数据结构,今天我们就来对java(JDK1.7)中的队列做一个总结。1、Queue队列接口,定义了队列基本的接口方法前两个方法是往队列塞数据,在队列空间不足的情况下add会抛出异常,而offer会返回false。poll和peek的区别是后者不会从队列中移除元素。2、BlockingQueue、Bloc

2017-04-30 20:54:46 1541

转载 ConcurrentHashMap总结

并发编程实践中,ConcurrentHashMap是一个经常被使用的数据结构,相比于Hashtable以及Collections.synchronizedMap(),ConcurrentHashMap在线程安全的基础上提供了更好的写并发能力,但同时降低了对读一致性的要求(这点好像CAP理论啊 O(∩_∩)O)。ConcurrentHashMap的设计与实现非常精巧,大量的利用了volatile,fi

2017-04-28 16:40:48 403

转载 ConcurrentHashMap原理分析

本文则重点介绍ConcurrentHashMap实现的细节。HashMap就不介绍了,具体请查看JDK7与JDK8中HashMap的实现HashTable是一个线程安全的类,它使用synchronized来锁住整张Hash表来实现线程安全,即每次锁住整张表让线程独占。ConcurrentHashMap允许多个修改操作并发进行,其关键在于使用了锁分离技术。它使用了多个锁来控制对hash表的不同部分进行

2017-04-28 16:32:41 372

转载 JVM中的逃逸分析

逃逸分析(Escape Analysis)是目前Java虚拟机中比较前沿的优化技术。逃逸分析的基本行为就是分析对象动态作用域:当一个对象在方法中被定义后,它可能被外部方法所引用,例如作为调用参数传递到其他地方中,称为方法逃逸。例如:public static StringBuffer craeteStringBuffer(String s1, String s2) { StringB

2017-04-28 16:23:41 523

转载 Java中逆变与协变

看下面一段代码Number num = new Integer(1); ArrayList<Number> list = new ArrayList<Integer>(); //type mismatchList<? extends Number> list = new ArrayList<Number>();list.add(new Integer(1)); //errorlist.add

2017-04-28 16:22:14 389

转载 JDK7与JDK8中HashMap的实现

JDK7中的HashMapHashMap底层维护一个数组,数组中的每一项都是一个Entrytransient Entry<K,V>[] table;我们向 HashMap 中所放置的对象实际上是存储在该数组当中; 而Map中的key,value则以Entry的形式存放在数组中static class Entry<K,V> implements Map.Entry<K,V> { fin

2017-04-28 16:19:08 257

转载 尾递归

1. 什么是尾递归尾递归是指所有递归形式的调用,一定是发生在函数的末尾。形式上只要最后一个return语句是单纯函数就可以。如:return tailrec(x+1);而return tailrec(x+1) + x;或者return x*tailrec(x+1);都不可以。因为无法更新tailrec()函数内的实际变量,只是新建一个栈。2. 尾递归的好处尾递归和一般的递归不同在对内存的占用,普通递

2017-04-28 16:16:10 312

转载 Java中的陷阱题

1、找奇数:public static boolean isOdd(int i){ return i % 2 == 1; }上面的方法真的能找到所有的奇数么?A:没有考虑到负数问题,如果i为负则不正确。应该return i%2 == 02、浮点数相减System.out.println(2.0-1.9);A:Java中的简单浮点数类型float和double不能够进行运

2017-04-28 16:14:19 984

转载 高并发Java 十 JDK8对并发的新支持

1. LongAdder和AtomicLong类似的使用方式,但是性能比AtomicLong更好。LongAdder与AtomicLong都是使用了原子操作来提高性能。但是LongAdder在AtomicLong的基础上进行了热点分离,热点分离类似于有锁操作中的减小锁粒度,将一个锁分离成若干个锁来提高性能。在无锁中,也可以用类似的方式来增加CAS的成功率,从而提高性能。LongAdder原理图:At

2017-04-28 16:08:55 500

转载 高并发Java 九 锁的优化和注意事项

1. 锁优化的思路和方法在[高并发Java 一] 前言中有提到并发的级别。一旦用到锁,就说明这是阻塞式的,所以在并发度上一般来说都会比无锁的情况低一点。这里提到的锁优化,是指在阻塞式的情况下,如何让性能不要变得太差。但是再怎么优化,一般来说性能都会比无锁的情况差一点。这里要注意的是,在[高并发Java 五] JDK并发包1中提到的ReentrantLock中的tryLock,偏向于一种无锁的方式,因

2017-04-28 16:06:24 1436

转载 高并发Java 八 NIO和AIO

IO感觉上和多线程并没有多大关系,但是NIO改变了线程在应用层面使用的方式,也解决了一些实际的困难。而AIO是异步IO和前面的系列也有点关系。在此,为了学习和记录,也写一篇文章来介绍NIO和AIO。什么是NIONIO是New I/O的简称,与旧式的基于流的I/O方法相对,从名字看,它表示新的一套Java I/O标 准。它是在Java 1.4中被纳入到JDK中的,并具有以下特性: NIO是基于块(

2017-04-28 16:01:23 761

转载 高并发Java 七 并发设计模式

1. 什么是设计模式在软件工程中,设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题 ,所提出的解决方案。这个术语是由埃里希·伽玛(Erich Gamma)等人在1990年代从建筑设计领 域引入到计算机科学的。 2. 单例模式单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为 比如:全局信息配置单例模式最

2017-04-28 15:50:52 2077

转载 高并发Java 六 JDK并发包2

1. 线程池的基本使用1.1.为什么需要线程池平时的业务中,如果要使用多线程,那么我们会在业务开始前创建线程,业务结束后,销毁线程。但是对于业务来说,线程的创建和销毁是与业务本身无关的,只关心线程所执行的任务。因此希望把尽可能多的cpu用在执行任务上面,而不是用在与业务无关的线程创建和销毁上面。而线程池则解决了这个问题,线程池的作用就是将线程进行复用。1.2.JDK为我们提供了哪些支持JDK中的相关

2017-04-28 15:31:42 465

转载 高并发Java 五 JDK并发包1

1. 各种同步控制工具的使用1.1 ReentrantLock ReentrantLock感觉上是synchronized的增强版,synchronized的特点是使用简单,一切交给JVM去处理,但是功能上是比较薄弱的。在JDK1.5之前,ReentrantLock的性能要好于synchronized,由于对JVM进行了优化,现在的JDK版本中,两者性能是不相上下的。如果是简单的实现,不要刻意去使用

2017-04-28 15:18:05 471

转载 高并发Java 四 无锁

1 无锁类的原理详解1.1 CASCAS算法的过程是这样:它包含3个参数CAS(V,E,N)。V表示要更新的变量,E表示预期值,N表示新值。仅当V 值等于E值时,才会将V的值设为N,如果V值和E值不同,则说明已经有其他线程做了更新,则当前线程什么 都不做。最后,CAS返回当前V的真实值。CAS操作是抱着乐观的态度进行的,它总是认为自己可以成功完成 操作。当多个线程同时使用CAS操作一个变量时,

2017-04-28 15:08:58 500

转载 高并发Java 三 Java内存模型和线程安全

网上很多资料在描述Java内存模型的时候,都会介绍有一个主存,然后每个工作线程有自己的工作内存。数据在主存中会有一份,在工作内存中也有一份。工作内存和主存之间会有各种原子操作去进行同步。 但是由于Java版本的不断演变,内存模型也进行了改变。本文只讲述Java内存模型的一些特性,无论是新的内存模型还是旧的内存模型,在明白了这些特性以后,看起来也会更加清晰。1. 原子性原子性是指一个操作是不可中断的

2017-04-28 15:06:17 310

java高级篇:JVM调优.mp4

分析常见的JVM调优技术及其相关条件,以及在实战中怎么使用到相关的技术进行调优,比较适合中高级开发进行学习,适合对JVM理解较深的开发学习

2020-09-19

Java面试.docx

java面试100题,其中包含常见的java基础面试,还包含面试过程中问的最多的算法题,题题都有相关解答

2020-09-19

空空如也

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

TA关注的人

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