5. Java
文章平均质量分 61
在风中的意志
这个作者很懒,什么都没留下…
展开
-
[个人感悟] 多线程问题应该考察哪些问题? (Java篇)
作为编程初学者被问的最多的问题, 本文就这个问题. 详细的讲讲对方究竟为什么要问这个问题, 并且回答问题的主要思路框架.PS: 本文主体背景为Java语言. 其他语言应当为同理.原创 2024-06-02 23:57:46 · 422 阅读 · 1 评论 -
[SpringBoot Usage] SpringBoot (3)配置文件及其相关标签使用 (@ConfigurationProperties/@Value/Environment)
在使用SpringBoot的过程中, 总免不了的是其相关配置文件的使用. 我们可以通过,和@Value标签将配置内容注入. 也可以通过对象实时获取. 如下即介绍一下这几种使用方式的优缺点和基本实现.原创 2023-02-19 23:47:59 · 596 阅读 · 1 评论 -
[SpringBoot Usage] SpringBoot (2) Restful请求及其相关标签
上一篇文章, 我们主要介绍了SpringBoot的快速启动, 本章我们主要讲解SpringBoot如何快速开发出一个Restful接口. 及其常用的标签.原创 2023-02-12 23:55:57 · 481 阅读 · 0 评论 -
[SpringBoot Usage] SpringBoot (1) QuickStart
使用SpringBoot已经好几个年头了, 一直没总结其相关的使用及其技巧, 本次, 时间充裕, 正好总结下相关的使用技巧, 方便后面项目的快速搭建和参照.本章是SpringBoot使用系列的第一篇, quickStart,原创 2023-01-31 23:58:53 · 728 阅读 · 0 评论 -
[Java] IDEA Scala环境搭建
好久没写博客了. 蹭着1024还是写一篇吧. 不为别的, 只是随着之前写博客的越来越多, 越发觉得, 专业的博客需要时一些系统或者精炼的东西, 之前编写的内容, 大多数也都是流水账, 缺乏深度. 空有广度, 远远不够.好的, 闲话不多说. 本篇主要记录IDEA Scala环境的搭建.原创 2022-10-24 23:59:15 · 6521 阅读 · 0 评论 -
[Java基础] Java8的Function函数及其使用
前言我们本期主要介绍下Java8的新特性, Function函数. 废话不多说, 我们直接进入正题部分.PS: 上海现在多数处于在家办公的状态. 自己的时间也稍微多了一点.Function函数列表Function函数, 是Java仿照Scala等语言, 函数可以传递的特性, 而提供的一种新的功能. 其提供的类基本都是处于java.util.function下.相关列表序号 接口 & 描述BiConsumer<T,U>代表了一个接受两个输入参数的操作,并且不返回任何原创 2022-03-13 23:39:19 · 15328 阅读 · 0 评论 -
[Java基础] 2个Pair工具类比较
前言之前再开发过程中, 发现有2个Pair类, 2个Pair类之间还是有一些差别和联系的, 将考究内容记录于此.PS: 后续, 我们可以探究下Tuplate 三元组和多元组.Pair类解析javafx.util.Pair Java原生Pair类基本使用Demo.package com.yanxml.util.pair.demo;import javafx.util.Pair;/** * Pair 相关使用. Demo1 * @author seanYanxml * @date 2原创 2022-02-27 23:54:00 · 3110 阅读 · 1 评论 -
[Java基础]计算字符串数组内数组总长 (StringUtils.join & StringBuilder.append)
前言最近在开发的时候, 需要计算一个String数组, 拼接后的长度. 本来是准备自己写了一个简单的工具类, 计算长度. 经过同事的提醒, 发现还有这样一个好用的工具类.方法一public static int calculateStrJoinLengthOfListMethod1(List<String> strList){ if(CollectionUtils.isEmpty(strList)){ return 0; } return StringUtils.join(st原创 2022-02-20 23:58:47 · 1092 阅读 · 0 评论 -
[Java多线程] Future及 Callable的使用解析
前言我们一直都知道, Java内的多线程主要有2种方式. 同步方式和异步方式. 同步方式, 我们一般是使用Runnbale接口; 异步方式, 我们一般使用的是Callable接口.原创 2021-11-28 23:50:22 · 779 阅读 · 0 评论 -
[Java基础] Java多线程之生活简述
前言1024程序员节. 今天写点干货.在Java的多线程内, 有非常多的组成和变量. 初学时, 经常拿捏不住. 下面我们带入生活的场景, 简单的描述下Java中的各种使用场景.多线程的基本组成 Thread (多人相同工作)在日常的生活中. 我们经常需要做一件事情. 我们认为时一个Task. 那么一个Task有时可以分成多个相同的Task, 以及多个不同的Task.比如: 饺子店出售饺子场景1-1: 使用的是速冻饺子. 店家只需要负责下饺子就可以了. 那么当客人比较多的时候. 一口锅自然是原创 2021-10-24 22:57:53 · 1378 阅读 · 0 评论 -
[Java基础] CyclicBarrier 使用及源码分析
CyclicBarrier 源码package java.util.concurrent;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;public class CyclicBarrier { private static class Generation { boolean broken = false; } pri原创 2021-10-17 23:48:19 · 228 阅读 · 0 评论 -
[多线程] 多线程工具之CountDownLatch
前言在Java中, 如何启动多个线程. 随后使某项任务分步执行.使用Join方法使用CountDownLatchCountDownLatch 内核心方法:await(): 等待. 当count值为0时, 才能继续执行.countDown(): 和方法名一样. 具体作用时将方法名称-1.getCount(): 获取当前count值.简单都小测试import java.util.concurrent.CountDownLatch;public class TestJava {原创 2021-10-10 23:56:19 · 450 阅读 · 0 评论 -
[Java基础] Arthas trace命令及使用
前言在我们使用过程中. 我们有一些请求比较慢, 我们怎么进行定位呢? 最近发现一个很好用的, arthas中trace命令.使用基本常用的Trace软件CatSkyWalking常用的小工具Arthas traceReference原创 2021-10-03 22:03:51 · 1574 阅读 · 0 评论 -
[Java8] lamda表达式及Stream API一览
前言不知道从什么时候开始. Java8开始刮起了一阵妖风. 那就是lamda表达式. 也叫函数式编程, 大概是和隔壁的Scala进行学习吧. 但是Java8也是甲骨文最后一个免费的版本. 大概率, 很多的中小型公司都会选择停留在这个版本. 虽然这个版本没有ZGC垃圾回收, 但是面对10G-100G左右内存规模的程序, 也应该够了.初识lamda表达式lamda表达式最大的特性就是简化了for循环的编写方式. 多说无益, 我们举个例子进行编写吧.for循环写法List<Integer&g原创 2021-09-26 23:56:31 · 351 阅读 · 0 评论 -
[Java基础] 空指针判断与鸡肋的Optional.of()
前言在开发过程中. 我们经常会遇到NullPointerException异常.相关校验办法为了避免触发NullPointerException异常. 我们在调用对象内的属性和方法时, 经常会进行空指针的判断.List tmpList = null;简单的判断if(null == tmpList){ return; }tmpList.get(0);使用工具的判断if(ObjectUtils.isNull(tmpList)){ return;}tmpList.get(原创 2021-09-19 23:29:17 · 1081 阅读 · 1 评论 -
[Java基础] 如何对List进行(交集/并集/补集)运算
前言前几天. 工作中用到了List的交集, 并集, 补集. 运算. 之前有封装过相关的List工具类. 在此, 再次总结一下.List 的交集/并集/补集 运算(原生方法)交集 /** * 交集. * 注意直接使用 retainAll方法会改变原数据集合. 需要拷贝使用. */ public static <T> List<T> intersection(java.util.List<T> listA, List&l原创 2021-09-12 23:51:08 · 658 阅读 · 0 评论 -
[Java 基础] 如何更新注解属性值?
前言在日常开发中. 有时候会需要自定义框架的一些注解, 达到自己希望的目的. 本文主要介绍2个方面:如何自定义注解和使用注解如何更新已经存在注解的属性值Spring AOP与注解的使用(见下一篇文章)什么是注解注解是JDK 1.5新增的一个特性.Reference[1]. https://blog.csdn.net/u014750606/article/details/79977114...原创 2021-09-05 23:49:42 · 247 阅读 · 0 评论 -
[JVM] Arthas 及其基本使用
前言工作中需要使用Arthas进行定位问题. 顺便学习了一下.基本功能thread定位线程问题dashboard 观察系统情况heapdump + jhat分析jad反编译动态代理生成类的问题定位第三方的类(观察代码)版本问题(确定自己最新提交的版本是不是被使用)redefine 热替换目前有些限制条件:只能改方法实现(方法已经运行完成),不能改方法名, 不能改属性m() -> mm()sc - search classwatch - wa原创 2021-08-29 22:43:15 · 213 阅读 · 0 评论 -
[lombock] 标签及相关使用
前言总结一下. lombock包提供的标签.常用标签(Lombok features)记录一下开发中使用的标签.@DataAll together now: A shortcut for @ToString, @EqualsAndHashCode, @Getter on all fields, and @Setter on all non-final fields, and @RequiredArgsConstructor!看介绍可以知道. @Date是由上述几个标签组合而成. 使用时原创 2021-08-22 23:01:20 · 211 阅读 · 0 评论 -
[JVM] JVM 参数调优
前言本文主要介绍JVM各个参数的总结。前置查看默认参数java +XX:+PrintCommandLineFlags -version查看某个进程的参数jinfo -flags <pid>通用JVM参数类型JVM 参数主要包括如下几种类型:标准 - : 所有的HotSpot版本都支持非标准 -X : 特定的HotSpot版本支持.不稳定 -XX : 下版本可能废弃.https://docs.oracle.com/javase/8/docs/technotes原创 2021-08-08 23:55:20 · 159 阅读 · 0 评论 -
[JVM] 如何查看当前使用的JVM参数
前言在开发过程中遇到需要查看JVM参数. 以及使用的GC垃圾回收器的类型. 本次将其记录于此.方法1 查看默认设置使用java -XX:+PrintCommandLineFlags -version即可.localhost:redis sean$ java -XX:+PrintCommandLineFlags -version-XX:InitialHeapSize=134217728 -XX:MaxHeapSize=2147483648 -XX:+PrintCommandLineFlags -X原创 2021-07-25 23:12:32 · 5599 阅读 · 0 评论 -
[Java加密] Jasypt加密工具
前言前段时间研究加密工具. 怎么也想不起来, 最早的加密算法是怎么搞的. 今天把这部分简单总结一下.加密工具包&相关依赖开源项目地址: https://github.com/ulisesbocchio/jasypt-spring-boot最新版本的加密工具需要JDK1.8及其以上版本才可以兼容.# 官方教程中 单引包教程 <dependencies> <dependency> <groupId>com.github.uli原创 2021-04-26 08:38:54 · 998 阅读 · 0 评论 -
[Java工具] Lombock基本安装&使用
前言在开发过程中, 我们经常会写很多的属性和get/set方法。 也就是我们常常说的,对于属性私有,对于接口开放。 但是这样会造成代码非常的冗余,并且在改变属性名称的时候,会导致更新的代码较多。 所以,我们在开发的过程中,经常使用lombok工具来方便我们进行使用。PS: 这个最早项目的时候就有用到。不过当时没有记录,这次重新搭建环境时候用到了,记录一下。安装https://projectlombok.org/downloadcd到你的lombok目录, 运行Jar包. java -jar原创 2021-01-03 18:24:35 · 314 阅读 · 2 评论 -
JDK1.8 源码 java.util.TreeMap
前言本章, 我们主要介绍java.util.TreeMap.根据上述图片, 其继承关系为TreeMap -> NavigableMap -> SortedMap -> Map.总览同样. 我们从成员变量和基本方法进行解读.成员变量private final Comparator<? super K> comparator;private transient Entry<K,V> root;private transient in原创 2020-07-31 00:58:47 · 439 阅读 · 1 评论 -
JDK1.8 源码 java.util.LinkedHashMap
前言在前面的章节内我们仔细阅读了java.util.HashMap的源码. 在后面的2章内, 我们将看下JDK1.8内其余的2种数据类型的源码, 即LinkedHashMap与TreeMap.在看LinkedhashMap之前, 我们先回顾下HashMap的几个基本知识.基本数据节点Node<K,V> static class Node<K,V> implements Map.Entry<K,V> { final int hash;原创 2020-07-30 17:19:08 · 312 阅读 · 0 评论 -
JDK1.8 源码 String当真不可变么? StringBuilder和StringBuffer的区别
前言在前面的章节内, 我们自己研究了java.lang.String类的源码. 本章主要解决与String相关的几个问题:String 当真不可变么?StringBuilder和StringBuffer的区别?常量池+运算符的重载及其含义String当真不可变么?我们回顾下String的源码.public final class String implements java.io.Serializable, Comparable<String>, CharSeque原创 2020-07-30 01:13:07 · 442 阅读 · 0 评论 -
JDK1.8 源码 java.util.HashMap
本章, 我们来看下java.util.HashMap.从图中可以看出, 其继承关系为:Collection <-- Map <-- AbstractMap <-- HashMap.主要成员变量&方法成员变量 private static final long serialVersionUID = 362498820763181265L; static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;原创 2020-07-17 21:50:33 · 364 阅读 · 0 评论 -
JDK1.8 源码 java.util.LinkedList
前言今天我们来看下java.util.LinkedMap.从上图可以看出. LinkedList和ArrayList同属List <-AbstractList流程下的不同实现.此外, 因为链表的关系, LinkedList主要有2层继承关系.Collection <-- List <-- AbstractList <-- AbstractSequentialList. 此为第一段继承关系.Collection <-- Queue <- Deque <-原创 2020-07-17 12:11:55 · 270 阅读 · 0 评论 -
JDK1.8 源码 java.util.ArrayList
前言本章, 我们来看下集合数据类型java.lang.ArrayList.集合类图解析从该类图中可以看到.集合类基础接口为Collection.随后衍生出List/Set/Map. 这3类接口.List线Collection <-- AbstractCollection <-- AbstractList/AbstractSetAstractList <-- ArrayList / LinkedList / Vector/ StackMap线Collecti原创 2020-07-17 00:55:57 · 274 阅读 · 0 评论 -
JDK1.8 源码 java.lang.String
前言上一章节, 我们读了java.lang.Integer类. 本章我们读下java.lang.String类.正文总览主要成员变量// 存储数据类型private final char value[];// hash值private int hash; // Default to 0// 序列化值private static final long serialVersionUID = -6849794470754667710L;// 流对象?private static f原创 2020-07-16 01:27:48 · 321 阅读 · 0 评论 -
JDK1.8 源码 java.lang.Integer类
前言在上一章. 我们读了下java.lang.Object类. 在本章内, 我们读一下java.lang.Integer类.众所周知, JDK有8种基本数据类型. 分别为 byte short int long float double. 还有2类非数字类, 分别为char和boolean. 也就是说, 读了其中一种数值数据类型, 即读过其他5种数据类型. 所以, 我们今天读取Integer数据类型是绝对有意义的.正文(成员 & 方法) 概览与Object类相似. 在细读源码之前,原创 2020-07-14 16:32:48 · 425 阅读 · 0 评论 -
Java 基础 Scanner读取控制台 & 控制台结束快捷键盘
前言之前在牛客网做题的时候. 对于输入和输出控制比较紧. 这边正好总结一下. 另一方面, Java的输入输出还是比当年的C++要容易的多. 虽然C++我也已经忘了大半代码.正文声明并且绑定控制台输入流Scanner scanner = new Scanner(System.in);读取字符串// 读取Lines. public static void readLines(Scanner scanner) { while(scanner.hasNext()) { Strin原创 2020-07-10 00:39:45 · 1329 阅读 · 0 评论 -
Java基础 悲观锁&乐观锁
前言悲观锁与乐观锁 只是2种不同的概念. 在JDK内各有不同的实现.解析悲观锁悲观锁. 即. 认为: 我们每次修改数据时, 都会有其他人来修改数据. 所以, 我们在进行更新数据时, 都会加锁进行控制.即 执行类似如下流程.1- 锁定2- 修改数据3- 解除锁定Java 中并发包的锁主要有2种: synchronized关键字与RentrantLock对象. 其中之一写法:public void update(OptimisticLockObject object, int val原创 2020-07-09 23:54:47 · 284 阅读 · 0 评论 -
(Java基础) List转换为数组 & 数组转换为List
前言前段时间, 一直看到Spark内的一处进行序列化的语句. 想起来之前看过Arrays的源代码. 于是, 在此总结一下.String [] array = new String[]{"a","b","c"};JavaRDD<String> javaRDDTmp = new JavaSparkContext.parallellize(Array.asList(array));其实. 值得注意的是Spark内的RDD都是不可变的. 所以, 这里的转换没有问题. 但是在我们日常的开发中,原创 2020-07-07 12:37:35 · 3167 阅读 · 0 评论 -
Java工具-JsonObject&JsonArray/Object/String相互转换(FastJson)
前言之前处理Json类型字符串. 对于相关细节有些疏忽了(Spark SQL 导入JSON文件).借此机会将Json类型字符串全部梳理一遍.Maven 引用 <dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.4</versio原创 2020-07-07 01:07:00 · 2989 阅读 · 0 评论 -
(异常-Junit) 程序包org.junit不存在
前言Junit打包.程序包org.junit不存在[ERROR] COMPILATION ERROR :[INFO] -------------------------------------------------------------[ERROR] /Users/sean/Documents/Gitrep/bigdata/spark/src/main/java/com/yanxml/bigdata/java/spark/demos/clickhistory/ClickHistoryTrai原创 2020-07-05 18:02:36 · 624 阅读 · 0 评论 -
Junit 与单元测试
前言前段时间再写Spark例子的时候使用到了单元测试. 再次总结下.Jar包引用 <!-- https://mvnrepository.com/artifact/junit/junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version>原创 2020-07-04 22:03:46 · 286 阅读 · 0 评论 -
Java 定时任务(Crontab/Quartz/@Schedule/Timer/Drools)
前言之前因为" cron 表达式0 0/10 * * * 与 0 */10 * * *的区别" 这篇文章经常被人评论说结论不对. 今天有时间验证一下, 验证的同时顺便总结下Java内的定时任务.最早接触cron表达式是在使用SpringBoot的@Schedule标签. 随后了解Quartz框架和Linux 内的 crontab....原创 2019-12-31 23:13:00 · 1257 阅读 · 0 评论 -
Java基础(二) 注释和基本数据类型
Java基础(二) 注释和基本数据类型标识符关键字基本数据类型1. 标识符1.1 注释Java中的注释主要包括三种类型,单行注释、多行注释、文件注释。单行注释 //符号可以注释Java文件中的一行代码,例如://int number=0;这行代码在编译的时候,编译器会自动忽略这行代码。多行注释/* */可以注释Java文件中的多行代码,但是需要注意的一点是,/**/不能够相互嵌套使用。原创 2017-02-06 23:42:15 · 739 阅读 · 0 评论 -
Java基础(四) 数组的创建和使用
Java基础(四) 数组的创建和使用数组的创建:基本数据类型数组/类类型数组访问数组的元素和长度创建一个数组的数组数组是一组数据的集合,数组内的每个数据叫做元素,数组也是Java对象。数组中的元素可以是任意的数据类型(基本数据类型和引用数据类型),但是同一个数组内只能存放一种数据类型的数据。创建数组的流程大致包括入下几个步骤:基本步骤:声明数组变量 -> 创建数组实例 -> 初始化数组声原创 2017-02-07 15:46:18 · 3809 阅读 · 0 评论