自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

jiq•钦's technical Blog

学习 -> 记录 -> 分享

  • 博客(369)
  • 收藏
  • 关注

转载 程序员应该关注的一些事儿

英文原文:Things a Software Developer Must Invest In在下面这些事情中付出你的时间和精力,然后期待着好的结果吧。0.  关注你的健康毫无疑问,软件开发是一项最需要久坐的工作之一,每天在电脑前要坐 8 到 16 个小时,中间几乎没有休息,这就很容易长肉。而肥胖很很可能会引起其它的疾病,心脏病就是其中一种严重的疾病。当然,你可以通过一些锻炼避免它,比如花点儿钱去

2016-05-29 13:02:15 5888

转载 10年资深猎头揭露:他们为什么能年薪百万

360总裁周鸿祎微博推荐语:网络上有一篇文章很流行,《10年资深猎头:他们为什么年薪百万?》作者不详,但我觉得是牛人。用薪酬判断一个人价值,俗点,但却是一个通世标准。价值高的人,眼光和能力必有高人之处。古语说,锥刺囊中。但锥子是磨出来的。清明小长假,建议大家抽空看一看,想一想,转一转。   10年资深猎头揭露:他们为什么能年薪百万!?   --摘自网络   1、解决问题时的逆向思维能力   面对工

2016-04-17 14:16:12 4704

转载 百度员工离职总结:资质平庸的人该怎么办?引人深思!

版权信息|作者:泰然野孤禅 来源:第一职场网公众号天赋秉异的人永远是少数,剩下的都是资质平庸的芸芸众生。相信即使只是普通人,也有一颗不甘于平庸的心。那么资质平庸的人该如何在职场上做出一番成就呢?其实以大多数人的努力程度之低,根本轮不到拼天赋。你需要的是比别人更加熟悉职场的规则、遵守规则、利用规则,这个过程也是“被社会与职场的规律驯化”的过程。“被驯化”是无法避免的,只有熟悉“游戏规则”,才能更好地

2016-04-17 14:12:23 4440 1

原创 【PM】信息化系统软件开发流程

软件开发生命周期 建议采用迭代方式,即详细设计->测试的迭代,概要设计阶段会提取出所有需要开发的功能点,这些功能点将会按照优先级被划分为3-4个阶段,每个迭代阶段都会进行详细设计、编码和测试,然后与用户见面进行修正。所有迭代过程结束之后,再进入整体集成测试、实施以及最后的维护阶段。 1 需求调研和分析         最终出具《需求调研报告》。需求调研步骤一览:

2015-06-15 22:49:48 3857

原创 【PM】软件项目管理流程和方法

即将迎来自己人生中第一份软件项目管理工作,先搜集相关知识整理出一个我决定采用的软件项目管理方法,在实践的同时慢慢完善。看到这篇文章并且有自己的经验和见解的大虾欢迎指正和交流,我们要做的这个是企业信息化管理软件转载请注明出处:jiq•钦's technical Blog项目管理流程需求调研阶段n  立项和可行性分析n  需求收集、整理深入一线和用户交流,获取最原始需求

2015-03-15 19:34:36 2734

原创 分布式注册中心Overview

转载请注明出处:jiq•钦's technical Blog 版权所有 author by 季义钦一、 动机当前我们已经全面进入到分布式应用时代,后端已经开始全面服务化,根据职责拆分为多个子系统,并且以廉价服务器集群进行支撑。  但是在这样一种架构下: 1、 减轻配置灾难:服务、网站、FTP服务器、数据库、公共组件等资源的配置信息,以及一些全局的系统配置参数

2015-02-10 13:37:45 5380 5

原创 客户端代理架构图分享

下面是我设计的一个客户端代理的架构图,主要完成以下功能:1、异步消息通知;2、耗时任务处理;在这个架构中包括注册中心,用于服务的动态注册和发现,以及配置信息的管理。

2014-09-21 20:36:04 3273

原创 Ubuntu下Eclipse无法添加Tomcat7解决方法

Ubuntu(Linux)下在eclipse中add一个tomcatserver时发现tomcat7无法选择,但是该tomcat已经在eclipse 的server->runtime environment总配置了,这是为什么呢?可能有两个原因:1 当前用户没有针对tomcat目录的执行权限2 该tomcat本身在Terminal中就无法正常启动,比如因为无法找到JAVA_HOME,JRE_HOM

2016-06-23 10:32:06 4492

转载 Web服务器份额排行榜

根据W3Techs最新公布的数据,Apache依然是一哥,但Nginx已崭露头角,目前在Web服务器领域有了一定的地位。 在排名前1000的网站中,Nginx占据了将近三分之一的席位(29.1%),已经取代了IIS(仅为12.7%)第二名的位置。当然,Apache还是当之无愧的老大,占39.1%。这表明,大型网站更愿意使用开源的web服务器。Google服务器也有8.2%的份额。  在排名前100

2016-06-19 23:07:35 6628 1

原创 JVM:类加载器之双亲委派模型

虚拟机中加载类需要经历“加载、验证、准备、解析和初始化”五个阶段。其中加载阶段是“通过一个类的全限定名来获取描述此类的二进制字节流”,实现这个动作的代码模块称为“类加载器”。(一)三种系统提供的类加载器JVM类加载器分为两类,一类是启动类加载器BootStrap ClassLoader,由C++语言实现,是JVM的一部分,一类是其他类加载器,由Java语言实现,独立于虚拟机外部,并且都继承自抽象类

2016-04-25 23:41:18 6869

原创 Java并发:主线程等待多个子线程执行完才继续执行

主线程等待多个子线程执行完才继续执行,以下是我能想到的几种方法,欢迎讨论、指正。1.闭锁CountDownLatch闭锁是典型的等待事件发生的同步工具类,将闭锁的初始值设置为与子线程数目相同,每个子线程执行完成都调用CountDown()方法,主线程调用await()方法等待计数值变为零之后恢复继续执行。 2.线程间同步方法假设有N个子线程,每个子线程执行完成都将一个全局的原子变量加1,待某个线程

2016-04-24 22:11:09 16355 2

原创 Java并发:等待事件发生后所有线程继续执行

等待某一个指定的事件发生后,才让多个等待的线程继续执行,以下是我能想到的几个方法,欢迎讨论、指正。1.闭锁CountDownLatch闭锁是典型的等待事件发生的同步工具类,将闭锁的初始值设置1,所有线程调用await方法等待,当事件发生时调用countDown将闭锁值减为0,则所有await等待闭锁的线程得以继续执行。 2.阻塞队列BlockingQueue所有等待事件的线程尝试从空的阻塞队列获取

2016-04-24 22:09:39 9809

原创 Java IO:BIO和NIO区别及各自应用场景

引言BIO:同步阻塞式IO,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。NIO:同步非阻塞式IO,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。下面通过一个例子解释两者区别:假设当前服务

2016-04-20 22:57:29 18011

原创 RHEL7安装部署Tomcat7

文章说明:分布式注册中心(链接)需要安装的组件包含两个部分:1、注册中心服务(Zookeeper)2、网站(Tomcat服务器) 此文档摘自分布式注册中心安装部署的Part-2安装环境:[root@localhost etc]# cat/etc/redhat-release RedHat Enterprise Linux Server release 7.0 (Maipo)[root@localh

2016-04-20 20:49:13 8314

原创 RHEL7安装部署ZooKeeper

安装环境:[root@localhost etc]# cat/etc/redhat-release RedHat Enterprise Linux Server release 7.0 (Maipo)[root@localhost etc]# uname -aLinuxlocalhost.localdomain 3.10.0-123.el7.x86_64 #1 SMP Mon May 5 11:1

2016-04-20 20:42:35 7600

原创 RHEL7安装部署RabbitMQ

安装环境: RHEL(RedHat Enterprise Linux 7),预计CentOS也一样一 安装RabbitMQ步骤1:安装RPM包:rpm -ivh erlang-18.2-1.el7.centos.x86_64.rpmrpm -ivh rabbitmq-server-3.2.4-1.noarch.rpm步骤2:把端口全部打开:firewall-cmd --add-port=25672

2016-04-20 20:38:06 9857

原创 Java并发:多线程和java.util.concurrent并发包总结

引言前面已经针对Java多线程框架中具体的点介绍了很多了,现在是需要一个概括性总结的时候了,正好从网上找到一张描述java.util.concurrent包组成结构的类图,正好可以对java多线程有一个概览性总结。以下图片转自:这里

2016-04-17 22:13:08 11992

原创 JVM:内存监视手段及各区域内存溢出解决

引言本文仅关注一些常见的虚拟机内存监视手段,以及JVM运行时数据区各个部分内存溢出的发生和对应的解决方案,总体来说属于概括性总结,涉及相对不是很深入,目的是让自己和其它初学者有一个框架性、概念性的了解,当遇到问题时有迹可循、不至于不知所措。一、虚拟机内存监视手段虚拟机常出现的问题包括:内存泄露、内存溢出、频繁GC导致性能下降等,导致这些问题的原因可以通过下面虚拟机内存监视手段来进行分析,具体实施时

2016-04-17 02:36:53 15696 2

原创 JVM:垃圾回收机制和调优手段

我们都知道JVM内存由几个部分组成:堆、方法区、栈、程序计数器、本地方法栈JVM垃圾回收仅仅针对公共内存区域即:堆和方法区进行。本文主要讨论两点,一是垃圾回收策略,二是调优的方法。一、垃圾回收机制1.1 分代管理将堆和方法区按照对象不同年龄进行分代:u  堆中会频繁创建对象,基于一种分代的思想,按照对象存活时间将堆划分为新生代和旧生代两部分,我们不能一次垃圾回收新生代存活的对象就放入旧生代,而是要

2016-04-15 00:14:30 12708 3

转载 Java基础:运行时异常和非运行时异常

1.Java异常机制Java把异常当做对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类。Java中的异常分为两大类:错误Error和异常Exception,Java异常体系结构如下图所示:2.ThrowableThrowable类是所有异常或错误的超类,它有两个子类:Error和Exception,分别表示错误和异常。其中异常Exception分为运行时异常(Ru

2016-04-10 01:24:56 6131

原创 JVM:class加载时机及两种显示加载的区别

从下面代码可以看出来几点:1、 class文件的加载的时机显示加载:         调用ClassLoader.loadClass(className)与Class.forName(className)隐式加载:         创建类对象         使用类的静态域         创建子类对象         使用子类的静态域 2、 两种显示加载class文件到JVM的区别Class.f

2016-04-08 00:04:01 6447 1

原创 Java基础:String不可变性和final修饰

String的不可变性Java规定String是不可变的(immutable),其实这个不可变具备两层含义:1 内容不可变任何看起来修改它们的操作,实际上都是重新new出一个对象。String s = new String("111");String newS = s;newS = "dsfsd";System.out.println(s); //111如果不能做到内容不可变,在两个引用同

2016-04-07 00:39:00 5042

转载 UML类图符号解释

在UML类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)         1. 泛化(Generalization)        【泛化关系】:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征

2016-04-06 00:31:23 3319

转载 设计模式类图概览

把常见的设计模式类图放在这里,方便查阅!!!

2016-04-06 00:26:46 3544

转载 Java7新特性一览

转自:点击这里官方:点击这里Swing新增 JLayer 类,是一个灵活而且功能强大的Swing组件修饰器,使用方法:How to Decorate Components with JLayer.Nimbus Look and Feel 外观从 com.sun.java.swing 包移到 javax.swing 包中,详情:javax.swing.plaf.nimbus更轻松的重量级和轻量级组件

2016-04-04 23:48:28 2599

原创 Java并发:原子变量和非阻塞同步机制

一、互斥锁互斥锁虽然能够保障内存可见性和原子性,保障共享数据的安全访问,但是作为一种较为粗暴的同步机制,有很多缺点:1.      悲观锁:每次拿数据都会先加锁,降低代码并发度。2.      上下文切换开销大:线程的挂起和恢复需要很大的开销,并且存在较长时间的中断3.      优先级反转:当一个线程在等待一个锁时不能做其他事情,如果持有锁的线程被延迟执行,如发生缺页错误,调度延迟等,那么将导致

2016-04-04 21:59:21 3033

原创 Java并发:await/wait 与sleep、yield间的区别

(1)是否释放锁:调用sleep和yield的时候不释放当前线程所获得的锁,但是调用await/wait的时候却释放了其获取的锁并阻塞等待。 (2)调用后何时恢复:u  sleep让线程阻塞,且在指定的时间之内都不会执行,时间到了之后恢复到就绪状态,也不一定被立即调度执行;u  yield只是让当前对象回到就绪状态,还是有可能马上被再次被调用执行。u  await/wait,它会一直阻塞在条件队列

2016-04-03 22:48:29 22593

原创 Java并发:线程间同步机制:条件队列和同步工具类

线程之间的同步,除了互斥(前面介绍的互斥锁)之外,还存在协作关系,下面我们就介绍一下java线程间常见的一些协作方式。一、内置条件队列正如每个Java对象都可以作为一个内置锁,每个对象也可以作为一个条件队列,称为内置条件队列,Object.wait()、notify()/notifyAll()构成了内置条件队列的API。需要注意的是,调用任何对象X的内置条件队列的API都必须要先获得该对象X的内置

2016-04-03 15:34:32 2141

原创 Java并发:线程安全的容器:同步和并发

转载请注明出处:1. 引言多线程环境正确发布共享数据的方法之一就是线程安全容器。线程安全的容器是由锁保护的域,将数据放入线程安全的容器中,可以保障其被安全地发布给所有从这个容器访问它的线程。2. 同步容器类JDK1.0开始有两个很老的同步容器类:Vector和HashTable。JDK1.2之后Collections工具类中添加了一些工厂方法返回类似的同步封装器类:public static C

2016-03-31 22:20:00 3934

原创 Java并发:互斥锁和读写锁

互斥锁线程在进入同步代码块之前会自动获取锁,并且在退出同步代码块时会自动释放锁,当某个线程请求一个由其他线程持有的锁时,发出请求的线程就会阻塞。互斥锁其实提供了一种原子操作,让所有线程以串行的方式执行同步代码块。可重入性:某个线程试图获得一个已经由它自己持有的锁,那么这个请求就会成功(重复获取),这就叫互斥锁的可重入性。“重入”意味着获取锁的操作的粒度是“线程”,而不是调用,也就是说一个线程中可以

2016-03-29 22:59:06 8432 1

原创 Java并发:并发编程带来的好处和风险

并发编程之所以让人迷惑是因为有不止一种问题的解决需要使用并发,也有不止一种方法去实现并发,而且他们之间也没有清晰的映射。使用并发编程来解决的问题可以划分为两类,即“speed”和“designmanageability”。 一、速度优势:多处理器:多处理器上面并发变成无疑会让程序运行很快。单处理器:如果是单处理器的机器,那么并发编程可能相对于顺序编程没有什么变化。但是,如果其中某一个任务也许会发生

2016-03-29 00:31:15 3235

原创 Java并发:终止线程和关闭线程池

一、任务的取消1.1标志位class ThreadOne implements Runnable{ public volatile boolean isComplete = false; @Override public void run() { while(!isComplete) { } } }这种方

2016-03-29 00:09:18 34799 2

原创 Java并发:三种线程抽象以及线程执行

在Java 5之后,任务分两类:一类是实现了Runnable接口的类,一类是实现了Callable接口的类。两者都可以被ExecutorService执行,但是Runnable任务没有返回值,而Callable任务有返回值。此外还有一个FutureTask任务类型以拓展Runnable和Callable。一、Runnable任务抽象考虑一个处理客户端请求的服务器程序:1.1 Thread方式通常我

2016-03-27 18:15:58 1847

原创 Java并发:可重入与线程安全

转载请注明出处:jiq•钦'stechnical Blog1函数的可重入性:函数可重入,意味着该函数可以同时由多个任务调用,而不会产生任何错误。可重入的函数不需要考虑线程安全问题,因为其不会引用任何共享数据。 可重入函数需满足几个条件:1、不能含有静态(全局)非常量数据2、不能返回静态(全局)非常量数据的地址。 3、只能处理由调用者提供的数据。4、不能依赖于单实例模式资源的锁。 5、不能调用不可重

2016-03-27 02:27:43 1456

原创 Java并发:如何编写线程安全的代码

转载请注明出处:jiq•钦'stechnical Blog一切线程安全问题都是源自于不正确的共享数据导致。方式一:编写可重入代码编写可重入代码,即编写那些压根不会共享数据的代码。编写可重入代码包括借助线程本地存储这一特性:线程本地存储* 是一种自动化机制,可以为使用同一个变量的所有线程都创建一个各自不同的存储。 * 最主要的是,他可以使得你将状态与线程关联起来。private static Thr

2016-03-27 02:24:08 1405

原创 Java并发:线程安全的单例模式

转载请注明出处:jiq•钦'stechnical Blog1、饿汉式public class Singleton {  private final static Singleton INSTANCE = new Singleton();  private Singleton() { }  public static Singleton getInstance() {     return INST

2016-03-26 22:40:36 1344

原创 Java并发:volatile内存可见性和指令重排

转载请注明出处:jiq•钦'stechnical Blogvolatile两大作用1、保证内存可见性2、防止指令重排 此外需注意volatile并不保证操作的原子性。内存可见性1 概念         JVM内存模型:主内存和线程独立的工作内存Java内存模型规定,对于多个线程共享的变量,存储在主内存当中,每个线程都有自己独立的工作内存(比如CPU的寄存器),线程只能访问自己的工作内存,不可以访问

2016-03-26 22:34:56 15542 5

转载 TCP SYN攻击

部分内容转自这里一、三次握手建立连接和四次握手断开连接建立TCP需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示:【注意】 在TIME_WAIT状态中,如果TCP client端最后一次发送的ACK丢失了,它将重新发送。TIME_WAIT状态中所需要的时间是依赖于实现方法的。典型的值为30秒、1分钟和2分钟。等待之后连接正式关闭,并且所有的资源(包括端口号)都被释放。【问题1】为

2016-03-25 00:00:56 1672

原创 自己理解的“数据库事务隔离级别”

转载请注明出处: jiq•钦's technical Blog - 季义钦引言:在网上搜了很多关于事务的文章,感觉单独来看都很难看懂,所以综合自己的理解写一篇我自己能理解的关于关系型数据库事务的文章。一、事务特征我们都知道数据库事务具备ACID特性:Atomic(原子性):一个事务要么成功,要么失败Consistency(一致性):一致性代表了底层数据存储的完整性。事务执行前后数据库都必须处于一个

2016-03-24 00:24:04 3113

原创 多个进程能否监听同一个端口号?

我们都知道socket是网络上两个进程之间的双向通信链路, 即socket = A进程的IP地址:端口号  B进程的IP地址:端口号。 那么有个问题就很有意思了,不同的进程可以监听在同一个IP地址:端口号么?根据Unix网络编程中的知识可知,服务端监听一个端口会经历:1、根据套接字类型(Ipv4,Ipv6等)创建套接字socket2、将套接字bind绑定到具体的网络地址和端口号3、调用liste

2016-03-22 22:58:55 23636 3

空空如也

空空如也

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

TA关注的人

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