自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

程序老兵的博客

用来整理我的知识碎片,也希望帮到他人。只要往前走,就不会迟。精疲力尽的时侯应该选择休息,切不可放弃。...

原创 在Scrapy中启动shell来调试

在Scrapy中写爬虫时,有时想在spider运行到某个位置时暂停,查看被处理的response, 以确认response是否是期望的。这可以通过 scrapy.shell.inspect_response 函数来实现。以下是如何在spider中调用该函数的例子:import scrapyclas...

2017-11-23 16:44:56 2084 0

原创 常见的Python 2 和 3 差别

Python2.7print "hello"helloPython3.0print "hello" File "tmp.py", line 1 print "hello" ^ ...

2017-10-30 11:20:30 1554 0

原创 理解Python协程:从yield/send到yield from再到async/await

Python中的协程大概经历了如下三个阶段: 1. 最初的生成器变形yield/send 2. 引入@asyncio.coroutine和yield from 3. 在最近的Python3.5版本中引入async/await关键字一、生

2017-10-27 10:16:20 16735 5

原创 maven项目test报错Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin

今天导入一个原来的maven项目,项目上右键运行JUnit Test,可以通过测试,但是运行mvn test时,报错: Results :Failed tests: twm.camera.core.OutPutStringTest.testPrint(): org/junit/AssertT...

2017-09-17 10:13:15 2718 0

原创 热门移动端H5开源前端开发框架搜集整理

ant design官方网站:ant.design 介绍:这里蚂蚁金服出的一款框架,提供了桌面版和移动版两大块。移动版的首页是:https://mobile.ant.design/index-cn。 应用者:蚂蚁金服、阿里巴巴、口碑、滴滴 Framework7官网:framework7.ta...

2017-09-12 16:39:51 8175 0

原创 配置Android Studio的缓存文件路径(释放你的C盘)

Android Studio默认安装完后会在C:\Users\YourName.xxx 缓存一些数据,有限的C盘很容易爆增。 如果你的C盘也像我这样捉襟见肘,或者你是处女座的,那么请看完本文,结果会让你超爽。 土豪请绕道。。。Android Studio默认的缓存目录,主要有三个占空间的文件夹...

2017-09-11 15:35:49 24562 7

转载 Android native和h5混合开发几种常见的hybrid通信方式

传统的JSInterface首先先介绍一下最普通的一种通信方式,就是使用Android原生的JavascriptInterface来进行js和Java的通信。具体方式如下: 首先先看一段html代码<html xmlns="http://www.w3.org/1999/xhtml...

2017-08-28 20:43:01 1791 0

转载 微服务架构框架选择:Spring Cloud 和 Dubbo对比

知乎转载楼层1: 从项目的背景来看,Dubbo 国内用的公司挺多,国内影响力大,Spring Cloud 自然在国外影响力较大,所以这个来看不分伯仲了,毕竟都有大公司在使用。 从社区的活跃度来看,可以看下各自的Github托管项目来区分。Dubbo · GitHub 与 Spring Clou...

2017-08-21 16:44:19 2456 0

原创 hessian简单示例

创建一个对外接口public interface Basic { String hello(String name); String say(String msg); int sum(int a,int b); }实现该接口并继承HessianServletpublic cla...

2017-07-26 09:03:41 461 0

原创 wkhtmltopdf:html转pdf、html转image以及cannot connect to X server问题解决

最近优化WMS系统的供应商协同平台,一切很顺利。就在该里程碑快结束时,有了新的需求。 由于月对帐单是通过HTML表格形式展示给供应商看的,供应商纷纷表示这样非常不错,沟通及交互非常高效, 但是。。。。 但是。。。。 在打印时,格式很难调整,能不能转换成WORD或PDF文档的形式打印呢? ...

2017-07-09 17:32:34 6757 0

原创 mysql slave创建:mysqldump参数--master-data

在恢复mysql从库时,通常我们把mysql从库利用从主库dump下来的文件恢复完成后,就需要确定binlog文件和position位置,调用change master to开启从库。 那么如何确定position位置呢? 网上很多告诉你先到master库show master status查...

2017-06-15 22:05:10 632 0

原创 Linux启动顺序、运行级别及开机启动

一、启动顺序当我们经过BIOS引导,并选择了Linux作为准备引导的操作系统后,接下来的执行顺序如下:1、加载并执行内核第一个被加载的东西就是内核。然后把内核在内存中解压缩,就可以开始运行了。2、/sbin/init进程init进程是接下来第一个被启动运行的(非内核进程),因此它的进程编号PID的...

2017-06-06 10:59:53 18092 0

转载 开源SDK实现Android视频直播

最近一段时间,视频直播可谓大火。在视频直播领域,有不同的商家提供各种的商业解决方案,包括软硬件设备,摄像机,编码器,流媒体服务器等。本文要讲解的是如何使用一系列免费工具,打造一套视频直播方案。视频直播流程视频直播的流程可以分为如下几步: 采集 —>处理—>编码和封装—>推流到服...

2017-06-02 12:03:52 13242 2

原创 从零开始实现Java多线程数据库连接池(附一个神秘的问题)

本例采用mysql数据库,因此请先下载mysql-connection.jar 众所周知,创建数据库连接需要消耗较多的资源,且创建时间也较长。如果网站一天100万PV(假设每个页面都有DB读取或修改操作),程序就需要创建100万次连接,极大的浪费资源。 事实上,同一时间需要创建数据库连接的请求数...

2017-05-25 16:54:17 15839 15

原创 Java多线程/并发26、阻塞队列BlockingQueue

BlockingQueue接口定义了一种队列,这种队列通常容量是提前固定(确定了容量大小)的。容量满时往BlockingQueue中添加数据时会造成阻塞,容量为空时取元素操作会阻塞。我们可以认为BlockingQueue队列是一个水库。水库满了的时侯,上游的水就要被拦住,不能再往水库里灌了。平时农...

2017-05-07 15:25:58 2511 0

原创 Java多线程/并发25、Exchanger线程数据交换

Exchanger用于线程间的数据交换。它提供一个同步点,在这个同步点两个线程可以交换彼此的数据。 这句话说到两个关键点: Exchanger只能用于两个线程互相交换数据。如果有三个线程呢?对不起,臣妾做不到…… Exchanger会产生一个同步点。一个线程先执行到达同步点,就会阻塞,等到另一个...

2017-05-07 15:19:49 1080 0

原创 Java多线程/并发24、Countdownlatch应用以及与CyclicBarrier的区别

有时候会有这样的需求:多个线程同时工作,其中几个可以随意的并发执行,但有一个线程需要等其他线程工作结束后,才能运行。举个例子,我们知道的迅雷下载,会同时开启多个线程分块下载一个大文件,每个线程下载固定的一段,最后由另外一个线程校验并拼接这些分段。这种场景可使用CountDownLatch来控制并发...

2017-05-07 15:17:15 1052 0

原创 Java多线程/并发23、循环屏障CyclicBarrier

CyclicBarrier 直译叫循环屏障或循环分界点。让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续工作。打个比方,F1大奖赛共5支车队参赛。第一站:上海站。比赛马上要开始了,各个车队都在准备,但是先到达起跑线准备就绪的车...

2017-05-04 21:03:28 1176 0

原创 Java多线程/并发22、信号量Semaphore

Semaphore通常用于设置一些资源(如数据库连接池,程序某个变量)可供线程使用的数量,它有两个很常用的方法是acquire()和release()。打个通俗的比方:一个饭店有10间包房,客人消费前先到前台领一张包房券(调用一次acquire 包房券-1),进入包房用餐直到酒足饭饱后,再到前台退...

2017-05-04 21:00:14 1243 0

原创 Java多线程/并发21、利用Condition来实现阻塞队列

Java文档上的例子,利用Condition来实现阻塞队列。 假设有一个固定大小的缓冲区(缓冲区是队列,遵守FIFO),支持存和取方法。如果缓冲区为空时尝试取数据,那么线程将阻塞,直到缓冲区有一个可用的数据;如果缓冲区满了,这时尝试写数据,那么线程将被阻塞直到有可用空间。我们希望有两个独立的等待...

2017-05-04 20:56:33 1093 0

原创 Java多线程/并发20、Future实现类:FutureTask

FutureTask是future的实现类,它同时实现了两个接口:Runnable和Future,所以它既可以作为Runnable被线程执行,又可以作为Future得到Callable的返回值。因此我们可以: - 调用FutureTask对象的run()方法执行 - 调用FutureTas...

2017-05-04 20:52:32 2720 0

原创 Java多线程/并发19、Callable、Future接口及CompletionService的应用

我们知道Runable()是无法直接返回值的。如果某个线程想获取另一个线程中变量的值,怎么办呢? Java为我们提供了一种处理模式——Future模式: 线程A(生产者)处理一个很耗时的工作,将会生产出一个结果。线程B(消费者)可以随时拿线程A的结果进行下一步处理。同时线程B(消费者)可以获取...

2017-05-04 20:47:07 685 0

原创 Java多线程/并发18、Java线程池

用过数据库的,都了解连接池概念。为了减少建立连接的开销,预先建立好多条连接,由连接池对象统一管理。当有进程需要连接数据库时,就分配一条空闲的连接给它,用完再被收回等待分配给下一个进程使用。 线程池的概念也一样,根据设置预先创建好一些线程,需要时就分配给你,使用完再收回,这样就不用老是去new T...

2017-04-28 17:17:14 842 0

原创 Java多线程/并发17、简述CAS 操作

摘录网上一些文章什么是CASCAS,Compare and Swap即比较并交换。 java.util.concurrent包借助CAS实现了区别于synchronized同步锁的一种乐观锁。乐观锁就是每次去取数据的时候都乐观的认为数据不会被修改,所以不会上锁,但是在更新的时候会判断一下在此期...

2017-04-28 17:14:30 733 0

原创 Java多线程/并发16、Atomic原子变量和原子操作

在Java中,i++这类的操作看起来只有一行,其实java 分成了三步去做 1、获取i值 2、计算i+1; 3、将结果存入i; 因此i++不是原子操作,非线程安全的,多线程访问的时候需要用到synchronized关键字保持线程同步。synchronized是悲观锁,在多线程竞争下,加锁、...

2017-04-28 17:11:05 3797 0

原创 Java多线程/并发15、保持线程间的数据独立:ThreadLocal应用

文档上(http://docs.oracle.com/javase/7/docs/api/java/lang/ThreadLocal.html)这么写的 This class provides thread-local variables. These variables differ ...

2017-04-28 17:03:20 1643 0

原创 Java多线程/并发14、保持线程间的数据独立:ConcurrentHashMap应用

在Java 1.5之前,如果需要可以在多线程和并发的程序中安全使用的Map,只能在HashTable和Collections.synchronizedMap中选择,因为它们的put、reomve和containsKey方法都是同步的。我们熟知的HashMap不是线程安全的,因此在多线程环境下开发不...

2017-04-28 16:53:54 925 0

原创 Java多线程/并发13、保持线程间的数据独立: Collections.synchronizedMap应用

现在流行分布式计算,分布式计算就是先分开计算,然后统一汇总。比如这道题目: 。先别跑,小学题很简单的。 解释一下,左边那一砣是计算从1加到n的值(求和),右边是n乘到1的值(阶乘),再把两个值相加得到最终结果。假设求和运算需要5秒钟,阶乘运算需要7秒钟,相加的运算需要1秒,那么总耗时是13秒。...

2017-04-28 16:50:17 786 0

原创 Java多线程/并发12、多线程访问static变量

类的成员分为两类,静态成员(static member)和实例成员(instance member)。静态成员属于类;实例成员则属于对象,即类的实例。 先看一个类:public class staticDemo { static int result; static int Ad...

2017-04-28 16:46:05 8680 1

原创 Java多线程/并发11、线程同步通信:notify、wait

假设有两个线程,一个线程负责打印5次”Hello”,一个线程负责打印5次”Word”。现在提出一个要求,要求两个线程交替打印,也就是要求Hello和Word交替出现。 我们先实现两个线程打印字符的功能。代码如下:package JConcurrence.Study; public class E...

2017-04-28 16:42:13 937 0

原创 Java多线程/并发10、不可重入锁/自旋锁、可重入锁

锁分为可重入锁和不可重入锁。 可重入和不可重入的概念是这样的:当一个线程获得了当前实例的锁,并进入方法A,这个线程在没有释放这把锁的时候,能否再次进入方法A呢? 可重入锁:可以再次进入方法A,就是说在释放锁前此线程可以再次进入方法A(方法A递归)。 不可重入锁(自旋锁):不可以再次进入方法A,也...

2017-04-28 16:39:55 6511 2

原创 Java多线程/并发09、浅谈volatile

在了解volatile之前,先介绍一个名词:liveness failure ,直译叫作活性失败。因为这是volatile很重要的一个应用场景:public class volatileDemo { private static boolean stopFlag; public s...

2017-04-28 16:37:34 1845 3

原创 Java多线程/并发08、中断线程 interrupt()

一个线程是否能让另一个线程停止运行?除了线程同步互斥机制之外,还有两种方法: 可以使用Thread.stop(), Thread.suspend(), Thread.resume() 和Runtime.runFinalizersOnExit() 这些终止线程运行的方法 。但这些方法已经被废弃(T...

2017-04-28 16:34:45 625 0

原创 Java多线程/并发07、Thread.Join()让调用线程等待子线程

开始之前,有几点要理解的: 1、当程序运行的时侯,系统默认开启了一个主线程(假设命名mainThread)。通常我们在Main()函数中定义主线程的工作。 2、可以在Main()函数中启动多个子线程:Thread-1,Thread-2,Thread-3等。 3、主线程有可能比子线程先结束运行...

2017-04-28 16:31:24 1396 0

原创 Java多线程/并发06、线程锁Lock与ReadWriteLock

java的基本锁类型,都以接口形式出现,常用的有以下两种锁的接口: Lock锁。它的实现有ReentrantLock, ReentrantReadWriteLock.ReadLock, ReentrantReadWriteLock.WriteLock ReadWriteLock锁。它的实现有Re...

2017-04-28 16:07:30 774 0

原创 Java多线程/并发05、synchronized应用实例:线程间操作共享数据

电商平台中最重要的一点就是卖东西。同个商品不能无限制的卖下去的,因为商品有库存量,超过库存就不能卖了。 这里,约定一个规则,下单使库存减n,取消订单使库存加m。库存数量不可以小于0。 假设平台上同时有很多用户在操作,在不考虑效率的情况下,我们用同步方法来模拟这个场景。首先写一个订单处理类:cl...

2017-04-28 16:03:55 1795 0

原创 Java多线程/并发04、synchronized同步

一、synchronized使用多个线程并发时,经常面临的问题就是会操作相同的资源。比如商品下单,库存量修改,转帐等。 举个例子: 家里有一口炒菜的锅,老大要做辣椒炒肉(制作步骤:a1.放肉,a2.放盐,a3.放辣椒),老二要做番茄炒蛋(制作步骤,b1.放蛋,b2.放盐,b3.放番茄)。两人把...

2017-04-28 15:59:08 703 1

原创 Java多线程/并发03、实现定时任务的3种方法

所谓定时任务有两个核心要素: 1、任务开始时间:可以指定任务在将来某个时间点运行,或者指定任务从现在开始延迟一个时间段运行 2、任务执行周期:可以指定该任务每间隔多久执行一次Java实现定时任务有三种方法:一、利用Thread及Sleep实现,通过while循环让其不停运行public cla...

2017-04-28 15:52:44 7315 0

原创 Java多线程/并发02、线程的五种状态

本篇摘录了网上相关文档和图片。 VM启动时会有一个由主方法Main所定义的主线程,在主线程中可以通过Thread创建其它线程。 Thread对象的方法run()称为线程体。通过调用Thread类的start()方法来启动一个线程。 通俗的说就是在run()方法中定义要做什么事情,start(...

2017-04-28 15:50:06 1134 0

原创 Java多线程/并发01、新建线程的3种方法

引子首先要理解并发(Concurrency)和并行(Parallelism)的区别: 并发是在同一时段发生。多线程就是分时利用CPU,宏观上让所有线程一起执行,也叫并发。但在微观上不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行。这就好像两个人用同一把铁锨,轮流挖坑,一小时后,两个人...

2017-04-28 15:46:35 1546 1

提示
确定要删除当前文章?
取消 删除