![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java基础
java基础
小熊123~
优秀是一种习惯
展开
-
HashMap如何添加键值对元素
HashMap原创 2022-12-31 22:55:51 · 1100 阅读 · 1 评论 -
阿里四面你都知道吗?
阿里四面你都知道吗?最近一个朋友跟我说,现在面试太难了,再也不是以前那种随便背几个面试题然后就能拿到offer的时候了。最近朋友准备换工作面试了阿里,然后和我交流了下他遇到的一些面试题,然后我整理了一下,然后就分享给有需要的朋友们顺便也查漏补缺一下。一面1.开始是自我介绍;2.HashMap的实现原理,什么是hash碰撞,怎样解决hash碰撞?3.ConcurrentHashMap的原理,与HashTable的区别?4.HashSet和TreeSet的区别以及底层实现原理5.HashMap原创 2021-01-20 15:40:32 · 47 阅读 · 0 评论 -
Idea配置
原文链接原创 2021-01-20 17:31:32 · 36 阅读 · 0 评论 -
SPI机制
JDK SPI//resources/META-INF/services //com.xxx.Logcom.xxx.impl.Log4j com.xxx.impl.Logback //public class Main { public static void main(String[] args) { ServiceLoader<Log> serviceLoader = ServiceLoader.loa原创 2021-01-25 17:40:27 · 149 阅读 · 0 评论 -
Date互转String和时间戳
//Date转字符串 private static String convertDateToStr(Date date,String pattrn){ if(date == null){ return StringUtils.EMPTY; } Instant instant = date.toInstant(); ZoneId zone = ZoneId.of("Asia/Shanghai"); ...原创 2020-08-13 15:05:57 · 664 阅读 · 0 评论 -
Java8_Stream
1.构造stream Stream stream = list.stream(); 2.Stream流的之间的转换 List<String> list = stream.collect(Collectors.toList()); Set set = stream.collect(Collectors.toSet()); String str = stream.collect(Collectors.joining()).toString();3.Stream流的map使用----.原创 2020-08-15 08:43:18 · 106 阅读 · 0 评论 -
java类初始化顺序(静态变量>变量>构造器)
父静态变量/父静态初始化块子静态变量/子静态初始化块父变量/父初始化块父构造器子变量/子初始化块子构造器总结: 静态变量>变量>构造器 父静态变量>子静态变量>父变量>父构造器>子变量>子构造器...原创 2020-08-23 15:41:22 · 133 阅读 · 0 评论 -
查询优化(查多次改为只查一次)
private List<IotUserVO> converToIotUserVO(List<IotUser> iotUserList,BizInfo bizInfo){ if(CollectionUtils.isEmpty(iotUserList)){ return Collections.emptyList(); } //批量获取siteInfo,只查一次 Map<String, SiteInfo> siteInfoM.原创 2020-10-22 13:41:11 · 351 阅读 · 0 评论 -
用ConcurrentHashMap作缓存
// 用map实现一个简单的缓存功能public class MapCacheDemo { // 我使用了 ConcurrentHashMap,线程安全的要求。 //我使用SoftReference 作为映射值,因为软引用可以保证在抛出OutOfMemory之前,如果缺少内存,将删除引用的对象。 //在构造函数中,我创建了一个守护程序线程,每5秒扫描一次并清理过期的对象。 private static final int CLEAN_UP_PERIOD_IN_SE.原创 2020-11-28 11:58:10 · 1752 阅读 · 2 评论 -
异步编程 CompletableFuture(JDK1.8)
基础篇:异步编程不会?我教你啊!CompletableFuture(JDK1.8)前言以前需要异步执行一个任务时,一般是用Thread或者线程池Executor去创建。如果需要返回值,则是调用Executor.submit获取Future。但是多个线程存在依赖组合,我们又能怎么办?可使用同步组件CountDownLatch、CyclicBarrier等;其实有简单的方法,就是用CompeletableFuture线程任务的创建 线程任务的串行执行 线程任务的并行执行 处理任务结果和异常原创 2020-12-09 11:37:16 · 985 阅读 · 0 评论 -
Java8_Optional
Optional类入门Optional<T> 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在Optional可以更好的表达这个概念。并且可以避免空指针异常。你可以把Optional对象看成一种特殊的集合数据,它至多包含一个元素。常用方法:Optional.of(T t) : 将指定值用 Optional 封装之后返回,如果该值为 null,则抛出一个 NullPointerException 异常。 Opt转载 2020-12-10 17:51:13 · 973 阅读 · 0 评论 -
maven scope
1.test范围是指测试范围有效,在编译和打包时都不会使用这个依赖2.compile范围是指编译范围内有效,在编译和打包时都会将依赖存储进去3.provided依赖,在编译和测试过程中有效,最后生成的war包时不会加入 例如: servlet-api,因为servlet-api tomcat服务器已经存在了,如果再打包会冲突4.runtime在运行时候依赖,在编译时候不依赖默认依赖范围是compile...原创 2021-01-12 19:13:26 · 72 阅读 · 0 评论 -
Java8的CompletionService使用与原理
原文链接CompletionService是Java8的新增接口,JDK为其提供了一个实现类ExecutorCompletionService。这个类是为线程池中Task的执行结果服务的,即为Executor中Task返回Future而服务的。CompletionService的实现目标是任务先完成可优先获取到,即结果按照完成先后顺序排序。CompletionService的使用非常简单。从源码查看ExecutorCompletionService类,该类只有三个成员变量:public cla转载 2021-01-20 16:07:06 · 359 阅读 · 0 评论 -
手写HashMap
public class MyHashMap<K,V> { Node<K,V>[] table; class Node<K,V> { int hash; K key; V value; Node<K,V> next; Node(int hash, K key, V value, Node<K, V> next) { this.原创 2021-01-13 15:06:43 · 122 阅读 · 0 评论 -
IP地址在计算机的存储
IP地址在计算机里是用四个字节存储的,每个字节是8位二进制位,四个数总共32位。所以IP四个数中每个数从0~255,总共256(2^8)位。原创 2020-09-18 10:12:37 · 1737 阅读 · 0 评论 -
位运算 &|^和多选字段
假设,我们现在有一个有一个业务需求:在任务中添加一个通知方式,可选项包括 IM 消息、系统提醒、邮箱、短信。选择 IM 消息后,支持 IM 即时发送;选择系统提醒后,支持站内信推送;选择选择邮箱后,该任务后续相关提醒内容,可通过发送邮件至相关人邮箱中进行通知;选择短信后,该任务后续相关提醒内容,可通过发送短信至相关人进行通知。我们在设计数据库库表时,通常情况下,将多个标识字段合并成一个字段,并把这个字段改成字符串型方式保存,例如,存在 1 时表示支持 IM,2 时表示支持系统消息,...原创 2020-12-15 10:54:35 · 387 阅读 · 0 评论 -
String源码
替换指定位置的字符串: StringBuilder replace(int start, int end, String str);原创 2020-08-20 13:15:54 · 130 阅读 · 0 评论 -
ArrayList源码(new(),add(),get())
new()//ArrayList的构造方法只做了一件事,就是将elementData初始化为空数组,只有第一次调用了add方法才会赋予elementData大小为10的默认容量。public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;}add()//addpublic boolean add(E e) { //确保内部容量(根据所需最小容量) ensureCapacityInternal(原创 2020-10-26 11:24:18 · 816 阅读 · 10 评论 -
HashMap源码(new(),put(),get())
new()://负载因子赋为0.75public HashMap() { this.loadFactor = DEFAULT_LOAD_FACTOR; }put()://putpublic V put(K key, V value) { return putVal(hash(key), key, value, false, true);}//putValfinal V putVal(int hash, K key, V value, boolean onlyIfAbsent原创 2020-10-26 14:04:24 · 604 阅读 · 1 评论 -
ConcurrentHashMap源码(put())
public V put(K key, V value) { return putVal(key, value, false); } final V putVal(K key, V value, boolean onlyIfAbsent) { //key或value为null时抛异常 if (key == null || value == null) throw new NullPointerException(); ...原创 2020-10-26 17:26:10 · 233 阅读 · 3 评论 -
集合
集合容器概述什么是集合集合框架:用于存储数据的容器。集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。 任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。接口:表示集合的抽象数据类型。接口允许我们操作集合时不必关注具体实现,从而达到“多态”。在面向对象编程语言中,接口通常用来形成规范。实现:集合接口的具体实现,是重用性很高的数据结构。算法:在一个实现了某个集合框架中的接口的对象身上完成某种有用的计算的方法,例如查找、排序等。这些算法通常是多态的,因为相转载 2020-08-15 08:44:20 · 302 阅读 · 0 评论 -
java基础总结一下
基本数据类型的范围:如int,4字节,每字节8位共32位,应该共能存2^32个数,但第一位是符号位(0是正数,1是负数)其中无论是+0还是-0都是0,因此实际能表达的数为2^32-1字节,范围是-2^31到2^31-1同理byte1字节,能存2^8-1个数,范围是-2^7到2^7-1short2字节,能存2^16-1个数,范围-2^15到2^15-1long8字节,能存2^32-1个数,范围-2^31到2^31-1AOP的理解:AOP面向切面编程,有两个关键点1、连接点2、切面;其中切.原创 2020-08-23 16:34:10 · 94 阅读 · 0 评论 -
数据结构和算法
一 前言1 为什么要学习算法和数据结构?解决特定问题。 深度优化程序性能的基础。 学习一种思想:如何把现实问题转化为计算机语言表示。2 业务开发要掌握到程度?了解常见数据结构和算法,沟通没有障碍。 活学活用:遇到问题时知道要用什么数据结构和算法去优化。二 数据结构基础1 什么是数据结构?数据结构是数据的组织、管理和存储格式,其使用目的是为了高效的访问和修改数据。数据结构是算法的基石。如果把算法比喻成美丽灵动的舞者,那么数据结构就是舞者脚下广阔而坚实的舞台。2 物理结构和转载 2020-08-15 08:47:27 · 188 阅读 · 0 评论 -
算法
算法好坏 时间复杂度:运行时间长短 大O表示法:只保留时间函数中的最高阶项且去掉系数 空间复杂度:占用内存大小 算法稳定性 稳定: 如果a原本在b前面,而a=b,排序之后a仍然在b的前面 不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面 常见算法: 字符串:暴力匹配、BM、KMP、Trie等。 查找:二分查找、遍历查找等。 排序:冒泡排序、快排、计数排序、堆排序等。 搜索:TFIDF、PageRank等。 聚类分析:期望最大化、k-meaning..原创 2020-08-15 08:46:06 · 101 阅读 · 0 评论