JAVA
主要以Java8 为版本记录学习
LEI-LEI
做个笔记。以免忘记
展开
-
Java 8: 元空间(Metaspace)
前言 很多开发者都在其系统中见过“java.lang.OutOfMemoryError: PermGen space”这一问题。这往往是由类加载器相关的内存泄漏以及新类加载器的创建导致的,通常出现于代码热部署时。相对于正式产品,该问题在开发机上出现的 频率更高,在产品中最常见的“问题”是默认值太低了。常用的解决方法是将其设置为256MB或更高。 JDK8 HotSpot JVM 将移除永久区,使用本地内存来存储类元数据信息并称之为:元空间(Metaspace)。这意味着不会再有java.l转载 2020-12-27 16:05:16 · 768 阅读 · 0 评论 -
Java线程池实现原理及其在美团业务中的实践
随着计算机行业的飞速发展,摩尔定律逐渐失效,多核CPU成为主流。使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器。J.U.C提供的线程池:ThreadPoolExecutor类,帮助开发人员管理线程并方便地执行并行任务。了解并合理使用线程池,是一个开发人员必修的基本功。本文开篇简述线程池概念和用途,接着结合线程池的源码,帮助读者领略线程池的设计思路,最后回归实践,通过案例讲述使用线程池遇到的问题,并给出了一种动态化线程池解决方案。一、写在前面1.1 线程池是什么线程池(Thread转载 2020-06-07 12:16:46 · 398 阅读 · 0 评论 -
订阅分发模式-EventBus 源码解析
目录一、EventBus使用EventBus 使用的是一个观察者模式,实现了一种事件发送订阅的服务模式。订阅者角色通过向指定的事件发送者注册自身的订阅请求,待后续事件发送者发送事件时,订阅者收到事件的通知对事件进行处理。 观察者对比 监听者管理 监听特定事件 把监听者注册到生产者 按事件超类监听 检测没有监听者的事件 分发事件 传统观察者模原创 2020-06-06 23:15:17 · 1180 阅读 · 0 评论 -
Java并发-线程协同工具类(CountDownLatch 、CyclicBarrier、CompletionService)
目录ReentrantLock、synchronized 大家经常使用也基本了解的比较多,今天介绍一下其他几个很棒的并发工具类一、CountDownLatch 和 CyclicBarrier例子背景:4个工作,开发工作1、开发工作2、测试、上线。单线程执行所有的工作,整个执行顺序为串行,占用的资源少但是完成时长就会更长。 ...原创 2020-05-10 13:41:31 · 639 阅读 · 0 评论 -
从ReentrantLock的实现看AQS的原理及应用
转载自美团技术博客:https://mp.weixin.qq.com/s/sA01gxC4EbgypCsQt5pVog前言Java中的大部分同步类(Lock、Semaphore、ReentrantLock等)都是基于AbstractQueuedSynchronizer(简称为AQS)实现的。AQS是一种提供了原子式管理同步状态、阻塞和唤醒线程功能以及队列模型的简单框架。本文会从应用层逐渐深...转载 2020-05-03 21:58:31 · 417 阅读 · 0 评论 -
不可不说的Java“锁”事
转载自美团技术博客:https://tech.meituan.com/2018/11/15/java-lock.html不可不说的Java“锁”事前言Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。本文旨在对锁相关源码(本文中的源码来自JDK 8和Netty 3.10.6)、使用场景进行举例,为读者介绍主流锁的知识点,以及不同的锁的适用场景。...转载 2020-05-03 18:22:36 · 186 阅读 · 0 评论 -
Java 并发-创建多少线程合适? 超出线程数的请求怎么办?
目录一、创建多少线程合适?二、ThreadPoolExecutor构造函数2.1 添加任务线程池调整流程2.2 拒绝任务handler有四个选择:策略1:ThreadPoolExecutor.AbortPolicy策略2:ThreadPoolExecutor.CallerRunsPolicy策略3:ThreadPoolExecutor.DiscardOldestPoli...原创 2020-06-07 12:17:13 · 3492 阅读 · 0 评论 -
Manacher算法。最大回文子串。
import java.util.Scanner;public class Manacher { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner in = new Scanner(System.in); St原创 2017-03-26 22:42:13 · 350 阅读 · 0 评论 -
单向链表每k个元素翻转一次。
有一个单链表,请设计一个算法,使得每K个节点之间逆序,如果最后不够K个节点一组,则不调整最后几个节点。例如链表1->2->3->4->5->6->7->8->null,K=3这个例子。调整后为,3->2->1->6->5->4->7->8->null。因为K==3,所以每三个节点之间逆序,但其中的7,8不调整,因为只有两个节点不够一组。给定一个单链表的头指针head,同时给定K值,返回逆序原创 2017-03-12 14:03:34 · 1761 阅读 · 0 评论 -
Manacher算法(最大回文子串),JAVA实现
推荐大家一个视频。http://www.bilibili.com/video/av4829276/index_1.html。讲manacher算法的。看了好几个博文都不太理解,最后搜了一下视频。很有帮助。package study.lei.string;import java.util.Scanner;public class Manacher { /** * @par原创 2017-03-11 16:53:38 · 2342 阅读 · 0 评论 -
Java内存的认识
转载请注明出处:http://blog.sina.com.cn/s/blog_68158ebf0100wp83.html一、Java内存的构成 先上一个官方java document里的图: 由上图可知,整块区域分为Young Generation、Tenured Generation、Permanent Generation。详细解释一下Y转载 2017-03-20 13:45:38 · 334 阅读 · 0 评论 -
快速排序、堆排序、归并排序
快速排序(带输入)package com.lei.sort;import java.util.Scanner;public class quick_sort { public static void main(String[] args) { Scanner input = new Scanner(System.in); String[] ss = null; while原创 2016-10-21 13:21:33 · 309 阅读 · 0 评论 -
JAVA 接口
Java不支持多继承性,即一个类只能有一个父类。单继承性使得Java简单,易于管理程序。为了克服单继承的缺点,Java使用了接口,一个类可以实现多个接口。使用关键字interface来定义一个接口。分为接口的声明和接口体。(1)接口声明:接口通过使用关键字interface来声明,格式: interface 接口的名字 (2)接口体: 接口体中包含常量定义和方法定义两原创 2016-04-08 15:14:55 · 490 阅读 · 0 评论 -
java 生成四位验证码
package com.lei.common;public class VerificationCode { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String sum = ""; for (int i = 0;原创 2016-10-21 12:41:02 · 2715 阅读 · 0 评论 -
Scaner 相关。常用输入输出
java 常用输入输出 。方法原创 2016-10-21 12:36:37 · 652 阅读 · 0 评论 -
计算时间复杂度
一、概念时间复杂度是总运算次数表达式中受n的变化影响最大的那一项(不含系数)比如:一般总运算次数表达式类似于这样:a*2^n+b*n^3+c*n^2+d*n*lg(n)+e*n+fa ! =0时,时间复杂度就是O(2^n);a=0,bO(n^3);a,b=0,cO(n^2)依此类推eg:(1) for(i=1;i //循环了n*n次,当然是O(n^2)转载 2016-10-06 16:08:00 · 719 阅读 · 0 评论 -
常用算法和数据结构的复杂度介绍
常见的数据结构相应的时间复杂度和空间复杂度原创 2016-10-06 15:31:13 · 714 阅读 · 0 评论 -
父类 子类 动态代码块 静态代码块 构造函数 执行顺序
执行顺序:对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序以此是(静态变量、静态初始化块)>(变量、初始化块)>构造器第一种情形父类和子类 都有动态代码块和静态快时父类和子类 都有动态代码块和静态快时class Father {{System.out.println("父类构造块");// 3}static {System.out.printl转载 2016-11-18 11:58:22 · 550 阅读 · 0 评论 -
JAVA == 和 equals 。以及值的传递和地址传递。(简单代码说明)
简单的说明了一下。讲解博文请参考:http://blog.csdn.net/zzp_403184692/article/details/8184751原创 2016-12-12 15:21:15 · 357 阅读 · 0 评论 -
CentOS+eclipse+hadoop2.5.1 运行wordcount
之前上课做过一次Hadoop实验。之后很久都没有再使用。这次又历时两天+看之前的比较+百度才把环境搭好。把之前的截图存起来吧。有点像小孩的简笔画。自己可能比较好理解。 环境搭好之后。准备一个Wordcount代码和一个 Hadoop-eclipse插件。 找到自己eclipse安装目录。将插件拷贝进去。 如果拷贝至plugins文件夹下在eclips原创 2016-11-25 13:09:44 · 1574 阅读 · 0 评论 -
数据结构基本排序算法
冒泡排序package com.lei.go;public class BubbleSort { public static void main(String [] args) { int [] a ={1,3,5,12,4,6,1}; a=bubbleSort(a, 7); for (int i = 0; i < a.length; i++) { System原创 2016-10-04 13:45:42 · 375 阅读 · 0 评论 -
对象的上转型对象
假设,B是A的子类或间接子类,当我们用子类B创建一个对象,并把这个对象的引用放到类A声明的对象中时,如 A a; B b=new B(); a=b;那么,就称对象a是子类对象b的上转型对象.上转型对象不能操作子类声明定义的成员变量(失掉了这部分属性),不能使用子类声明定义的方法(失掉了一些功能)。◆上转型对象可以代替子类对象去调用子类重写的实例方法。原创 2016-04-08 15:03:46 · 17036 阅读 · 1 评论