小道消息's notes

Record my study notes and essay feelings.

抢红包算法

抢红包大家都知道,但发出一个固定金额的红包,由若干个人来抢,需要满足哪些规则? 所有人抢到金额之和等于红包金额,不能超过,也不能少于。 每个人至少抢到一分钱。 要保证所有人抢到金额的几率相等。 下面实现了两种抢红包的方法:二倍均值法 和 线段切割法。 1、二倍均值法 设剩余红包金额为M,剩余人数为N,那么有如下公式:每次抢到的金额 = Random......

Java 多线程详解

一、线程与进程 进程是资源(CPU、内存等)分配的基本单位,它是程序执行时的实例。程序运行时系统就会创建一个进程,并为它分配资源,然后把该进程放入进程就绪队列,进程调度器选中它的时候就会为它分配 CPU 时间,程序开始真正运行。 线程是程序执行时的最小单位,它是进程的一个执行流,是 CPU 调度和分派的基本单位,进程由线程组成,线程间共享进程的所有资源......

竞争不充分的领域里,才有英雄

以下内容参考万维钢《精英日课》第一季。 这张照片是1927年索尔维会议上物理学家的合影,这可能是物理学史上最著名的一张照片。 照片上有二十九个人,其中十七人得了诺贝尔奖。不过小小的诺贝尔奖并不能代表这些人的成就,爱因斯坦、狄拉克、玻尔、普朗克、居里夫人、薛定谔、海森堡、泡利……这些人的名字如同恒星照耀人类历史。 那么问题来了。从二十世纪后期到现在,还......

白话设计模式

所谓的设计模式(Design Pattern)其实是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。 所以你可能完全没学过设计模式也能写出很好的代码,设计模式只是解决问题的一种思路,你完全可以有自己的思路。但是了解一些常见的设计模式,肯定是对代码开发有帮......

白话事务隔离级别

一、数据库事务 在 MySQL 中只有使用了 Innodb 数据库引擎的表才支持事务。事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。事务用来管理 insert、update、delete 语句。 一般来说,事务是必须满足4个条件(ACID):原子性(Atomicity)、一致性(Consistency)、隔离......

TCP、UDP、HTTP、HTTPS 一文足矣

一、简介 TCP、UDP、HTTP、HTTPS 都是通信协议,也就是通信时所遵守的规则,只有双方按照这个规则“说话”,对方才能理解或为之服务。 二、TCP、UDP、HTTP、HTTPS 之间的关系 TCP/IP 是个协议组,可分为四个层次:网络接口层、网络层、传输层和应用层。 在网络层,有 IP 协议、ICMP 协议、ARP 协议、RARP 协议等。 ......

Redis 基础详解

一、Redis 是什么 Redis 是一个使用 C 语言写成的,开源的、key-value 结构的、非关系型数据库。它支持存储的 value 类型相对更多,包括 String(字符串)、List(列表)、Set(集合)、Sorted Set(有序集合) 和 Hash(哈希),而且这些操作都是原子性的。在此基础上,Redis 支持各种不同方式的排序。为了......

MyBatis 中 # 与 $ 的区别

刚开始用 MyBatis 时,就发现有的地方用 #,有的地方用 $,但一直都没在意,直到程序出 Bug 了,才去了解。在项目中有个点击排序的功能调试了许久,终寻因,总结之。 需求是这样的,页面有个 table,有一列的上下箭头可点击并排序。对于这种需求,我的 mybatis.xml 的 SQL 配置写成了如下: 123<if test="map.......

Java 垃圾回收(GC)机制

一、为什么要进行垃圾回收 随着程序的运行,内存中存在的实例对象、变量等信息占据的内存越来越多,其中有很多对象再也用不到,这些用不到的对象就被称之为垃圾,如果不及时进行垃圾回收,必然会带来程序性能的下降,甚至会因为可用内存不足造成一些不必要的系统异常。 垃圾回收机制主要是对 JVM 中堆内存进行管理,如果对 JVM 相关的概念还不了解,可以看一看《JVM......

JVM 从入门到出门

一、JVM 是什么 Java 是一种跨平台的语言,这是大家都知道常识。但是 Java 源文件是不能直接运行的,而是需要将 Java 源文件编译成一种“中间码”——字节码,但是字节码也是不能直接运行,字节码是需要在 Java 虚拟机(Java Virtual Machine,简称 JVM)上运行。同时由于每个系统平台都有自己的 JVM,所以 Java 语......