![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java基础
临窗,听雨声
Java是世界上最好的语言,不是js,不是php,不是python,谢谢!
展开
-
ReentrantLock,Condition,ReentrantReadWriteLock.ReadLock,ReentrantReadWriteLock.WriterLock简介
ReentrantLock重入锁 重入锁,在需要同步的代码部分进行锁定,使用完毕之后一定要释放锁。实例方式:ReentrantLock lock = new ReentrantLock(true) ;后面有个 Boolean 类型的 fair 参数,是标识该锁是否公平的,默认 不公平,公平的意思就是 锁的给与基于调用顺序,先调用的,先获取,不公平则是遵循cpu调用规则,默认...原创 2019-05-23 23:57:03 · 422 阅读 · 0 评论 -
Thread之实现线程并获取返回值,使用实现 Callable类方法
我们使用继承Thread类,实现Runable类实现线程的时候,都面临一个问题,那就是在run方法里面无法抛异常,无法获取线程执行完后的返回值,我们需要返回值的时候怎么办呢?这个时候就需要 实现Callable接口了我们来做一个龟兔赛跑的小实验第一个,写出一个赛跑类,里面包含 赛跑者的名字,速度,是否可以跑,跑的总步数几个字段,/** * 创建赛跑类 * @author snow...原创 2018-08-23 23:04:37 · 1994 阅读 · 0 评论 -
CyclicBarrier 类简介
CyclicBarrier 类,就像一个哨子,等所有人都准备好了之后,一声令下,全部开始跑。区别于 CountDownLatch ,CountDownLatch 是阻塞主线程,等其他的线程执行完了之后才让主线程继续执行。CyclicBarrier是阻塞子线程,等所有的子线程准备好了之后,才让所有的子线程全部开始执行具体用法: 1.实例化 final CyclicBarr...原创 2019-05-22 15:42:33 · 225 阅读 · 0 评论 -
ExecutorService 线程池简介
1. Executors 创建线程池的方法 newFixedThreadPool() 方法,该方法返回一个固定数量的线程池,该方法的线程数始终不变,当有一个任务提交时,若线程池中空闲,则立即执行,若没有,则会被暂缓在一个任务队列中等待有空闲的线程去执行。适用场景:可用于Web服务瞬时削峰,但需注意长时间持续高峰情况造成的队列阻塞。 newSingleThreadExec...原创 2019-05-22 12:21:33 · 295 阅读 · 0 评论 -
java.util.concurrent 包下容器简介
1.ConcurrentMap 接口ConcurrentHashMap:替代 HashTable,并发性能大大提升的mapConcurrentSkipListMap:替代TreeMap 可以并发排序的MapConcurrentHashMap内部使用段(Segment)来表示这些不同的部分,每个段其实就是一- 个小的HashTable,它们有自己的锁。只要多个修改操作发生在不同的...原创 2019-05-21 17:45:26 · 448 阅读 · 0 评论 -
@CacheEvict 模糊删除缓存问题-RedisTemplate 模糊key删除缓存
缓存管理使用注解形式,非常方便了我们的使用,然而今天我想 使用@CacheEvict 的实和key 进行 模糊删除,发现@CacheEvict 貌似不支持这样的操作,然后想起RedisTemplate 好像支持 key的模糊匹配。于是,方法有了既然@CacheEvict做不到,那就用RedisTemplate第一步:获取key这里的key就是 : user:role*...原创 2019-05-07 16:25:25 · 6315 阅读 · 0 评论 -
Master-Worker设计模式
Master-Worker设计模式,并行计算,很实用得一个设计模式。该设计模式的好处就是 并行计算,开一定的线程数去执行需要的操作,还是空间换时间,加快处理速度思路:在 Master 里面使用三个字段,分别去装 所有的任务,所有的 子节点(Worker),装每个Worker返回数据的map,在Worker里面使用 Master 的 queue,resultMap 的引用,当 ...原创 2019-05-19 18:38:10 · 389 阅读 · 0 评论 -
Java导出数据到excel,数据量百万级别
1.pom支持 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.10-FINAL</vers...原创 2019-04-23 10:56:21 · 1588 阅读 · 0 评论 -
思考:fastxml 的 ObjectMapper readValue(data , Map.class) 的时候,fastxml 是使用的哪个 Map
Map 是一个接口,比如说我们使用 mybatis的xml返回数据的时候,写 java.util.Map 类型,然后 Map 是接口肯定是不能实例化的,那么,返回的是 什么 类型的Map 呢?在这里,我看了 fastxml 的ObjectMapper readValue(data , Map.class) ,断点调试,进去之后,发现 在 BasicDeserializerFacrto...原创 2019-06-05 16:55:50 · 2685 阅读 · 0 评论 -
使用aop动态切换数据源
参考博客园大佬描述的问题,https://www.cnblogs.com/wscit/p/6257539.html源码github地址:https://github.com/winterme/pkusoft-aop-dynamic-datasource(#)背景:由于业务的需求,导致需要随时切换15个数据源,此时不能low逼的去写十几个mapper,所以想到了实现一个数据源的动态切换数...原创 2019-06-05 17:15:45 · 1917 阅读 · 1 评论 -
netty之tcp拆包粘包问题
# 解决tcp拆包,粘包问题* 方案一:消息定长* 方案二:在包尾部加上特殊字符进行分割* 方案三:将消息分为消息头,消息体,类似与自定义协议此处示例在尾部添加特殊字符解决拆包粘包问题在 ServerBootstrap的childHandler方法里面(initChannel)添加// 设置特殊分隔符ByteBuf buf = Unpooled.copiedBuffer(...原创 2019-08-06 23:29:02 · 202 阅读 · 0 评论 -
GetToken的故事
今天写一个接口,接口需要获取token,然后通过token访问,但是token可能会过期(失效),于是我要写一个获取token的方法,保证所有请求获取到的 token 都是有效的,那么,方案来了,声明一个标识符,标识是否需要枷锁,在token失效,刷新token的时候,进行枷锁,getToken 等待,刷新token的时候先将 标识设置为 true,然后获取完新的token之后设置为false...原创 2019-08-06 22:36:53 · 3514 阅读 · 1 评论 -
手写固定线程池
我们都知道线程池高效,是因为其节省了线程创建的资源。那么到底是怎样节省的呢?其实也很简单,就是根据给的知道线程池大小去new 多少个 Thread ,然后在 run 方法里面无限循环,从线程池的 任务队列里面获取方法执行。代码实例:import java.util.ArrayList;import java.util.Collections;import java.util.Li...原创 2019-08-09 00:27:12 · 258 阅读 · 0 评论 -
java 内存区域划分与内存溢出异常(浅谈解决OutOfMemoryError)
本文章根据周志明写的深入理解jvm第二章,以及个人的理解,查阅的资料而编写以下内容不做说明,jdk指1.6,虚拟机指 hotspot运行时数据区根据《java虚拟机规范 SE7版》 规定,java虚拟机所管理的内存将会包括一下几个运行时数据区1.程序计数器 程序计数器是一块较小的内存区域,用于当前执行程序的字节码的行号指示,如果java在执行 native 方法的时候...原创 2019-07-21 14:04:02 · 709 阅读 · 0 评论 -
使用aop+redis+注解 实现 限制单位时间内访问接口的次数
今天上午看博客,看到了一篇大佬写的文章:https://blog.csdn.net/Muscleheng/article/details/91492302讲诉了怎样根据IP限制指定时间内访问接口的次数,看完之后,发现有点像是硬编码,不够灵活,个人觉得 使用 aop+自定义注解可能会更好一些。源码地址:https://github.com/winterme/SpringBoot-aop-an...原创 2019-06-17 17:14:21 · 3240 阅读 · 4 评论 -
使用 AIO 进行网络编程=>模拟 Http服务器
此文章用于熟悉 AIO 的基本操作之前用 NIO 写过,地址:https://blog.csdn.net/yali_aini/article/details/91978722步骤:1.创建线程池 2.创建线程组 3.创建服务器通道 4.进行绑定 (服务器通道绑定 InetSocketAddress) 5.进行阻塞代码:import java.net.InetSocket...原创 2019-06-18 22:00:09 · 701 阅读 · 0 评论 -
使用拦截器记录每个请求的 url 和执行所需的时间
1.实现 HandlerInterceptor 接口因为要记录执行时间,所以这里使用 ThreadLocalimport org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;import javax.servlet.http....原创 2019-06-12 15:49:34 · 2691 阅读 · 0 评论 -
javaweb 上传文件使用NIO进行读写
import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework....原创 2019-06-12 15:47:50 · 1569 阅读 · 0 评论 -
logback使用和logback.xml 配置记录
1.pom <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <logback.version>1.1.7</logback.version> <slf4j.version>1.7....原创 2019-01-19 23:52:52 · 625 阅读 · 0 评论 -
java基于excel模板导出excel=>使用jxls最新版(解决模板表达式不生效的bug)
前几天写导出使用了jxls,网上找了找资料就写了(https://blog.csdn.net/yali_aini/article/details/85804466),后来经理给我说,这个版本太老了,我看了看,果然 我用的那个是 14年更新的,说让我用最新的,我就找到了 jxls 的官网:http://jxls.sourceforge.net/getting_started.html,然后跟着教程...原创 2019-01-08 16:40:55 · 4223 阅读 · 3 评论 -
java基于excel模板导出excel=>使用jxls
今天要写个导出的功能,之前都怎么写导出,看了看原来的代码,都是直接代码画表格,一个表格导出上百行代码,看着及其混乱不堪,于是我想,可以可以直接基于我的excel模板直接导出呢,像那些固定的我觉得都应该不需要开发人员手动画,然后网上找了找,果然有,这里就为大家介绍一些怎么使用 jxls 进行 java的基于模板导出excel直接上代码,代码有注释,注释很详细,注意看注释1.p...原创 2019-01-04 22:48:10 · 4003 阅读 · 10 评论 -
网络编程之使用ServerSocket类和Socket类传输文件
ServerSocket 和 Socket 两个类是基于TCP协议的网络传输类其中服务端使用的是 ServerSocket客户端使用的是 Socket其特点是,面向连接,安全可靠,但是效率低,因为安全可靠,哈哈,类似与打电话,需要服务端和客户端建立连接后才能进行交互1,服务端代码: public static void main(String[] args) throw...原创 2018-09-05 23:19:59 · 2192 阅读 · 0 评论 -
网络编程之 使用Socket创建聊天室增强版加入私聊系统消息
上一篇写了使用 socket 实现群聊的功能,但是有点缺陷比如说说话的时候没有显示是谁说的,没有私聊,之类的其实加个 客户端说话的时候是谁说的很简单,无非就是 获取当前客户端的用户名,私聊的话就是 发送给其他客户端的时候再进行限制一下,发给我指定的,比如说 @zzq:lcm 就是我对zzq说 lcm,约定 以 @ 开头,:结尾的中间的就是我们at的人。所以这里我们在new 客户端的时候就应...原创 2018-09-08 13:55:04 · 515 阅读 · 0 评论 -
网络编程之URL类获取网页资源
java.net.Url 类可以用来获取网页资源,是一个很方便的类,我这里像大家展示一下如何通过 url 类获取网络资源 public static void main(String[] args) throws IOException { // 实例化一个URL 类 URL url = new URL("http://www.baidu.com"); // 获取连接 ...原创 2018-09-02 23:45:00 · 1108 阅读 · 0 评论 -
db_link创建
oracle db_link 创建create public database link 链路名 connect to 用户 identified by 口令 using '连接字符串';原创 2018-07-27 14:57:21 · 235 阅读 · 0 评论 -
java中进制转换
有时候我们可能需要进行数得进制转换,这里介绍一下jdk里面自带的Integer类里面的方法代码如下public static void main(String[] args) { int num = 0xabcd; String octalStr = Integer.toOctalString(num); System.out.println("十六进制的"+Integer.toHex...原创 2018-02-24 15:43:32 · 144 阅读 · 0 评论 -
简易的ArrayList
大家都知道ArrayList底层就是一个可变的数组,所以我在这里使用课表数组简易的写一个MyArrayListpackage com.zzq.me;public class MyArrayList<T> { private Object [] value; private int size; public MyArrayList () { this(10); ...原创 2018-02-23 17:13:43 · 146 阅读 · 0 评论 -
工厂设计模式和抽象工厂设计模式
工厂设计模式,相信大家都不陌生,省去了new的过程,方便了程序的书写,接下来让我们看看抽象工厂设计模式把。首先我们定义一个动物类接口,所有的动物都是它的子类,代码如下package com.zzq.factorypattern.po;/** * 定义动物接口 * @author Administrator * */public interface Animal { /** ...原创 2018-03-16 08:53:06 · 477 阅读 · 0 评论 -
网络编程之 DatagramSocket 类与 DatagramPacket 类(客户端收发消息)
DatagramSocket 和 DatagramPacket 两个类是 基于UDP 协议进行通信的包装类实现两个客户端通过 UDP协议通信,使用DatagramSocket 和 DatagramPacket类有如下几个步骤,分为客户端和服务端1,客户端:1),实例化DatagramSocket类(带上指定端口),创建客户端2),准备数据,数据是以字节数组发送的3),打包数...原创 2018-09-03 23:46:33 · 12511 阅读 · 1 评论 -
java 使用RandomAssessFile类多线程切片下载文件之服务端如何实现
上一篇我写了如何使用 java 结合网络连接+多线程+RandomAssessFile类实现多线程切片下载并显示网速https://blog.csdn.net/yali_aini/article/details/81942036因为之前写的都是客户端,不需要去管服务端,直接把文件放服务器里面,直接访问,服务器(tomcat之类得)就会自动帮我们切片,之类的。然后我自己想测试一些直接访问文件和使...原创 2018-09-16 12:32:40 · 965 阅读 · 0 评论 -
使用反射实现JavaBean和map的相互转换
javaBean 转 map,map转 javaBean 很常见,这里记录下,主要就是使用反射,反射很有意思的,有兴趣的可以去自行查看资料。直接上代码。map转对象 /** * mao 转 对象 * @param map * @param clz * @return */ public static <T>...原创 2018-12-12 21:15:14 · 512 阅读 · 0 评论 -
java实现菜单转换为树的格式
菜单一般有很多级,然后数据库一般都是存的 自己的id,父id,名字这个时候想转化成菜单树的格式就需要自己编写代码实现了。1.获取所有的菜单元素2.遍历所有的菜单元素,找到一级菜单元素( pid 为null的就是一级菜单 )3.递归查找子菜单,用一级菜单的 id 去匹配所有的菜单元素,如果 其他的菜单元素的 pid 为 一级菜单的 id,则证明该菜单是一级菜单的子元素,然后...原创 2018-11-21 12:33:54 · 1861 阅读 · 0 评论 -
java执行JavaScript代码
java执行JavaScript代码的方式有很多,这里讲一下使用 Mozilla 公司开发的 Rhino 实现的,该实现从 1.6开始集成到 jdk里面。1,对象相互转化 // 获取引擎对象 ScriptEngineManager sem = new ScriptEngineManager(); ScriptEngine engineJs = ...原创 2018-09-25 22:35:32 · 1710 阅读 · 0 评论 -
java使用 网络连接+RandomAccessFile + io 多线程实现多线程下载文件并显示实时网速
下载文件的时候,一个大文件切成很多片,用多线程下载,速度会快很多阅读代码的时候注意查看代码里面的注释想用多线程下载文件,则,第一:得了解 RandomAccessFile 类,这是个随机访问文件类,里面可以设置 访问的 开始地址和结束地址,且该类可读可写。RandomAccessFile out = new RandomAccessFile(file, "rw"); 则表示,该...原创 2018-09-15 14:10:57 · 2027 阅读 · 3 评论 -
反射之利用反射获取类方法,字段构造方法,并进行操作
反射可以用来做很多事情,比方说获取一个类的构造方法,定义的方法,字段,还可以动态改变属性的值,动态调用类方法等等...注意看代码里面的注释现在我们定义一个 Student 类,类有 三个属性,setget 方法,无参和有参构造方法/** * 学生类 * @author snow * */public class Student { @StudentName(value="...原创 2018-09-14 14:02:50 · 447 阅读 · 0 评论 -
网络编程之手写极简版HTTP服务器
写http服务器就得知道http协议,这个协议是基于 tcp/ip的,所以我们可以用 ServerSocket 写服务端客户端就是浏览器,浏览器其实也是通过socket 连接客户端的,一般来说浏览器请求服务器资源的时候,都会带上 请求头信息就像这样:请求头里面包含了,请求地址,请求方法,客户端语言,浏览器信息,等等,服务端使用 socket.getInputStream 可以读取到...原创 2018-09-11 00:01:00 · 725 阅读 · 0 评论 -
反射之使用自定义注解并处理自定义注解
注解:说起注解初学者可能不太明白,annotation是jdk1.5 引入的新特性,中文名叫注解,它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。为程序的元素(类、方法、成员变量)加上更直观更明了的说明,这些说明信息是与程序的业务逻辑无关,并且供指定的工具或框架使用。Annontation像一种修饰符一样,应用于包、类型、构...原创 2018-09-12 23:04:46 · 1148 阅读 · 0 评论 -
网络编程之 使用Socket创建聊天室
使用基于tcp协议的socket创建聊天室,昨天我写的博客已经介绍了怎么使用 ServerSocket 创建服务端,以及服务端怎么返回数据给客户端昨天写的博客有个缺陷,就是 客户端只能 先发送,后读取,对于正常情况来说应该是,客户端读取和发送是互相不相干涉的两个步骤,所以这里就得使用到多线程了,为 客户端发送数据,和接收数据各开辟一条道路。首先来看看客户端的发送消息:客户端发送消息...原创 2018-09-07 00:50:35 · 5414 阅读 · 1 评论 -
java中的位运算
位运算因为是直接二进制位操作,所以运行很快,在一些jdk源码里面看得见,一般开发web用不到,现在我们来讨论下位运算以下为了方便显示,使用 八位二进制表示说明一下:负数在计算机中的存在形式以补码的形式存在负数转二进制:1.写出x的绝对值的二进制值2.对这个二进制值取反3.对取反后的数加11. ~ 按位取反(单目运算符)概念:操作一个二进制数,是1就变成0,0就变成1例:~10 => ~000...原创 2018-02-26 09:59:14 · 730 阅读 · 0 评论