月泉的博客

月泉的博客

分享行走在技术路上的知识

《跟我学Rust》- 1.Rust概述
示例仓库在:https://github.com/yuequan1997/learn-rust-with-me这一节的主要议题如下: 为什么要学习Rust安装环节Hello Worldprintln! 学习资源推荐 Youtube:https://www.youtube.com/watch?v=-zNrURv_6cY&list=PLfQ4vem9sCARABIbsNQJJRmfaHxHI4tdO&index=2 BiliBIli:https://www.bilibili.com/video/av59184073/?p=1
敏捷开发概念
敏捷宣言以下是根据Agile Alliance(敏捷联盟)一批专家以及多年的经验所总结原文如下: Individuals and interactions over processes and tools Working software over comprehensive documentation Customer collaboration over contract negotiation Responding to change over following a plan 译文如下: 个体和交互 胜过 过程和工具 可以工作的软件 胜过 面面俱到的文档 客户合作 胜过 合...
也许是“新时代的开发姿势”
在写博客的同时也录制了视频,视频和文章结合食用效果更佳 Bilibili: https://www.bilibili.com/video/av47825907 油管:https://www.youtube.com/watch?v=2o3CsiSbnV0&list=PLfQ4vem9sCASf5iePYCIOEqycobbWSVic 缘起大概是在2~3年前,当时我在一家小型互联网创业公司,身处于技术氛围很不错的技术团队中,我们使用 Rails 来构建产品,整个产品是一个单体架构,但随着业务的变更与增长,我们在开发过程中所依赖的服务越来越多,毕竟不是每一家公司都有条件给予开发团队一个...
Rust的生命周期及所有权机制
Rust在内存管理方面和其它语言不太一样,像C/C++给予程序员无上的权利,可以手动的去管理内存,当然权利越大责任越大同时也就意味着风险越高,目前看来让程序员在运行时对内存进行手工的管理所带来的风险,大多数情况下弊大于利(这仅我个人观点,本人技术有限或许是我眼拙),常会出现忘记释放内存、访问一块已经被释放了的内存等诸如此类内存安全问题,则Java这一类虚拟机高级语言则是采用GC的方式来对内存进行管理,替代程序员去手动管理,这样便是损耗了性能换来内存的自动管理,同时Java也面对着对于数据共享时所会产生的线程安全问题,但Rust另辟蹊径结合以上观点,我觉得也算是从根本上解决了问题,它使用...
线程池原理剖析
食用该文章最好具有队列和AQS的知识,关于AQS可以从我以前书写的文章中找出 线程池是什么线程大家都清楚是什么?那么线程池是什么?在使用线程的时候有没有考虑过,在平时使用的时候系统中只要你想随处都可以创建线程并且很难管控,基本上一个线程使用完就销毁掉了,要在使用便新建一个线程 直接使用线程的缺陷(针对线程池) 线程数量无法限制,想创建多少个就多少个 线程无法复用,创建启动和销毁线程是会带来一定的开销 线程池的出现主要就是解决2个问题,一个是限制线程的数量和线程复用,在这个扩展上面可以再自行扩展出监控等。 线程池的使用Java的Executors工具类就提供了几种现成的创建线程池实...
JUC-ReentrantLock原理剖析
阅读该篇文章希望您已经理解或者了解过AQS的设计,因为本篇并不会重复叙述AQS的内容,若需要可阅读我写过的AQS文章或者其它文章。 ReentrantLock是什么ReentrantLock是一个显式独占可重入的公平或非公平锁,使用时可以设置锁是公平锁或非公平锁,它们之间的区别在于,线程唤醒的抢占方式,公平锁线程的抢占方式按照获取锁的先后顺序来唤醒,而非公平锁就是以一种随机抢占的方式。 ReentrantLock怎么用12345678910111213141516171819202122232425262728293031323334public class ReentrantLoc...
AQS原理剖析并实现一把自己的锁
AQS是什么AQS是一个类的缩写它的全名为AbstractQueuedSynchronizer在Java中许多的锁和同步器就是用该类做的实现,其本质上就是一个双向链表实现的队列队列存储的是线程对象的一个封装,其提供了一个同步器的基本逻辑并且将如何获得锁、释放锁的逻辑等可变更逻辑交给了子类去实现使得这个同步器有很大的扩展空间。 AQS的设计思想首先我们来看下其类结构 1234567891011public abstract class AbstractQueuedSynchronizer extends AbstractOwnableSynchronizer implements j...
JUC-LockSupport
LockSupport是什么LockSupport类是一个常用的用来实现锁或使一个线程阻塞的工具类(通常用来实现这些,当然有其它用途也可以的,只是个工具类而已),它主要提供了2个方法 park unpark park 阻塞当前线程并阻止该线程参与调度,除非其关联了许可证 unpark 给线程关联一个许可证(令它恢复线程调度) 小结 乍一看,其实park和unpark非常类似于wait和notify,那么既然有wait和notify了那么为什么还要在写一个和它类似功能的东西出来?其实只是类似而已,使用wait和notify你必须得先获取到监视器锁才能够使用否则将会抛出IllegalMo...
JUC-并发集合类List原理剖析
java中能够直接支持并发的集合有2个类,分别为CopyOnWriteArrayList、CopyOnWriteArraySet CopyOnWriteArrayListCopyOnWriteArrayList是什么CopyOnWriteArrayList是List的子类,它是线程安全的集合类,其主要思想是利用每次修改都采用复制的形式,但因为这种方式其对数据是弱一致性。 怎么使用?1234567public static void main(String[] args) { List<String> names = new CopyOnWriteArrayLi...
JUC-并发原子类Long系列原理剖析
JUC-并发原子类Long系列原理剖析为什么需要并发原子类在并发编程中时常会遇见一个共享资源的读改写,如果要保证这些共享资源的读改写的原子操作只能通过2种方式,一种是锁的方式一种是通过CAS的方式,如果利用锁那么将有可能造成大量的阻塞导致内核态用户态及线程唤醒带来的性能开销,那么如果只是针对单一资源的读改写保证其原子操作利用CAS是最佳的做法了,因为其不会导致线程阻塞挂起。 如何使用12345678910111213141516171819202122232425262728private static AtomicLong count = new AtomicLong();privat...
avatar
月泉
热爱技术
FRIENDS
charles