数据结构和算法
数据结构和算法
Hanyinh
这个作者很懒,什么都没留下…
展开
-
Java中Cookie的属性介绍
Cookie原创 2023-04-14 16:56:19 · 705 阅读 · 1 评论 -
MapStruct
遇到MapStruct后,再也不手写PO,DTO,VO对象之间的转换了!原创 2021-07-16 15:57:59 · 127 阅读 · 0 评论 -
逆波兰算法
【算法】表达式求值–逆波兰算法介绍昨天去某大厂面试,居然让我做四则运算,还好我够机灵总结:什么是中缀表达式?例如a+b,运算符在两个操作数的中间。这是我们从小学开始学习数学就一直使用的表达式形式。什么是后缀表达式?例如a b + ,运算符在两个操作数的后面。后缀表达式虽然看起来奇怪,不利于人阅读,但利于计算机处理。转换为后缀表达式的好处是:1、去除原来表达式中的括号,因为括号只指示运算顺序,不是实际参与计算的元素。2、使得运算顺序有规律可寻,计算机能编写出代码完成计算。逆波兰算法的原创 2021-05-22 13:37:05 · 3884 阅读 · 1 评论 -
一致性哈希算法的原理与实现
一致性哈希算法的原理与实现总结:一致性hash算法在分布式系统中得到了广泛应用,主要可以用来作为负载均衡的算法。一致性hash算法和普通hash算法区别:一致性hash算法和普通hash算法都是使用取模的方法,只是,普通hash算法是对服务器的数量进行取模,而一致性hash算法是对2^32取模。一致性hash算法解决了什么问题:由于普通hash算法是对服务器的数据进行取模,因此如果服务器增加或减少,势必会造成之前hash出来的数据有问题,这就需要重新去对新的服务器数量进行取模,而一致性h原创 2021-05-16 10:02:06 · 312 阅读 · 0 评论 -
写时复制原理(copy-on-write)
写时复制原理(copy-on-write)CopyOnWrite特点1、一般用于读多写少的情况,用于提高读取数据的效率2、注意的是,读数据并不能保证实时性,因为读取时,读取的是旧数组的数据3、缺点是:占用内存(每添加一次就需要复制一个数据)和数据一致性问题(不能保证实时数据)写的时候会复制一份数据,等处理完毕会把新数组覆盖旧数组。...原创 2021-05-15 16:36:22 · 1126 阅读 · 0 评论 -
ArrayList和linkedList底层实现原理以及区别?
ArrayList和linkedList底层实现原理以及区别?ArrayList:在动态数组中,存储数据用的是一段连续的大内存,所以如果我们要在某一个位置添加或者删除一个元素,剩下的每个元素都要相应地往前或往后移动。如果该动态数组中的元素很多,那么,每当我们添加或删除一个元素后,需要移动的元素就非常多,因此,效率就比较低。而查找的时候,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素。这就是为什么ArrayList的查找效率高,而增删操作的效率低了。LinkedList:Link原创 2021-05-14 23:16:03 · 686 阅读 · 0 评论 -
信号量Semaphore详解
Java信号量Semaphore详解总结:简介:Semaphore实现为一种基于计数的信号量,Semaphore管理着一组虚拟的许可集合,这种许可可以作为某种凭证,来管理资源。在一些资源有限的场景下很有实用性:比如数据库连接,应用可初始化一组数据库连接,然后通过使用Semaphore来管理获取连接的许可,任何线程想要获得一个连接必须首先获得一个许可,然后再凭这个许可获得一个连接,这个许可将持续到这个线程归还了连接。在使用上,任何一个线程都需要通过acquire来获得一个Semaphore许可,原创 2021-05-12 15:02:08 · 587 阅读 · 0 评论 -
JAVA中THIS和SUPER关键字的底层实现原理
阿里面试题:说一下JAVA中THIS和SUPER关键字的底层实现原理this:在 Java 中,每当一个对象创建后,Java 虚拟机都会给这个对象分配一个指向自身的引用,也就是 this。同时如果对象是子类对象,则还会有一个 super 引用指向当前对象的父类对象。在类的方法定义中使用 this 关键字,表示使用该方法的对象的引用。在一个类中,this 可以表示该类的当前实例。this 是对当前类对象的引用,对象只有被实例化才存在。原理:可以使用 this 的本质是:编译器在调用某个实例方原创 2021-05-12 09:53:44 · 488 阅读 · 0 评论 -
页面置换算法
页面置换算法原创 2021-05-11 17:48:41 · 76 阅读 · 0 评论 -
背包问题
参考:一套框架解决「背包问题」背包问题背包问题是一类经典的动态规划问题,它非常灵活,需要仔细琢磨体会,本文先对背包问题的几种常见类型作一个总结,期望可以用一套框架解决背包问题。常见背包问题可分为:01 背包问题:最基本的背包问题就是 01 背包问题:一共有 N 件物品,第 i(i 从 1 开始)件物品的重量为 w[i],价值为 v[i]。在总重量不超过背包承载上限 W 的情况下,能够装入背包的最大价值是多少?完全背包问题:完全背包与 01 背包不同就是每种物品可以有无限多个:一共有 N原创 2021-05-11 16:55:49 · 116 阅读 · 0 评论 -
ReenTrantLock可重入锁和synchronized的区别总结
ReenTrantLock可重入锁(和synchronized的区别)总结原创 2021-04-21 18:11:53 · 122 阅读 · 0 评论 -
ConcurrentHashMap多线程扩容
ConcurrentHashMap源码解析,多线程扩容ConcurrentHashMap源码分析(JDK8) 扩容实现机制总结:private transient volatile int sizeCtl;多线程之间,以volatile的方式读取sizeCtl属性,来判断ConcurrentHashMap当前所处的状态。通过cas设置sizeCtl属性,告知其他线程ConcurrentHashMap的状态变更。不同状态,sizeCtl所代表的含义也有所不同:未初始化: sizeCtl =原创 2021-04-21 18:03:14 · 1196 阅读 · 1 评论 -
浮点型出现丢失精度的原因
浮点型出现丢失精度的原因由于是使用二进制进行存储的,而对于一些小数,不能准确的使用二进制存储,因为可能无法消灭小数部分,导致无限循环下去,而又因为超过了其范围,所以就会导致精度丢失。...原创 2021-04-15 21:56:02 · 1365 阅读 · 0 评论 -
Java9 后String 为什么使用byte[]而不是char?
Java9 后String 为什么使用byte[]而不是char?原创 2021-03-10 14:07:30 · 881 阅读 · 0 评论 -
SimpleDateFormat 和 DateTimeFormatter
2020 年,你还在使用 Java 中的 SimpleDateFormat 吗?总结:总之,尽量少用SimpleDateFormat,原因有以下两点1. 通过new 一个对象来操作对象,占用内存大,如果每处理一个时间信息的时候,就需要new一个SimpleDateFormat实例对象,然后再丢弃这个对象。大量的对象就这样被创建出来,占用大量的内存和 jvm空间。2. SimpleDateFormat 是线程不安全的如果使用static将SImpleDateFormat设置成共享变量,这会造成线原创 2021-01-08 15:16:14 · 606 阅读 · 0 评论 -
Comparable和Comparator的理解
Comparable 和 Comparator的理解原创 2020-01-10 10:38:45 · 129 阅读 · 0 评论 -
并查集
Java算法——并查集原创 2021-01-25 15:51:56 · 53 阅读 · 0 评论 -
红黑树
漫画:什么是红黑树?(整合版)原创 2021-01-14 14:23:04 · 85 阅读 · 0 评论 -
Collections.synchronizedList
Collections.synchronizedList使用方法由于有些集合是线程安全的(比如Vectory),但是它的线程安全实现方式是对所有操作都加上了synchronized关键字,这种方式严重影响效率.所以并不推荐使用。因此可以使用Collections.synchronizedList,来为非线程安全的集合转变成线程安全的,这是因为把与之对应的操作加上了synchronized关键字(PS:有些操作没有,仅部分操作加上了synchronized关键字,比如iterator()就没有加上关键字原创 2020-12-30 21:39:33 · 277 阅读 · 0 评论 -
CountDownLatch
CountDownLatch的理解和使用CountDownLatch概念CountDownLatch是一个同步工具类,用来协调多个线程之间的同步,或者说起到线程之间的通信。CountDownLatch能够使一个线程等待其他一些线程完成自己的工作之后才开始执行该线程的工作。它是使用一个计数器来实现的。计数器初始值为其他一些线程的数量,每当有一个线程完成自己的任务后,计数器就会减一,直到计数器的值为0,也就是说表示其他一些线程都已经完成了自己的任务,然后在CountDownLatch上等待的线程就可以原创 2020-12-30 21:01:17 · 64 阅读 · 0 评论 -
ThreadLocal
在Thread内部中有一个ThreadLocal.ThreadLocalMap threadLocals = null这个变量,用于存储ThreadLocal,因为每个线程可以有多个ThreadLocal,并且可以多次调用get(),所以需要在内部存储一个ThreadLocalMap来存储ThreadLocal。ThreadLocal相关方法T initialValue()这个方法用于设置初始值,并且在调用get()方法时才会被触发,所以是懒加载。但是在get()之前进行了set()操作,这样就不会原创 2020-12-25 12:19:52 · 138 阅读 · 0 评论 -
Random笔记
Random.setSeed(long seed) 设置随机数种子java中Random是伪随机,有时候随机数会相同,如果想让生成的随机数更加无法预测,可以用Random.setseed()设置随机数种子,使随机数更加随机。这个设置只能一次有效,后续如果还要生成随机数则不会影响。Random如果使用相同的seed值,则每次生成的随即数都相同,如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同。举例:Random random = new Rando原创 2020-11-25 18:32:01 · 162 阅读 · 0 评论 -
Synchronize、偏向锁、轻量级锁、重量级锁
浅谈Synchronize以及偏向锁、轻量级锁、重量级锁原创 2020-06-13 10:20:19 · 273 阅读 · 0 评论 -
Deque
Java双向队列Deque栈与队列原创 2020-06-11 14:18:59 · 240 阅读 · 0 评论 -
Hash算法解决冲突的四种方法
Hash算法解决冲突的四种方法原创 2020-06-09 13:54:57 · 248 阅读 · 0 评论 -
排序算法「稳定性」意义
排序算法的「稳定性」有何意义?你怎么回答?原创 2020-06-08 18:08:24 · 313 阅读 · 0 评论 -
volatile
volatile关键字整理原创 2020-04-26 11:28:02 · 168 阅读 · 0 评论 -
判断链表中是否有环
判断链表中是否有环原创 2020-05-12 15:21:48 · 745 阅读 · 0 评论 -
AQS及其原理
什么是AQS及其原理原创 2020-05-20 21:31:56 · 779 阅读 · 0 评论 -
ReentrantLock
一文彻底理解ReentrantLock可重入锁的使用原创 2020-05-20 17:51:41 · 86 阅读 · 0 评论 -
ConCurrentHashMap 1.7 和 1.8 的区别、伪共享
ConCurrentHashMap 1.7 和 1.8 的区别原创 2020-05-20 14:21:00 · 461 阅读 · 0 评论 -
JDK7中HashMap链表成环的原因和解决方案
jdk1.7 HashMap扩容转移链表时形成环状链表的原因JDK8 中解决方案(从这里查看的)JDK 8 中扩容时,已经没有 JDK7 中的 transfer 方法了,而是自己重新写了扩容方法,叫做 resize,链表从老数组拷贝到新数组时的代码如下: //规避了8版本以下的成环问题 else { // preserve order // loHead 表示老值,老值的意思是扩容后,该链表中计算出索原创 2020-05-19 17:44:37 · 1155 阅读 · 0 评论 -
Java8 HashMap之tableSizeFor
Java8 HashMap之tableSizeFor原创 2020-05-19 11:34:36 · 295 阅读 · 0 评论 -
HashMap 初始化大小以及扩增规则
HashMap 初始化大小以及扩增规则PS: 就是初始化的时候,threshold的初始值为不小于capacity的最小的2的n次幂,直到第一次put的时候会resize(),从而threshold变为2的n次幂*loadFactor,当size的值大于threshold时,会扩容,然后resize()...原创 2020-05-18 18:38:43 · 259 阅读 · 0 评论 -
HashMap和HashSet的区别
HashMap和HashSet的区别原创 2020-05-18 14:12:08 · 89 阅读 · 0 评论 -
Java线程安全的集合详解
Java线程安全的集合详解PS: 还有stack和enumeration原创 2020-05-18 13:52:57 · 219 阅读 · 0 评论 -
JDK1.8 LinkedHashMap的实现原理
JDK1.8 LinkedHashMap的实现原理原创 2020-04-15 10:25:40 · 197 阅读 · 0 评论 -
LRU、LRUMAP
LRU算法以下两个关联着看,大部分讲的是一致的LRUMAP 原理解析LRUMap源码分析原创 2020-04-14 16:27:46 · 382 阅读 · 0 评论 -
表达式求值了
拜托,面试别再问我表达式求值了!!!原创 2020-02-17 16:35:38 · 86 阅读 · 0 评论 -
时间复杂度
拜托,面试别再问我时间复杂度了!!!原创 2020-02-17 16:26:36 · 164 阅读 · 0 评论