梧桐和风的博客

岁月如旅行,好坏是风景

再谈生产者消费者模式与阻塞队列

再谈生产者消费者模式与阻塞队列 前言 在Wait/Notify通知机制解析文章中,介绍了生产者消费者模式及其应用,而阻塞队列的自身特点也适合生产者消费者。本文即探讨如何一步步用阻塞队列构建生产者、消费者模式。 使用普通队列 使用普通队列构建生产者消费者最需要考虑的问题是,如何保证队列在添加、移除操作时的线程安全。我们本例使用Lock/Condition机制确保。 从实现来说,...

百万英雄类答题游戏的程序员打开方式

百万英雄类答题游戏的程序员打开方式 看了《程序员如何玩转《冲顶大会》?》大受启发,刚好前几天研究了下微信跳一跳的辅助,正好可以用上。 思路很明确,把答案截图pull过来,通过OCR识别成文字后再放到百度搜索。记过几番尝试后,一些容易搜索的问题还是是可以搜索答案的。 目前它是手动的,也就是说每次答案出现,手动执行脚本返回答案。同样由于个别题目原因(如某个词有多少笔画),不是每次都能搜出来...

微信跳一跳辅助原理浅析

教你自己实现跳一跳辅助

微信跳一跳辅助原理浅析 前言 本文从原理和算法的角度(参考https://github.com/wangshub/wechat_jump_game的实现)探讨怎样实现跳一跳的辅助,做到知其然还要只其所以然。尽量使一个没任何外挂经验的任何语言的普通人也能做出辅助来。当然如果你只打算刷分的话,那本文可能没什么帮助了。(另外,本教程只针对android) 原理介绍 原理其实很简单,棋子跳跃...

AbstractQueuedSynchronizer整体解析

AbstractQueuedSynchronizer整体解析 前言 在此之前,我们深入源码分析过ReentrantLock系列,在那里就探讨过AbstractQueuedSynchronizer(下称AQS)类,称其是同步组件乃至整个并发包的基础类。这篇文章就深入AQS,从AQS的角度了解同步器以及ReentrantLock、ReentrantReadWriteLock等的实现机制,实现...

Wait/Notify通知机制解析

Wait/Notify通知机制解析 前言 我们知道,java的wait/notify的通知机制可以用来实现线程间通信。wait表示线程的等待,调用该方法会导致线程阻塞,直至另一线程调用notify或notifyAll方法才可另其继续执行。经典的生产者、消费者模式即是使用wait/notify机制得以完成。在这篇文章中,我们将深入解析这一机制,了解其背后的原理。 线程的状态 在了解wa...

ElasticSearch笔记二:5.x版本变化

ElasticSearch笔记系列

写在前面:去年写的有关Elastic的一些知识是基于2.x版本的,目前最新的版本是5.6(2017-10),一些重要的API与用法已经发生改变。这篇文章在之前系列的基础上,重点从API角度讲讲变化的部分。 一、映射的变化 string类型变为为text/keyword 变化最大的是ES的基本类型string。目前string类型已标为废弃的,取而代之的变成了 text/keyw...

快速排序(QuickSort)实践

算法简介 快速排序(Quicksort)是对冒泡排序的一种改进算法。由C. A. R. Hoare在1960年提出。该算法使用广泛、效率很高,是最重要的排序算法之一。 该算法的实现基本可分为以下几步: 在数组中选一个基准数(通常为数组第一个)。 将数组中小于基准数的数据移到基准数左边,大于基准数的移到右边 对于基准数左、右两边的数组,不断重复以上两个过程...

HttpUrlConnection类体系解析

背景介绍 关于HTTP协议 HTTP 协议是目前 Internet 上使用得最多、最重要的协议。该协议为典型的请求-响应模型。客户端建立连接并发送请求,服务端接受并处理请求,再发送应答,再由客户端接受并处理应答。浏览器是最常见的一种客户端,它将用户的交互行为作为http请求发送,并接受服务端的应答,再将应答内容展示,一般应答都是html类型的超文本。 在某些情况下,我们会使用java程...

多级选择组件解决实践

问题描述 这里的多级选择组件问题,指的是存在一个多级的选择组件,当点击某个节点时,该节点及其下的所有节点都要选中,若该节点并列的所有兄弟节点都已选中,则其父节点也要勾选,依此到最顶端节点。反选也类似逻辑。 这个问题也符合平日的认知习惯。如下图所示: 如点新华区,则其下所有街道都要选中,再点击桥西区,桥西区下的街道要选中,同时石家庄市这个节点要选中。若再点击廊坊市这个节点,则整...

java代理模式与JDK代理

前言 代理模式是很常用的设计模式之一,一般可分为静态代理和动态代理两类。java利用反射也对动态代理提供了支持。今天我们就来学习学习。 1. 定义 给某一个对象提供一个代理,并由代理对象控制对原对象的引用,称为代理模式。它是一种对象结构型模式。 即可理解为,某个对象实例(记为Subject)不方便直接引用,我们就提供一个代理实例(记为Proxy),让这个代理实例去调用实例对象...