
java
rocling
我思故我在
展开
-
大数据开发学习路线
磨拳擦掌!说数据是一个企业最核心的东西之一,我想大家应该都能基本认同吧,毕竟连XXX都说过,这是一个数据为王的时代,谁掌握了数据谁就掌握未来!怪不得咱这里的小伙伴们个个都磨拳擦掌,都嚷嚷着想从事大数据相关的开发工作,问能不能整一个大数据开发相关的技术学习路线和知识点大梳理。得嘞,你们就负责冲,学习路线俺来安排!注:本文已收录于Github开源项目:github.com/hansonwang99/JavaCollection,里面有各大方向编程的详细自学路线、面试题和面经..原创 2020-11-20 21:55:54 · 1628 阅读 · 1 评论 -
图解ZooKeeper的典型应用场景,超级简单
0 介绍zookeeper在很多框架中都有应用,例如:Dubbo,Hadoop,Kafka等,但典型的用法也就几种,掌握了这几种用法,再看zookeeper在相关框架中的应用就很轻松,下一篇文章将会详细介绍zookeeper在dubbo中的使用,以便有一个更深刻的了解本文参考了《从Paxos到ZooKeeper》,鉴于本文的定位是一篇科普性质的文章,因此对于一些诸如共享锁和分布式队列的具体实现没有进行更详细的描述,实际工作中需要实现时可以参考这本书zookeeper的数据模型和文件系统类似,每一原创 2020-11-20 21:26:34 · 1461 阅读 · 0 评论 -
Lambda用在哪里?几种场景?
目录前言 Lambda表达式语法 案例 几种场景 口诀 函数式接口 Lambda用在哪里 总结前言上一篇我们介绍了Lambda的由来,今天我们看看Lambda的用法,看看如何简洁Lambda表达式语法Lambda的语法极为简单,类似如下结构:(parameters) -> expression或(parameters) -> { statements; }Lambda表达式由三部分组成:1、paramaters:类似方法中的形参列表,这里原创 2020-11-15 19:07:13 · 5374 阅读 · 1 评论 -
了解HashMap数据结构,超详细!
写在前面:小伙伴儿们,大家好!今天来学习HashMap相关内容,作为面试必问的知识点,来深入了解一波!思维导图:学习框架图1,HashMap集合简介HashMap基于哈希表的Map接口实现,是以key-value存储形式存在,即主要用来存放键值对。HashMap的实现不是同步的,这意味着它不是线程安全的。它的key、value都可以为null。此外,HashMap中的映射不是有序的。JDK1.8之前的HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为原创 2020-11-09 16:54:49 · 2432 阅读 · 1 评论 -
全面解析ArrayList,超详细!
写在前面:小伙伴儿们,大家好!上一篇我们介绍了HashMap相关知识点——了解HashMap数据结构,超详细!今天来学习ArrayList相关内容,作为面试必问的知识点,来深入了解一波!思维导图:ArrayList学习图1,ArrayList底层数据结构ArrayList就是动态数组,是List接口的可调整大小的数组实现;除了实现List接口之外,该类还提供了一些方法来操纵内部使用的存储列表的数组大小。它的主要底层实现是数组Object[] elementData。数组的原创 2020-11-09 16:27:12 · 6930 阅读 · 0 评论 -
java 使用Lambda和filter对对象集合过滤
1、如下:用户对象public class User(){ private String name; private int age; private String sex;}2、构造用户集合List<User> list = new ArrayList<>();User user1 = new User("张三",15,"男");User user2 = new User("李四",22,"男");User user3 = new User("王五",原创 2020-11-05 15:49:56 · 2481 阅读 · 1 评论 -
Spring官方都推荐使用的@Transactional事务,为啥我不建议使用!
事务管理在系统开发中是不可缺少的一部分,Spring提供了很好事务管理机制,主要分为编程式事务和声明式事务两种。关于事务的基础知识,如什么是事务,数据库事务以及Spring事务的ACID、隔离级别、传播机制、行为等,就不在这篇文章中详细介绍了。默认大家都有一定的了解。本文,作者会先简单介绍下什么是声明式事务和编程式事务,再说一下为什么我不建议使用声明式事务。编程式事务基于底层的API,如PlatformTransactionManager、TransactionDefinition 和.原创 2020-11-04 19:39:11 · 1052 阅读 · 0 评论 -
springboot或spring中使用编程式事务和声明式事务
spring中使用事务有两种方式,一种是编程式,一种是声明式。编程式事务编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。类似下面的代码,注入transactionTemplate后,执行execute方法,方法参数是一个TransactionCallback的匿名实现,TransactionCallbackWithoutResult是一个抽象原创 2020-11-04 19:29:34 · 964 阅读 · 0 评论 -
2020-10-21
java 8的lambda表达式提供了一些方便list操作的方法,主要涵盖分组、过滤、求和、最值、排序、去重。跟之前的传统写法对比,能少写不少代码实体类import java.math.BigDecimal;import java.util.Date;public class User { private Long id; /** * 姓名 */ private String name; /** * 年龄 */.原创 2020-10-21 20:12:10 · 291 阅读 · 0 评论 -
本地缓存GuavaCache的介绍及使用
一、GuavaCache的介绍GuavaCache是一个本地缓存,有以下优点:很好的封装了get、put操作,能够集成数据源。一般我们在业务中操作缓存都会操作缓存和数据源两部分。例如:put数据时,先插入DB 再删除原来的缓存,get数据时,先查缓存,命中则返回,没有命中时需要查询DB,再把查询结果放入缓存中。Guava封装了这么多步骤,只需要调用一次get/put方法即可。它是线程安全的缓存,与ConcurrentMap相似,但前者增加了更多的元素失效策略,后者只能显示的移除元素。GuavaCa原创 2020-10-21 14:59:19 · 676 阅读 · 1 评论 -
2020-10-21
java 8的新特性之一就是lambda表达式,parallelStream()都说性能会比较高import lombok.Data;@Datapublic class Bean { private int num1; private int num2; public Bean(int num1, int num2){ this.num1 = num1; this.num2 = num2; }}public stati原创 2020-10-21 14:32:50 · 103 阅读 · 0 评论 -
2020-10-16
使用安装包安装:JDK官网下载地址1):官方下载对应的.gz包,这里以jdk-8u181-linux-x64.tar.gz为例2):创建一个目录用于存放解压后的文件,并解压缩到该目录下sudo mkdir /usr/lib/jvmsudo tar -zxvf jdk-8u181-linux-x64.tar.gz -C /usr/lib/jvm3):修改环境变量sudo vim ~/.bashrc4):文件末尾追加如下内容#set oracle jdk environm原创 2020-10-16 14:18:17 · 111 阅读 · 0 评论 -
Java获取当天的起始时间和结束时间
import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date; public class Test { public static void main(String[] args) throws Exception { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.prin.原创 2020-10-14 14:41:08 · 7447 阅读 · 2 评论 -
2020-10-10
看《Effective Java》第三版的时候,看到了其中建议将try-finally替换为try-with-resources。这个语法糖还算有意思,特此成文。用法辨析Java库中有很多资源需要手动关闭,比如InputStream、OutputStream、java.sql.Connection等等。在此之前,通常是使用try-finally的方式关闭资源;Java7之后,推出了try-with-resources声明来替代之前的方式。 try-with-resources 声明要求其中定义的变量原创 2020-10-10 17:33:56 · 128 阅读 · 0 评论 -
NPE问题
最近在看Java_manual.pdf,其中有一点值得反思:“防止 NPE,是程序员的基本修养。”NPE(Null Pointer Exception)一直是我们最头疼的问题,也是最容易忽视的地方,先总结几条不同场景的解决方案,望后续补充。1.RPC调用某个规定好的接口,如获取某一范围内查询结果,返回结果我们约定好是List<String>。若没有结果,我们是返回null还是Collections.emptyList() ?虽然NPE问题大部分是调用者问题,但是我们可以从源头解决,.原创 2020-10-10 17:12:44 · 1959 阅读 · 0 评论 -
Mybatis 嵌套循环Map
前言: mybatis有默认的list,array,但是没有默认的map。所以不能直接写collection="map",如果这么写,它会当成是根据map.get(“map”)来取value值,大部分情况下是一个map中是不会有“map”这个key的,于是就是报错。如果你想用这个“map”标识取参数map,就需要保证传入的Map参数有@Param("map")注解。mybatis入参map的基本语法:service,dao的写法://service:public Lis...原创 2020-09-29 14:14:09 · 1687 阅读 · 0 评论 -
使用Java8 的Lambda将List转为Map
常用方式代码如下:public Map<Long, String> getIdNameMap(List<Account> accounts) { return accounts.stream().collect(Collectors.toMap(Account::getId, Account::getUsername));}收集成实体本身map代码如下:public Map<Long, Account> getIdAccountMap(原创 2020-09-29 14:05:12 · 1009 阅读 · 0 评论 -
函数式编程初探
诞生50多年之后,函数式编程(functional programming)开始获得越来越多的关注。不仅最古老的函数式语言Lisp重获青春,而且新的函数式语言层出不穷,比如Erlang、clojure、Scala、F#等等。目前最当红的Python、Ruby、Javascript,对函数式编程的支持都很强,就连老牌的面向对象的Java、面向过程的PHP,都忙不迭地加入对匿名函数的支持。越来越多的迹象表明,函数式编程已经不再是学术界的最爱,开始大踏步地在业界投入实用。也许继"面向对象编程"之后,"函数原创 2020-09-23 16:35:37 · 1344 阅读 · 2 评论 -
线性表及其算法(java实现)
线性表线性表是最简单和最常用的一种数据结构,它是有n个数据元素(节点)组成的有限序列。其中,数据元素的个数n为表的长度,当n为零时成为空表,非空的线性表通常记为:(a1,a2,… ,ai-1,ai, ai+1,…,an)一. 线性表的顺序存储及算法线性表的顺序存储指的是将线性表的数据元素按其逻辑次序依次存入一组地址连续的存储单元里,用这种方法存储的线性表称为顺序表。1....原创 2020-01-07 18:14:36 · 571 阅读 · 0 评论 -
java数据结构与算法之双链表设计与实现
出自【zejian的博客】关联文章:java数据结构与算法之顺序表与链表设计与实现分析java数据结构与算法之双链表设计与实现java数据结构与算法之改良顺序表与双链表类似ArrayList和LinkedList(带Iterator迭代器与fast-fail机制)java数据结构与算法之栈(Stack)设计与实现java数据结构与算法之队列(Queue)设计与实现jav...原创 2020-01-07 18:14:33 · 854 阅读 · 0 评论 -
数据结构 —— java 单链表、双端链表、双向链表、无序链表、有序链表
0、节点结点 是数据结构中的基础,是 构成复杂数据结构的基本组成单位。public class Node { public long data; public Node next; public Node(long value) { this.data = value; } }1、链表链表:通常由一连串节点组成,每个节点包含任意的实例数据(data ...原创 2020-01-04 17:11:14 · 879 阅读 · 0 评论 -
Java ArrayList add(index,element) 方法抛出Exception in thread "main" java.lang.IndexOutOfBoundsException
准备使用ArrayList 的 add(index,element) 来插入元素,天真的以为这样能给list排序,结果抛出:Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 2, Size: 1代码如下:import java.util.ArrayList;import java.ut...原创 2020-01-04 16:36:12 · 1023 阅读 · 0 评论 -
Java队列(Queue)了解及使用
1.什么是队列?队列是数据结构中比较重要的一种类型(是一种数据结构),它支持 FIFO,尾部添加、头部删除(先进队列的元素先出队列),跟我们生活中的排队类似。2.什么情况下使用队列?一般情况下,如果是对一些及时消息的处理,并且处理时间很短的情况下是不需要队列的,直接阻塞式的方法调用就可以了。但是如果在消息处理的时候特别费时间,这个时候如果有新消息来了,就只能处于阻塞状态,造成用户...原创 2020-01-04 16:29:32 · 1476 阅读 · 0 评论 -
求所有根节点到叶子节点的二叉树路径
给一棵二叉树,返回所有从根节点到叶子节点的路径,用list存储例如,下面的二叉树: 1 / \2 3 \ 5路径:["1->2->5", "1->3"]思路:这道题我想多了,我用的非递归双栈模拟实现的,其实根本用不着,递归实现就行。递归版:public List<String> binaryTreeP...原创 2019-12-13 18:01:25 · 680 阅读 · 0 评论 -
实战算法——多叉树全路径遍历(完整版)
目录前言递归和非递归比较递归非递归递归的劣势和优势问题构建问题解决递归方法非递归方法测试结论前言本文研究的是如何对一个多叉树进行全路径的遍历,并输出全路径结果。该问题的研究可以用在:Trie树中查看所有字典值这个问题上。本文将对该问题进行详细的模拟及进行代码实现,讨论了递归和非递归两种方法优劣并分别进行实现,如果读者对这两种方法的优劣不感兴...原创 2019-12-13 17:30:26 · 7827 阅读 · 3 评论 -
java基础——如何实现不可变类String、Long、Double是不可变类
String、Long、Double是不可变类实现不可变类的步骤1)类声明为final,不可以被继承2)所有成员是私有的,不允许直接被访问3)对变量不要setter方法4)所有可变的变量是final的,只能赋值一次5)通过构造器初始化所有成员,进行深拷贝6)在getter方法中不能返回对象本身,返回对象的拷贝package FinalClassDemo;import j...原创 2019-11-30 11:31:17 · 826 阅读 · 0 评论 -
最新Java面试题及答案整理(下)
上一篇:2019年最新Java面试题及答案整理(上)51、类ExampleA继承Exception,类ExampleB继承ExampleA。答:有如下代码片断:try{thrownewExampleB("b")}catch(ExampleAe){System.out.println("ExampleA");}catch(Exceptione...原创 2019-11-22 09:28:59 · 566 阅读 · 0 评论 -
最新Java面试题及答案整理(上)
1、面向对象的特征有哪些方面?答:面向对象的特征主要有以下几个方面:抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。 继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。继承让变化中的软件系统有了一定的延续性,...原创 2019-11-21 20:21:45 · 892 阅读 · 1 评论 -
Java 单例模式中使用双重检查(Double-Check)
在 Effecitve Java 一书的第 48 条中提到了双重检查模式,并指出这种模式在 Java 中通常并不适用。该模式的结构如下所示:publicResourcegetResource(){if(resource==null){synchronized(this){if(resource==null){...原创 2019-11-20 22:42:21 · 907 阅读 · 0 评论 -
如何用最简单的方式解释依赖注入?依赖注入是如何实现解耦的?(北森面试)
依赖注入(DI)和控制反转(IOC)基本是一个意思,因为说起来谁都离不开谁。简单来说,a依赖b,但a不控制b的创建和销毁,仅使用b,那么b的控制权交给a之外处理,这叫控制反转(IOC),而a要依赖b,必然要使用b的instance,那么通过a的接口,把b传入; 通过a的构造,把b传入; 通过设置a的属性,把b传入;这个过程叫依赖注入(DI)。那么什么是IOC Contain...原创 2019-11-20 22:32:25 · 229 阅读 · 0 评论 -
如何理解面向对象(oop)(北森面试)
我们知道现代的编程方式基本上都是面向对象了,那么面向对象是什么鬼,面向对象跟面向过程有什么不一样?原创 2019-11-20 22:28:19 · 404 阅读 · 0 评论 -
软件设计模式(北森面试)
软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。中文名软件设计模式外文名Design pattern别名设计模式特点每个模式都有各自的名字简介设计模式(英语 des...原创 2019-11-20 22:20:14 · 260 阅读 · 0 评论 -
java 图的最小生成树问题
最小生成树是基于无无向图,并且是没有权值的图的。它的实现可以用深度遍历还有广度遍历实现本代码是基于图的,所以和前面的 java 图的那个代码是一样的不同是加入了生成最小生成图的代码老习惯理论:/** 详细代码后面会给出来的,现在只是大概的只是代码怎么写,怎么个思路**/package endual;public class ShortTree { //mst...原创 2019-11-20 21:09:53 · 348 阅读 · 0 评论 -
图解Java 垃圾回收机制
摘要:Java技术体系中所提倡的 自动内存管理 最终可以归结为自动化地解决了两个问题:给对象分配内存 以及 回收分配给对象的内存,而且这两个问题针对的内存区域就是Java内存模型中的 堆区。关于对象分配内存问题,笔者的博文《JVM 内存模型概述》已经阐述了 如何划分可用空间及其涉及到的线程安全问题,本文将结合垃圾回收策略进一步给出内存分配规则。垃圾回收机制的引入可以有效的防止内存泄露、保证内存...原创 2019-11-20 19:36:07 · 942 阅读 · 0 评论 -
解决Tomcat运行内存不足问题
在使用Java程序从数据库中查询大量的数据或是应用服务器(如tomcat、jboss,weblogic)加载jar包时会出现java.lang.OutOfMemoryError异常。这主要是由于应用服务器的内存不足引起的。这种异常常有以下几种情况(以下以tomcat环境为例,其它WEB服务器如jboss,weblogic等是同一个道理):1. java.lang.OutOfMemoryE...原创 2019-11-19 11:40:48 · 2488 阅读 · 1 评论 -
解决Tomcat运行内存不足问题
在使用Java程序从数据库中查询大量的数据或是应用服务器(如tomcat、jboss,weblogic)加载jar包时会出现java.lang.OutOfMemoryError异常。这主要是由于应用服务器的内存不足引起的。这种异常常有以下几种情况(以下以tomcat环境为例,其它WEB服务器如jboss,weblogic等是同一个道理):1. java.lang.OutOfMemoryE...原创 2019-11-19 11:40:37 · 1281 阅读 · 0 评论 -
主线程和子线程通信
默认情况下新增的线程是没有开启消息循环的(主线程除外,会默认创建Looper对象,开启消息循环)一般情况下都是子线程向主线程发送消息,主线程中已经默认实现了Looper的操作。只需要创建Handler 开启线程发送消息 主线程中接收消息处理就可以了Looper:消息队列(MessageQueue)的管家(Looper)。一个消息队列只有一个管家,但是Handler(工人)可以有多个。Loo...原创 2019-11-19 11:40:28 · 534 阅读 · 0 评论 -
JAVA线程通信详解
一、概述 线程与线程之间不是相互独立的个体,它们彼此之间需要相互通信和协作,最典型的例子就是生产者-消费者问题:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权。因为生产者如果不释放对临界资源的占用权,那么消费者就无法消费队列中的商品,就不会让队列有空间,那么生产者就会一直无限等待下去。因此一般情况...原创 2019-11-19 11:40:21 · 374 阅读 · 0 评论 -
Java内存溢出的详细解决方案
本文介绍了Java内存溢出的详细解决方案。本文总结内存溢出主要有两种情况,而JVM经常调用垃圾回收器解决内存堆不足的问题,但是有时仍会有内存不足的错误。作者分析了JVM内存区域组成及JVM设置虚拟内存的方式,从而给出了一系列解决方案。一、内存溢出类型1、java.lang.OutOfMemoryError: PermGen spaceJVM管理两种类型的内存,堆和非堆。堆是给开发人员...原创 2019-11-19 11:40:13 · 825 阅读 · 0 评论 -
常见GC算法
目录引用计数法 Reference Counting根搜索算法 GC Roots Tracing标记-清除算法 Mark-Sweep复制算法 Copying标记整理算法 Mark-Compact在C/C++中是由程序员自己去申请、管理和释放内存的,因此没有GC的概念。而在Java中,专门有一个用于垃圾回收的后台线程来进行监控、扫描,自动将一些无用的内存进行释放。下面介绍几种...原创 2019-11-18 17:23:52 · 398 阅读 · 0 评论