2.1 Java基础
文章平均质量分 88
双斜杠少年
希望经记录下来自己学习过程,并和大家一块分享
展开
-
slf4j 日志门面模式应用(双亲委派特例)
SLF4JSLF4J是一个日志抽象库 (Simple Logging Facede For Java 简单日志门面 ),它相当于一个服务的接口,具体的日志功能是有其中的日志框架去实现的,slf4j 可以在部署的时候接上想要使用的日志框架。通俗来说SLF4J是一个日志抽象库,必须和其他日志库配合才能正常运行。一般来说,需要将抽象层(例如slf4j-api-xx.jar)+ 中间层(例如slf4j-log4j12)+ 实现层(例如log4j)这三层都配置好才能保证SLF4J正常运行。另外,有的日志库可以原创 2022-03-17 21:39:20 · 1334 阅读 · 0 评论 -
总结:一文死磕 synchronized 和 AQS 系
先将ReentrantLock跟常用的Synchronized进行比较,其特性如下ReentrantLockSynchronized锁实现依赖AQS监视器Monitor模式灵活性支持响应中断、超时、尝试获取锁不灵活释放形式必须显示的调用unlock()释放锁自动释放监视器锁类型公平锁&非公平锁非公平锁条件队列可关联多个队列关联一个条件队列可重入性可重入可重入1. synchronizedsynchronized关键原创 2020-12-11 14:53:21 · 5246 阅读 · 0 评论 -
Java 并发关键字大练兵—一文读懂各个关键字
Java 并发大练兵本文介绍了Threadlocal、volatile、condition、Semaphore、CountDownLatch、unsafe 等关键字目录如下:Threadlocal 本地线程volatileconditionCountDownLatch 闩锁CyclicBarrier 篱栅Semaphore 信号灯unsafe 魔法类StampedLock 新读写锁https://github.com/527515025/JavaTest/tree/dev/src/原创 2020-12-09 15:44:14 · 929 阅读 · 6 评论 -
阿里真题:线程交叉打印
leetcode 1115. 交替打印FooBar 多线程交替打印五种方案实现多线程交替打印。涉及 CyclicBarrier 篱栅、回环屏障 、Semaphore 信号灯、ReentrantLock、synchronized、AtomicBoolean 无锁cas 。全部都已经在leetCode 提交通过代码如下:ReentrantLock 方案 /** * 方案3 ReentrantLock */ class FooBar3 { private i原创 2020-12-09 15:04:41 · 561 阅读 · 0 评论 -
一文分清23种设计模式-设计模式及PK小结
设计模式是为了可重用代码(可重用)、让代码更容易被他人理解(可读性)、保证代码可靠性。设计模式不是一种方法和技术,而是一种思想。1. OOP三大基本特性封装封装,也就是把客观事物封装成抽象的类,并且类可以把自己的属性和方法只让可信的类操作,对不可信的进行信息隐藏。继承继承是指这样一种能力,它可以使用现有的类的所有功能,并在无需重新编写原来类的情况下对这些功能进行扩展。多态多态指一个类实例的相同方法在不同情形有不同的表现形式。具体来说就是不同实现类对公共接口有不同的实现方式,但这些操作可以通过相原创 2020-11-18 14:25:02 · 1849 阅读 · 1 评论 -
一文明白JVM-万字长文,遇人随便问
JVMJVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。引入Java虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。1. 类加载Java 语言是一种具有动态性的解释型语言,类(Class)只有原创 2020-11-01 21:17:07 · 1431 阅读 · 2 评论 -
Java集合 Queue、LinkedList、PriorityQueue、Deque、ArrayDeque及 native函数
Queue接口Queue用于模拟了队列这种数据结构,队列通常是指“先进先出”(FIFO)的容器。队列的头部保存在队列中时间最长的元素,队列的尾部保存在队列中时间最短的元素。新元素**插入(offer)**到队列的尾部,**访问元素(poll)**操作会返回队列头部的元素。通常,队列不容许随机访问队列中的元素。常用方法1. 入队**void add(Object o):** 指定元素加入队列尾部boolean offer(Object o):同上,在有限容量队列中,此方法更好2. 出队*原创 2020-10-11 19:02:46 · 753 阅读 · 0 评论 -
表达式解析器Mvel2.0(MVFLEX Expression Language)
表达式解析器Mvel2.0(MVFLEX Expression Language)时间过的好快,突然就发现,已经过去一两年了,这一两年博客也写的不多,快要进入中年了,最重要的就是自律。要好好睡觉,好好学习,好好工作。废话不多说,这次给大家说的是 表达式语言解析Mvel2.0简介MVEL为 MVFLEX Expression Language(MVFLEX表达式语言)的缩写,它是一种动态/静态的可嵌入的表达式语言和为Java平台提供Runtime(运行时)的语言。最初是作为一个应用程序框架实用程序的语原创 2020-08-14 16:48:07 · 6701 阅读 · 0 评论 -
Java8重新认识HashMap
本文Java 版本 1.8.0_92-b14引子前段时间,朋友问了一道力扣算法题,求两数之和。题目是给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。要求时间复杂度:O(n)我们把包含有 nn 个元素的列表遍历两次。由于哈希表将查找时间缩短到 O(1)O(1) ,所以时间复杂度为 O(n)。空间复杂度:O(n)所需的额外空间取决于哈希表中存储的元素原创 2020-06-28 11:31:41 · 654 阅读 · 0 评论 -
java8 小技巧保证分组groupingBy后排序不变
问题:遇到一个小问题,查询出来一组数据后,按照其中的属性进行groupBy 分组 ,分组后要保证顺序不变。排查首先去api中查找解决//一个参数 public static <T, K> Collector<T, ?, Map<K, List<T>>> groupingBy(Function<? super T, ? ex...原创 2020-03-03 14:45:59 · 20636 阅读 · 6 评论 -
RocketMq 初识和springboot-rockerMq
介绍:消息队列(Message Queue,简称MQ)。消息中间件作为实现分布式消息系统可拓展、可伸缩性的关键组件,具有高吞吐量、高可用等等优点。优势:削峰填谷(主要解决瞬时写压力大于应用服务能力导致消息丢失、系统奔溃等问题)系统解耦(解决不同重要程度、不同能力级别系统之间依赖导致一死全死)提升性能(当存在一对多调用时,可以发一条消息给消息系统,让消息系统通知相关系统)蓄流压测(线上...原创 2019-12-22 16:48:56 · 1975 阅读 · 0 评论 -
红黑树学习及Java实现
BST二叉查找树(Binary Search Tree,简称BST)是一棵二叉树,它的左子节点的值比父节点的值要小,右节点的值要比父节点的值大。它的高度决定了它的查找效率。在理想的情况下,二叉查找树增删查改的时间复杂度为O(logN)(其中N为节点数),最坏的情况下为O(N)。当它的高度为logN+1时,我们就说二叉查找树是平衡的。BST存在的问题BST存在的主要问题是,数在插入的时候会...原创 2019-10-31 17:49:57 · 3685 阅读 · 5 评论 -
post 和get提交的乱码问题
3 乱码问题问题3.1 post乱码添加过滤器在web.xml添加post乱码filter在web.xml中加入:filter>filter-name>CharacterEncodingFilterfilter-name>filter-class>org.springframework.web.filter.CharacterEncodingFilterfilt原创 2015-07-31 19:11:19 · 879 阅读 · 0 评论 -
SSH连接GitHub、GitHub配置ssh key
配置git的ssh 提交需要以下步骤1.设置Git的user name和email2.生成ssh3.配置git 的ssh key1.设置Git的user name和email $ git config --global user.name "527515025" $ git config --global user.email "527515025@qq.com"2.生成ssh新打开一个终端输入原创 2016-12-11 21:08:21 · 13490 阅读 · 1 评论 -
hexo+github 分分钟搭建博客
星期五听公司大牛讲了wiki 和hexo所以我就自己玩一下hexo。 我是在win 下搭建的hexo,hexo搭建是非常简单的。总共就 1. 安装git 2. 安装node.js 3. 使用npm 安装 hexo 4. 将hexo发布在github 上 5. 随意切换主题 6. 发布一篇博客 关于GIT 的安装我前面博客有写过。GIT 安装传送门安装node.jsgit 安装好以原创 2016-08-21 11:38:17 · 2291 阅读 · 3 评论 -
git 版本控制和SourceTree的安装使用 eclipse 的egit 插件安装使用
此方法本人试用过。 Git是什么? Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 Git可以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。优点: 适合分布式开发,强调个体。 公共服务器压力和数据量都不会太大。 速度快、灵活。 任意两个开发原创 2016-02-28 21:03:36 · 3306 阅读 · 0 评论 -
使用sourceTree回滚git代码到历史节点
前记回滚git代码好几次了,但是每次总是忘记回滚的步骤,每次都要再想一下,试一下。今天又回滚代码了,索性就记录一下。问题将当前代码回滚到某次历史提交。 本文示例:从master 回滚到 “回滚“ 历史节点。 操作在需要回滚的分支“右键“选择“将master重置到这次提交“,选择重置(强行合并)到需要回滚的历史节点。如图将master 回滚到 “回滚“ 历史节点。 再次重置(软合并)到当前分支最原创 2017-09-30 14:59:17 · 23276 阅读 · 2 评论 -
addShutdownHook+ @Scheduled(cron = "0 0/1 * * ?" )
钩子程序 Runtime.getRuntime(). (shutdownHook); 这个方法的含义说明: 这个方法的意思就是在jvm中增加一个关闭的钩子,当jvm关闭的时候,会执行系统中已经设置的所有通过方法addShutdownHook添加的钩子,当系统执行完这些钩子后,jvm才会关闭。所以这些钩子可以在jvm关闭的时候进行内存清理、对象销毁等操作。一、编写个测试类转载 2016-08-08 18:11:17 · 5191 阅读 · 0 评论 -
java调用shell脚本,解决传参和权限问题
1. java 执行shelljava 通过 Runtime.getRuntime().exec() 方法执行 shell 的命令或 脚本,exec()方法的参数可以是脚本的路径也可以是直接的 shell命令代码如下(此代码是存在问题的。完整代码请看2): /** * 执行shell * @param execCmd 使用命令 或 脚本标志位 * @param par原创 2017-12-11 13:18:31 · 24693 阅读 · 4 评论 -
java 位掩码之与(&)或(|)非(~)、左移 、右移
1. java 位掩码java 位掩码,在java开发中很少有场景会用到掩码,但是当系统中需要判断某个对象是否有 某些权限时,可以通过位掩码来做。位掩码 主要通过位运算,例如与(&)、非(~)、或(|)、异或(^)、移位(<<和>>)等来实现 权限判断功能。1.1 简单介绍一下位运算符(计算均为二进制计算)<< : 左移运算符,num << 1,相当于num乘以2>>原创 2017-12-11 22:35:39 · 2355 阅读 · 0 评论 -
java 8 部分新特性和函数式编程
1.接口可以添加非抽象的方法,使用关键字 default 即可 代码如下:public interface Ijava8 { void getName(String name); default String getName2(String name){ return name; }}实现如下:public class Java8 implements Ija原创 2016-09-11 13:17:47 · 2867 阅读 · 0 评论 -
java 阻塞队列
QueueLinkedList实现了Queue接口。Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类型如果是Queue时,就完全只能访问Queue接口所定义的方法 了,而不能直接访问 LinkedList的非Queue的方法),以使得只有恰当的方法才可以使用。BlockingQueue 继承了Queue接口BlockingQueueBlockingQueue 继承了Qu原创 2017-02-23 18:36:01 · 1427 阅读 · 0 评论 -
在spring boot中使用java线程池ExecutorService
1. 认识java线程池1.1 在什么情况下使用线程池?1.单个任务处理的时间比较短 2.需处理的任务的数量大 1.2 使用线程池的好处:1.减少在创建和销毁线程上所花的时间以及系统资源的开销 2.如不使用线程池,有可能造成系统创建大量线程而导致消耗完系统内存1.3 线程池包括以下四个基本组成部分:1、线程池管理器(ThreadPool):用于创建并管理线程池,包括 创建线程池,销毁线原创 2018-01-02 21:52:35 · 37376 阅读 · 3 评论 -
Java 常用的八种排序算法与代码实现
写排序算法是一个大工程,估计得好多天才可以写完。。。就慢慢写吧。未完待续。。。。内部排序和外部排序内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 我们这里说说八大排序就是内部排序。排序算法的稳定性?排序算法可以根据稳定性分为两种:稳定和非稳定算法。那么怎么区分它们?如果链表中存在两个相同元素,稳定排序算法可以在排序之后保持他原创 2017-09-12 00:14:42 · 1175 阅读 · 0 评论 -
java 实现二叉树题目
树是一种比较重要的数据结构,尤其是二叉树。二叉树是一种特殊的树,在二叉树中每个节点最多有两个子节点,一般称为左子节点和右子节点(或左孩子和右孩子),并且二叉树的子树有左右之分,其次序不能任意颠倒。二叉树是递归定义的,因此,与二叉树有关的题目基本都可以用递归思想解决,本文包括:建树向树中插入一个节点依据树节点的值删除树中的一个节点先续遍历树中的所有节点中续遍历树中的所有节点后续遍历树中的所原创 2017-09-11 23:33:32 · 917 阅读 · 0 评论 -
Java使用freemarker模版发送包含图片邮件
最近要做一个流程发送邮件的事情。发送的对象不一样。邮件内容不一样。使用freemarker 模版来作为邮件发送的模版。 java 发送邮件首先需要导入所需jar包。因为发送邮件中包涵图片所以需要引入文件传输依赖。 maven依赖如下: <dependency> <groupId>org.apache.commons</groupId>原创 2016-07-06 22:16:52 · 7221 阅读 · 3 评论 -
java 从本地拿取图片给前端显示
直接从本地拿取图片给前端显示,直接给前端流数据,图片文件不在后端项目中。而是在服务器上存储。核心代码如下://path 为图片在服务器的绝对路径 public static void getPhoto(HttpServletResponse response,String path) throws Exception { File file = new File(path);原创 2016-08-08 18:14:30 · 33787 阅读 · 15 评论 -
java 关键字final static arrayList
一、static一般而言,当设计某个class时,其实就是在描述其外观长相以及行为举措。除非以new 来产生对象,否则并不存在任何实质对象。产生对象之际,存储空间才会分配出来,其函数才可供外界使用。但是有两种情况上述方式无法解决。第一种是,你希望不论产生了多少对象或是不存在任何对象的情形下,那些特定的数据的存储空间都只有一份。第二种情况是,你希望某个函数不要和class object绑在一起,通过s原创 2016-08-17 17:47:35 · 6701 阅读 · 0 评论 -
Java 改变服务器时区为特定时区(解决获取系统时间和服务器相差8个小时)
//转换服务器时区为东八区 TimeZone timeZoneSH = TimeZone.getTimeZone(“Asia/Shanghai”); SimpleDateFormat outputFormat = new SimpleDateFormat(“yyyy年MM月dd日HH时mm分ss秒”, Locale.CHINA); outputF原创 2016-07-18 14:05:32 · 7265 阅读 · 0 评论 -
自己动手实现HTTP协议
HTTP协议时在应用层解析内容的,只需要按照它的报文格式封装和解析数据就可以了,具体的传输还是使用Socket。 HTTP协议是在接收到数据之后才会用到,所以在nioServer的Handler就可以了,在修改后的HttpHandler中首先获取到请求的报文,并打印出啊来报文的头部,请求的方法类型、URL和HTTP版本,最后将接收到的请求豹纹信息封装到响应豹纹的主体中返回给客户端。这里的H原创 2016-07-24 20:12:29 · 1892 阅读 · 0 评论 -
Axis2+tomcat7.0 实现webService 服务端发布与客户端的调用.
图形化配置axis2 的demo 请参考 http://jingyan.baidu.com/article/e4511cf33c0a992b845eaf98.html下边是比较繁琐的自行配制:第一步:首先要下载axis开发所需要的jar包 下载最新的:axis2-x.x.x-war.zip 关于tomcat 插件也有下载http://axis.apach转载 2016-04-15 22:34:52 · 6154 阅读 · 0 评论 -
ArrayList 和 LinkedList 和Vector使用上有什么区别?实现上有什么区别?
ArrayList 和 Vector 使用上有什么区别?实现上有什么区别?Vector和ArrayList在使用上非常相似,都可用来表示一组数量可变的对象应用的集合,并且可以随机地访问其中的元素。 1 Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Ve转载 2015-11-30 10:19:06 · 3958 阅读 · 3 评论 -
java 实现socket基于TCP的多线程多机交互
服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。客户端,使用Java socket通信对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不需要指原创 2015-08-02 17:47:30 · 5011 阅读 · 0 评论 -
java 实现socket基于UDP的双机通讯
UDP提供了无连接通信,且不对传送数据包进行可靠性保证,适合于一次传输少量数据,UDP传输的可靠性由应用层负责。由于数据量小且不保证可靠性,适合即时通讯功能;实现代码如下:import java.awt.BorderLayout;import java.awt.Color;import java.awt.FlowLayout;import java.awt.event.Ac原创 2015-08-02 18:02:27 · 1752 阅读 · 0 评论 -
activity工作流表结构分析
1、结构设计1.1、 逻辑结构设计Activiti使用到的表都是ACT_开头的。ACT_RE_*:’RE’表示repository(存储),RepositoryService接口所操作的表。带此前缀的表包含的是静态信息,如,流程定义,流程的资源(图片,规则等)。ACT_RU_*:‘RU’表示runtime,运行时表-RuntimeService转载 2016-08-02 10:52:28 · 19948 阅读 · 0 评论 -
Maven依赖Scope标签简介
转自:http://blog.csdn.net/wuha0/article/details/18667983在一个maven项目中,如果存在编译需要 而发布不需要的jar包,可以用scope标签,值设为provided。如下: <dependency> <groupId>javax.servlet.jsp</groupId> <artifact转载 2016-11-29 09:48:33 · 687 阅读 · 0 评论 -
java 的List add 不同类型的对象
问题:今天看java的list ,list后面的<> 里面可以填多种类型,但是如果不填写类型那就默认为 Object 类型。 所有我门 add 到 list 里的 数据都会被转换成 Object 类型。而当我门再从list 中取出该数据时,就会发现数据类型已经改变。解答Object类是所有Java类的祖先。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。 在不明确给出原创 2016-12-29 10:58:12 · 12881 阅读 · 1 评论 -
json过滤某些属性 之@jsonignore
Jackson相关:使用Jackson相关的注解时一定要注意自己定义的属性命名是否规范。 命名不规范时会失去效果。(例如Ename ,Eage 为不规范命名。“nameE”,“ageE”为规范命名)我在此处掉坑半个小时。至于命名规范,大家自己搜索。其实不要太奇葩的命名都是可以得。如果使用@JsonIgnore注解不起效时请注意一下你的属性名字是否规范1、@JsonIgnoreProperties原创 2016-08-21 12:18:04 · 72505 阅读 · 8 评论 -
List ,Set,Map,hashcode,equals用法与区别 遍历map的方法
• Set(集) • List(列表) • Map(映射) 有人想有可以自动扩展的数组,所以有了List 有的人想有没有重复的数组,所以有了set 有人想有自动排序的组数,所以有了TreeSet,TreeList,Tree** List (inteface) 次序是List 的最重要特点,它确保维护元素特定的顺序. 元素有放入顺序,元素可重复 ,--ArrayList 允许对原创 2015-12-01 11:11:32 · 1238 阅读 · 0 评论 -
原型模式
场景假设现在我需要发送1000W封邮件,我使用多线程发送邮件(单线程的话,发完邮件我也入土了,时间太久。),我创建了一个邮件对象,每次给邮件对象赋值,然后发送出去,但是使用多线程,就遇到了线程安全问题,当线程一,创建好邮件对象后,还没有进行发送邮件操作时,线程二 又对邮件对象进行了赋值,然后线程一开始发送邮件,此时线程一发送的邮件对象,其实已经是线程二赋值的邮件对象了。那么怎么通过设计模式解决这个问原创 2017-07-18 22:42:12 · 711 阅读 · 0 评论