自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

程序老兵的博客

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

  • 博客(188)
  • 资源 (8)
  • 问答 (1)
  • 收藏
  • 关注

原创 在Scrapy中启动shell来调试

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

2017-11-23 16:44:56 2823

原创 常见的Python 2 和 3 差别

Python2.7print "hello"helloPython3.0print "hello" File "tmp.py", line 1 print "hello" ^SyntaxError: invalid syntax正确应为: Python3.0print("hello")helloPython2.7print {}.keys()[]Pyth

2017-10-30 11:20:30 2140

原创 理解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 22278 10

原创 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/AssertTests run: 2, Failures: 1, Errors: 0, Skipped: 0[INFO

2017-09-17 10:13:15 3475

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

ant design官方网站:ant.design 介绍:这里蚂蚁金服出的一款框架,提供了桌面版和移动版两大块。移动版的首页是:https://mobile.ant.design/index-cn。 应用者:蚂蚁金服、阿里巴巴、口碑、滴滴 Framework7官网:framework7.taobao.org 介绍:出处看官网域名便知。Framework7 是一个开源免费的框架可以用来开发混合

2017-09-12 16:39:51 11737

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

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

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

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

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

2017-08-28 20:43:01 2681

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

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

2017-08-21 16:44:19 3121

原创 hessian简单示例

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

2017-07-26 09:03:41 601

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

最近优化WMS系统的供应商协同平台,一切很顺利。就在该里程碑快结束时,有了新的需求。 由于月对帐单是通过HTML表格形式展示给供应商看的,供应商纷纷表示这样非常不错,沟通及交互非常高效, 但是。。。。 但是。。。。 在打印时,格式很难调整,能不能转换成WORD或PDF文档的形式打印呢? 得寸进尺啊。。。。。。 于是搜索了一下网上的解决方案,找到了强大的wkhtmltopdf。 以下记录

2017-07-09 17:32:34 9233 1

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

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

2017-06-15 22:05:10 1006

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

一、启动顺序当我们经过BIOS引导,并选择了Linux作为准备引导的操作系统后,接下来的执行顺序如下:1、加载并执行内核第一个被加载的东西就是内核。然后把内核在内存中解压缩,就可以开始运行了。2、/sbin/init进程init进程是接下来第一个被启动运行的(非内核进程),因此它的进程编号PID的值总是1。 2.1 首先,init进程读取配置文件/etc/inittab,决定需要启动的运行级别(R

2017-06-06 10:59:53 25343 1

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

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

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

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

本例采用mysql数据库,因此请先下载mysql-connection.jar众所周知,创建数据库连接需要消耗较多的资源,且创建时间也较长。如果网站一天100万PV(假设每个页面都有DB读取或修改操作),程序就需要创建100万次连接,极大的浪费资源。 事实上,同一时间需要创建数据库连接的请求数量并不多,一般几百个足够了。那么我们可以根据需要创建一个连接池,它负责分配、管理和释放数据库连接,它允许

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

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

BlockingQueue接口定义了一种队列,这种队列通常容量是提前固定(确定了容量大小)的。容量满时往BlockingQueue中添加数据时会造成阻塞,容量为空时取元素操作会阻塞。我们可以认为BlockingQueue队列是一个水库。水库满了的时侯,上游的水就要被拦住,不能再往水库里灌了。平时农庄浇灌,生活饮用都用这里面的水。如果水库干了,那么要灌溉的工人只能等着上游放水后,才能继续工作。 实际

2017-05-07 15:25:58 2966

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

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

2017-05-07 15:19:49 1331

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

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

2017-05-07 15:17:15 1303

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

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

2017-05-04 21:03:28 1581

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

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

2017-05-04 21:00:14 1647

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

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

2017-05-04 20:56:33 1380 1

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

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

2017-05-04 20:52:32 3860

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

我们知道Runable()是无法直接返回值的。如果某个线程想获取另一个线程中变量的值,怎么办呢? Java为我们提供了一种处理模式——Future模式: 线程A(生产者)处理一个很耗时的工作,将会生产出一个结果。线程B(消费者)可以随时拿线程A的结果进行下一步处理。同时线程B(消费者)可以获取线程A的任务运行状态,也可以取消线程A的任务运行。 打个比喻:你到千吉买月饼,千吉收钱后给你开了一张月

2017-05-04 20:47:07 1006

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

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

2017-04-28 17:17:14 996

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

摘录网上一些文章什么是CASCAS,Compare and Swap即比较并交换。 java.util.concurrent包借助CAS实现了区别于synchronized同步锁的一种乐观锁。乐观锁就是每次去取数据的时候都乐观的认为数据不会被修改,所以不会上锁,但是在更新的时候会判断一下在此期间数据有没有更新。 CAS有3个操作数:内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存

2017-04-28 17:14:30 860

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

在Java中,i++这类的操作看起来只有一行,其实java 分成了三步去做 1、获取i值 2、计算i+1; 3、将结果存入i; 因此i++不是原子操作,非线程安全的,多线程访问的时候需要用到synchronized关键字保持线程同步。synchronized是悲观锁,在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,代价就是效率低下。 更加高效的锁就是乐观锁,所谓乐观锁就是不

2017-04-28 17:11:05 4574

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

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

2017-04-28 17:03:20 2479

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

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

2017-04-28 16:53:54 1371

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

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

2017-04-28 16:50:17 1024

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

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

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

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

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

2017-04-28 16:42:13 1140

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

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

2017-04-28 16:39:55 7600 3

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

在了解volatile之前,先介绍一个名词:liveness failure ,直译叫作活性失败。因为这是volatile很重要的一个应用场景:public class volatileDemo { private static boolean stopFlag; public static void main(String[] args) throws InterruptedExc

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

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

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

2017-04-28 16:34:45 835

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

开始之前,有几点要理解的: 1、当程序运行的时侯,系统默认开启了一个主线程(假设命名mainThread)。通常我们在Main()函数中定义主线程的工作。 2、可以在Main()函数中启动多个子线程:Thread-1,Thread-2,Thread-3等。 3、主线程有可能比子线程先结束运行。第三点是关键,这也是要用到join()方法的一个重要原因,因为有时侯我们希望主线程等待子线程执行完成之

2017-04-28 16:31:24 1859

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

java的基本锁类型,都以接口形式出现,常用的有以下两种锁的接口:Lock锁。它的实现有ReentrantLock, ReentrantReadWriteLock.ReadLock, ReentrantReadWriteLock.WriteLockReadWriteLock锁。它的实现有ReentrantReadWriteLock。一、lock简单使用方法1、Lock锁基本都是排他锁,它和s

2017-04-28 16:07:30 996 1

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

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

2017-04-28 16:03:55 2156

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

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

2017-04-28 15:59:08 895 3

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

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

2017-04-28 15:52:44 9974

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

本篇摘录了网上相关文档和图片。 VM启动时会有一个由主方法Main所定义的主线程,在主线程中可以通过Thread创建其它线程。 Thread对象的方法run()称为线程体。通过调用Thread类的start()方法来启动一个线程。 通俗的说就是在run()方法中定义要做什么事情,start()方法用来发出命令可以开始做了,但这不代表JVM会立即运行 run()方法中的内容,而只是让他具备运行的

2017-04-28 15:50:06 2853

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

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

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

wkhtmltox 最新版 0.12.4 linux64位组件包(含wkhtmltopdf,wkhtmltoimage)

一款用于将HTML转换成PDF或IMAGE的工具,当前最新版 0.12.4 linux64位组件包(含wkhtmltopdf,wkhtmltoimage)

2017-07-09

Mybatis自动生成代码用到的组件包

Mybatis generator 自动生成代码用到的组件包

2017-03-21

mybatis与spring整合jar包

mybatis与spring整合jar包

2017-03-21

mybatis-3.3.0.zip

mybatis-3.3.0.zip

2017-03-21

深入理解Java虚拟机(第二版):JVM高级特性与最佳实践

深入理解Java虚拟机,啥也不说了,重要的是免费!!非扫描版的!网上根本找不到!

2017-01-25

Druid 1.0.9.jar

使用阿里巴巴druid数据库链接池时需要的jar包! 下载别人的亲测可用,免费提供。 Druid是一个JDBC组件,它包括三部分: DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系。 DruidDataSource 高效可管理的数据库连接池

2017-01-23

java 核心知识集合

java 核心知识集合 归纳各种JAVA开发涉及到的一些核心问题,有助于开发成长

2011-11-16

WEB开发示例:MVC + Flexigrid

WEB开发示例:MVC + Flexigrid

2009-11-30

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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