Java生产者与消费者

实现生产者消费者模型,可以使用阻塞队列,或者使用 Object 类里自带的 wait() 和 notify() 或者 notifyAll() 的消息通知机制。 实现 wait()/notify() 接下来我们需要重点看下这个通知机制。 wait() 和 notify() 都是 Java 中的 Object 类自带的方法,可以用来实现线程间的通信。 在上一节 讲的 11 个 APIs 里我也提到了它,我们这里再展开讲一下。 wait() 方法是用来让当前线程等待,直到有别的线程调用 notify() 将它唤醒,或者我们可以设定一个时间让它自动苏醒。 调用该方法之前,线程

Java并发之CAS原理分析

CAS(Compare-and-Swap),即比较并替换,是一种实现并发算法时常用到的技术,Java并发包中的很多类都使用了CAS技术。 什么是CAS CAS(compare and swap) 比较并替换,比较和替换是线程并发算法时用到的一种技术 CAS是原子操作,保证并发安全,而不是保证并发同步 CAS是CPU的一个指令 CAS是非阻塞的、轻量级的乐观锁 为什么说CAS是乐观锁 乐观锁,严格来说并不是锁,

HTTPS讲解

在正式开始讲解https之前我们还得先搞清楚两个概念:什么是对称加密,以及什么是非对称加密? 这两个概念都是属于加密学中的基础知识,其实非常好懂。 对称加密和非对称加密 对称加密比较简单,就是客户端和服务器共用同一个密钥,该密钥可以用于加密一段内容,同时也可以用于解密这段内容。对称加密的优点是加解密效率高,但是在安全性方面可能存在一些问题,因为密钥存放在客户端有被

Hugo、githubpages搭建自己的网站

安装hugo 直接官网 安装,windows下载的是一个压缩包,解压下来就能使用,不过要把该路径配置到环境变量里。 检查安装 hugo version 使用hugo 创建站点 hugo new site [your site name] 下一步是选择主题,我的主题是LoveIt 。 将该主题增加到网站的配置文件config.toml中,这样才能生效: 'theme = "hermit" 测试下是否成功,运行: $ hugo serve 增加文章 hugo new posts/my-first-post.md 这会在 content/posts 目录下生成一个 my-first-post.md 文件,里面内容如下: --- title:

bitmap使用

什么是bitmap Bit-map的基本思想就是用一个bit位来标记某个元素对应的Value,而Key即是该元素。由于采用了Bit为单位来存储数据, 因此在存储空间方面,可以大大节省。(PS:划重点 节省存储空间 ) 假设有这样一个需求:在20亿个随机整数中找出某个数m是否存在其中,并假设32位操作系统,4G内存 在Java中,int占4字节,1字节=8位(1 byte = 8 bi

域名解析cname和A记录

什么是域名解析 域名解析就是国际域名或者国内域名以及中文域名等域名申请后做的到IP地址的转换过程。IP地址是网路上标识您站点的数字地址,为了简单好记,采用域名来代替ip地址标识站点地址。域名的解析工作由DNS服务器完成。 什么是A记录 A (Address) 记录是用来指定主机名(或域名)对应的IP地址记录。用户可以将该域名下的网站服务器指向到自己的web server上。同时也可以设

转发与重定向

Redirect 重定向是指当浏览器请求一个URL时,服务器返回一个重定向指令,告诉浏览器地址已经变了,麻烦使用新的URL再重新发送新请求。 例如,我们已经编写了一个能处理/hello的HelloServlet,如果收到的路径为/hi,希望能重定向到/hello,可以再编写一个RedirectServlet: @WebServlet(urlPatterns = "/hi") public class RedirectServlet extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 构造重定向的路径: String name = req.getParameter("name"); String

vmvare虚拟机centos网络配置

第一步:重置虚拟网络设置 VMWARE->编辑->虚拟网络编辑器-> 还原默认设置 NAT设置 记住: 子网掩码和网关IP。 还原后的默认值即可以 设置静态IP vi /etc/sysconfig/network-scripts/ifcfg-ens33 ifcfg-ens33 这个名字,每个人的电脑网卡不一样,可以从ifconfig 查看到。 这里还要设置DNS,直接取物理机的DNS即可;通过 ifconfig /all 重启网络服务 systemctl restart network

LRU的JAVA实现

什么是LRU算法? LRU是Least Recently Used的缩写,即最近最久未使用,是一种操作系统中常用的页面置换算法。 知道了什么是LRU后,我们再来聊下它的使用场景 在工作中,对于Redis我们一定是比较熟悉的,它是一个内存数据库;因为它是内存数据库,并且内存的空间是有限的,如果Redis中数据量很大的话,内存就可能被占满,但是此时如果还有数据存入Redis的话,那该怎