
java基础
文章平均质量分 58
ljz2016
这个作者很懒,什么都没留下…
展开
-
Java 常用lambda操作集合
lambda原创 2022-11-02 15:31:07 · 996 阅读 · 1 评论 -
高并发下选择最优的线程数
一般来说对于计算密集型的任务,一个有N个处理器的系统通常通过使用一个N+ 1个线程的线程池来获得最优的利用率。IO密集型 = 2Ncpu如果要更加精确:线程数 = CPU可用核心数/(1 - 阻塞系数),其中阻塞系数的取值在0和1之间。计算密集型任务的阻塞系数为0,而IO密集型任务的阻塞系数则接近1。一个完全阻塞的任务是注定要挂掉的,所以我们无须担心阻塞系数会达到1。第一个参数很容易确定,可以在运行时查到这个值。但确定阻塞系数就稍微困难一些。我们可以先试着猜测,抑或采用一些性能分析工具或ja原创 2020-07-07 22:13:31 · 359 阅读 · 0 评论 -
分布式锁 Redis 与 Zookeeper
Java提供的原生锁机制在多机部署场景下是没有效果的,所以需要分布式锁。分布式锁的思路是:在整个系统提供一个全局、唯一的获取锁的“东西”,然后每个系统在需要加锁时,都去问这个“东西”拿到一把锁,这样不同的系统拿到的就可以认为是同一把锁。Redis加锁一定要用SET key value NX PX milliseconds 命令,如果不用,先设置了值,再设置过期时间,这个不是原子性操作,有可能在设置过期时间之前宕机,会造成死锁(key永久存在)// 获取锁// NX是指如果key不存在就成功,原创 2020-07-07 22:04:40 · 181 阅读 · 0 评论 -
Java程序退出处理
在Java程序退出时,希望做一些保存处理,比如释放一些资源,或者保证事务执行完再推出。在Linux环境下,需要使用kill -15 pid命令杀死进程,才能得到通知。而window环境下,只能通过ctrl+c退出才有效,命令杀死进程或者任务管理器杀死,都不会得到通知。第一种方式 Runtime.getRuntime().addShutdownHook(new Thread(){ @Override public void run() {原创 2020-05-28 15:04:10 · 876 阅读 · 0 评论 -
okHttp发送http请求
post请求: OkHttpClient client = new OkHttpClient.Builder().retryOnConnectionFailure(false) .readTimeout(3000, TimeUnit.SECONDS).build(); String text="{\"creatorId\":\"test310\","; F...原创 2020-03-27 15:03:38 · 1500 阅读 · 0 评论 -
java环境变量JAVA_HOME、CLASSPATH、PATH
环境变量是一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。例如path环境变量,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找。我们需要通过设置环境变量,来让jdk完成程序的编译和运行。首先,打开我的电脑–属性–高级–环境变量:新建系统变量JAVA_HOME 和CLASSPATH,内容如下:变量...原创 2020-08-14 17:16:10 · 218 阅读 · 0 评论 -
springboot 文件上传
在application.properties中配置,限制文件大小# 上传文件总的最大值spring.servlet.multipart.max-request-size=1MB# 单个文件的最大值spring.servlet.multipart.max-file-size=1MBspring.http.multipart.max-file-size=1MB@PostMapping(...原创 2019-12-24 17:22:20 · 268 阅读 · 0 评论 -
Java读取控制台输入
长时间没用这个,忽然用起的时候,忘了怎么写,记录下public static void main(String[] args) throws IOException { List<String> lines=null; try{ lines=FileUtils.readLines(new File(file),Charsets....原创 2019-12-23 15:46:41 · 204 阅读 · 0 评论 -
word2vec_java源码解析
第一步,读取语料(已经分过词),把每个词出现的频率放在wordMap中。private void readVocab(File file) throws IOException { MapCount<String> mc = new MapCount<>(); try (BufferedReader br = new BufferedReader(new ...原创 2019-12-21 10:34:19 · 358 阅读 · 0 评论 -
MySQL的四种BLOB类型大小
在Java中都对应 byte[]类型 大小(单位:字节)TinyBlob 最大 255Blob 最大 65KMediumBlob 最大 16MLongBlob ...原创 2019-12-18 16:28:21 · 6638 阅读 · 0 评论 -
spring boot 配置 fastjson 替代 Jackson (并解决返回字符串带双引号问题)
在带有@configuration注解的类中,添加下面的方法。就可以去除字符串的双引号 @Bean public HttpMessageConverters fastJsonHttpMessageConverters() { FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConver...原创 2019-12-10 15:15:56 · 2038 阅读 · 0 评论 -
Mybatis自定义查询模板
mybatis查询使用是比较方便的,使用Mybatis generator可以直接从数据库逆向生成实体类。但是有时,想自定义查询,就需要自己写相关类。需要写的类有三个,以及一个xml文件:ChatRoomMemberEX 实体类ChatRoomMemberEXMapper .xml 书写sql语句ChatRoomMemberEXExample 定义查询条件ChatRoomMembe...原创 2019-12-04 17:22:17 · 1485 阅读 · 0 评论 -
MySQL按时间排序后分页混乱重复
select 'true' as QUERYID, rb_id, rb_source, rb_startTime, rb_endTime, rb_type, rb_useable, rb_redBagNum, rb_singleContains, rb_currentNum, rb_content from redbag order by rb_startTime desc limit 0 , ...原创 2019-12-02 16:06:04 · 2614 阅读 · 0 评论 -
Synchronized使用
Synchronized是线程同步关键字第一种: 属于锁当前对象,方法锁和synchronized (this)属于一个锁public class ReentrantThread { public static void main(String[] args) throws InterruptedException { ReentrantObject ...原创 2018-03-29 16:12:29 · 163 阅读 · 0 评论 -
ThreadLocalRandom
java里有伪随机型和安全型两种随机数生成器,伪随机生成器根据特定公式将seed转换成新的伪随机数据的一部分,安全随机生成器在底层依赖到操作系统提供的随机事件来生成数据。安全随机生成器需要生成加密性强的随机数据的时候才用它生成速度慢如果需要生成大量的随机数据,可能会产生阻塞需要等待外部中断事件而伪随机生成器,只依赖于“seed”的初始值,如果给生成算法提供相同的seed,可以得到一样...转载 2018-11-08 15:36:51 · 168 阅读 · 0 评论 -
CountDownLatch
这个类是一个帮助同步的工具类,一个或多个线程等待其它线程完成某些条件之后执行。CountDownLatch在初始化时有一个变量count用于计数,当count==0时,等待线程将会被唤醒。这是一个一次性的工具,count不能被重置。一个用例:public class Main { public static void main(String[] args) throws IOEx...原创 2018-11-12 10:20:54 · 117 阅读 · 0 评论 -
ArrayList
elementData是arraylist的容器,所以arraylist是基于数组的操作。transient Object[] elementData;add添加一个元素前,先检查数组容量,如果数组为空,先初始化。发现容量不够时,需要对数组扩容。public boolean add(E e) { ensureCapacityInternal(size + 1); /...原创 2018-11-12 11:08:24 · 126 阅读 · 0 评论 -
Java线程间通信--管道
Java提供了多种输入输出流用于对数据进行操作,其中管道流pipeStream是一种特殊的流,用于在不同线程间直接传送数据。pis.read的时候,如果管道内没有数据,会阻塞。public class PipeStreamMain { public static void main(String[] args) throws IOException { PipedInp...原创 2018-11-12 14:57:07 · 377 阅读 · 0 评论 -
类加载器--Tomcat--ParallelWebappClassLoader
首先是jvm自带的三个类加载器的关系图:系统类加载器在加载一个类时,会先查找已经加载的类,如果没找到,再委托父加载器(父加载器不是父类,这是2个概念),父加载器没找到就继续委托父加载器,直到所有的父加载器都没有找到,并且都加载失败之后,就自己加载,如果自己加载也失败了,就抛异常。父类加载过,而且还尝试加载失败,那么就自己来 c = findClass(name);这个方法在url...原创 2018-11-23 15:22:23 · 10419 阅读 · 1 评论 -
线程池-ExecutorService
关闭一个ExecutorService,有两个方法可以使用–shutdown和shutdownNow。shutdown在关闭线程池前,会等待所有线程执行完;shutdownNow会立刻关闭线程池,并停止所有线程。...原创 2019-02-21 16:48:20 · 1138 阅读 · 0 评论 -
java-lambda表达式用法示例
用法一:倒序排列集合,获取最大值private static Comparator&amp;amp;amp;amp;amp;amp;amp;lt;Integer&amp;amp;amp;amp;amp;amp;amp;gt; comparator = (i1,i2) -&amp;amp;amp;amp;amp;amp;amp;gt; Integer.compare(i2,i1);private static Function&amp;a原创 2019-03-12 14:58:18 · 892 阅读 · 0 评论 -
Java 实时同步配置文件的内容
使用JAVA的NIO监测指定文件夹下的所有文件,event.context()可以获取发生变化的文件名。下面这段代码,创建指定配置文件(如果配置文件不存在,在classpath目录下),由于我的配置文件只有一行内容,所以读取一行就行了。 static { Path path= null; try { path = Paths.get...原创 2019-05-31 16:00:35 · 897 阅读 · 0 评论 -
ArrayBlockingQueue中ReetrantLock的使用
在没有明确指定的情况下,创建一个ArrayBlockingQueue对象,使用的是非公平锁。final ReentrantLock lock;lock对象是主要锁,保护所有的访问。另外创建了两个条件,notFull用于控制加入队列,notEmpty用于控制从队列中取出。notEmpty = lock.newCondition();notFull = lock.newCondition...原创 2019-06-19 15:37:40 · 368 阅读 · 0 评论 -
ConcurrentHashMap 详解
以hashmap这一篇为基础,分析一下ConcurrentHashMap。hashmap是线程不安全的,而hashtable性能低下,所以concurrentHashMap应运而生。ConcurrentHashMap使用锁分段技术,首先将数据分成一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问。有些方法需要跨段,比如size()...原创 2018-11-07 16:43:35 · 3946 阅读 · 1 评论 -
jdk 9 新特性
2017年7月,甲骨文发表Java SE 9。Java 9中主要的变化是已经实现的模块化系统。Modularity提供了类似于OSGI框架的功能,模块之间存在相互的依赖关系,可以导出一个公共的API,并且隐藏实现的细节,Java提供该功能的主要的动机在于,减少内存的开销,在JVM启动的时候,至少会有30~60MB的内存加载,主要原因是JVM需要加载rt.jar,不管其中的类是否被classlo...转载 2018-11-07 14:37:52 · 347 阅读 · 0 评论 -
红黑树-RBTree-TreeMap
红黑规则每一个节点不是红色就是黑色根总是黑色节点是红色,则子节点必须是黑色根节点到叶节点或者空子节点的每条路径,必须包含相同数目的黑色节点根节点到叶节点路径伤的黑色节点的数目称为黑色高度,所有根到叶节点路径上的黑色高度必须相同。...原创 2018-09-09 19:26:43 · 203 阅读 · 0 评论 -
Launcher类解析--系统类加载器
sun.misc.Launcher类,类中定义了几个类加载器。AppClassLoader 系统类加载器 ExtClassLoader 扩展类加载器 关于类加载器的一些东西,可以看这篇类加载Launcher的getClassPath(String classPath):private static File[] getClassPath(String classPath) { ...原创 2018-08-17 15:34:29 · 1429 阅读 · 0 评论 -
权限控制器AccessController
引用这篇文章做参考在测试这个功能时,也遇到了一些坑。关键在授权文件这里file:/D:/项目/study/out/production/study/必须是目标类的根目录, 比如com.tt.Testaa 这个类,希望给它赋予写权限,那么 file:/D:/项目/study/out/production/study/com/* file:/D:/项目/study/out/product...原创 2018-08-16 16:44:42 · 3449 阅读 · 0 评论 -
ThreadLocal与InheritableThreadLocal
threadlocal持有的对象不能被子线程访问到。InheritableThreadlLocal持有的对象,在子线程中会有相同的引用,也就是说子线程会复制父线程中threadlocal的引用。private static final ThreadLocal&amp;lt;Map&amp;lt;Object, Object&amp;gt;&amp;gt; resources = new ThreadContext.Inh...原创 2018-06-28 09:54:36 · 469 阅读 · 0 评论 -
自定义jsp标签
首先创建标签解析类:import org.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager;import javax.servlet.jsp.JspException;import javax.servlet.jsp.tagext.TagSupport;import java.io.IOException;...原创 2018-06-29 11:01:53 · 183 阅读 · 0 评论 -
线程状态
线程状态: 创建 可运行 运行中 暂停 销毁线程进入可运行状态有以下五种情况:sleep方法到期阻塞式IO获取同步监视器被notify 被唤醒被resume 恢复线程进入阻塞状态有以下五种情况: 1.调用了sleep方法 2.阻塞式IO 3.获取同步监视器失败 4.wait 等...原创 2018-03-30 16:22:50 · 132 阅读 · 0 评论 -
Notify与Wait方法使用(一)
一、基本使用public class NotifyAndWait { public static void main(String[] args) throws InterruptedException { Person p=new Person(); MyThread myThread=new MyThread(p); MyThre...原创 2018-03-30 16:04:51 · 402 阅读 · 0 评论 -
泛型
泛型类的getTypeParameters()方法获取到的是类的泛型参数名。static class OOMObject<KK>{} HeapOOM.OOMObject o=new HeapOOM.OOMObject<HeapOOM>(); List<HeapOOM.OOMObject> list=new ArrayList<>(); System.out.prin原创 2017-10-05 20:59:45 · 193 阅读 · 0 评论 -
java--泛型擦除
一、概述 Java泛型在使用过程有诸多的问题,如不存在List.class, List不能赋值给List(不可协变),奇怪的ClassCastException等。 正确的使用Java泛型需要深入的了解Java的一些概念,如协变,桥接方法,以及这篇笔记记录的类型擦除。Java泛型的处理几乎都在编译器中进行,编译器生成的bytecode是不包涵泛型信息的,泛型类型信息将在编译处理是被擦除转载 2017-09-15 15:18:16 · 251 阅读 · 0 评论 -
Java虚拟机(十)--面向对象、oop-klass模型
编程的本质就是使用合适的算法处理特定的数据结构。算法是指令驱动的,一条条指令按照一定的顺序执行,彼此写作,最终实现原创 2018-10-01 17:18:56 · 437 阅读 · 0 评论 -
Java虚拟机(十一)--字节码组成、概述与解析
字节码概述1.class文件构成基础 在class文件中,数据都是以二进制流的形式存储。这些字节流之间按照规定顺序排列,字节之间不存在空隙,对于超过8位的数据,将按照大端的顺序存储(即高位字节存储在低的地址上,低位存储到高地址上)。2.class文件的10个组成结构 class字节码采用类C语言的结构体来存储数据,主要有两类数据项:无符号数和表。无符号数用来表示数字、索引引用以及...原创 2018-10-01 22:31:47 · 629 阅读 · 0 评论 -
sun.misc.Unsafe
Unsafe类在jdk 源码的多个类中用到,这个类的提供了一些绕开JVM的更底层功能,基于它的实现可以提高效率。但是,它是一把双刃剑:正如它的名字所预示的那样,它是Unsafe的,它所分配的内存需要手动free(不被GC回收)。Unsafe类,提供了JNI某些功能的简单替代:确保高效性的同时,使事情变得更简单。这篇文章主要是以下文章的整理、翻译。http://mishadoff.com/blo...转载 2018-11-07 14:18:23 · 235 阅读 · 0 评论 -
详解ReentrantLock---公平锁与非公平锁
ReentrantLock的作用是实现代码段的并发访问,它没有直接使用锁,而是一个普通的类实现锁的定义。它提供了可轮询的锁请求,可以规避死锁的发生。 一般情况下,它的性能比synchronized好,它的功能也更全面。提供了condition,对线程的等待和唤醒更灵活,而且可以同时持有多个condition,扩展性更好。ReentractLock中持有一个sync(AQS)锁,sync有2种实现:原创 2017-08-30 09:24:33 · 2596 阅读 · 0 评论 -
HashMap 详解
类层次图:hashmap实现了Map接口,提供了所有可选的map操作,允许Null值和null的key,基本和Hashtable差不多。区别是它线程不安全以及允许null。Hashmap不保证顺序,它的插入和删除都是常量时间的(在哈希值散列分布的情况下)。遍历需要的时间和哈希表的容量以及当前k-v的数量成正比。如果遍历的需求比较高,那么不要给哈希表设置太大的初始容量,因为那样装填因子太低。...原创 2018-11-02 17:10:32 · 310 阅读 · 0 评论 -
Serializable接口与serialVersionUID
一个类实现Serializable接口后可以被序列化。这个接口没有方法和字段,只是用来标志这个类可以被序列化。为了让没有序列化能力的子类能够被序列化,子类可以保存和恢复父类public,protected和包可见(如果有权限)的字段的值(这个需要父类具有无参的可访问的构造函数)。在反序列化的时候,没有实现serializable接口的类将会调用无参的构造函数进行实例化。而无参的构造函数必须可以...原创 2018-11-02 10:54:23 · 1699 阅读 · 0 评论