- 博客(50)
- 资源 (2)
- 收藏
- 关注
原创 Java JVM内存结构,区域划分
先贴一个网上还有一些书上用的很多的一张图:我们平时多多少少都知道java内存结构主要由堆 和 栈 两部分组成。可见这是我们平时最关系的两个部分。先引用一下《深入理解Java虚拟机》一书中的解读:我们平时所说的堆就是上图中画的堆(Heap)。而我们平时说说的栈指的是上图的虚拟机栈(VM Stack)那我们先看一下Java内存最主要的这两部分,虚拟机栈(VM Stack
2015-11-19 22:26:32 1164
原创 linux java cpu 100%问题排查
一、通过jdk自带包里面的工具1.通过top找出cpu高的PID可以通过ps aux | grep PID可以更详细的看到这个进程到底是什么项目2.top -H -pPID 找到cpu占用率比较高的线程tid3.其次将需要的线程ID转换为16进制格式:printf “%x\n” tid4.通过jstack查看这个线程现在在执行的东西jstack pid |grep tid -A 5...
2020-02-29 18:18:12 4575 1
原创 Hadoop部署流程
Hadoop部署流程一、版本号2.6.5二、安装目录/mnt/Hadoop/Hadoop-2.6.5三、先决条件Java环境正常运行四、部署步骤4.1. 编辑/mnt/hadoop/hadoop-2.6.5/etc/hadoop/hadoop_env.sh#配置JAVA_HOMEexport JAVA_HOME=/mnt/jdk/jdk1.7.0_80...
2018-03-24 15:16:44 1012
原创 HBase部署流程
一、版本号1.1.1二、安装路径/mnt/hadoop/hbase-1.3.1三、先决条件Java、Hadoop环境正常运行四、 部署步骤4.1. 编辑/mnt/hadoop/hbase-1.3.1/conf/hbase-env.sh#配置JAVA_HOMEexport JAVA_HOME=/mnt/jdk/jdk1.7.0_804.2. 编辑/mn...
2018-03-24 15:09:39 406
原创 Hive整合HBASE部署流程
一、 版本号2.1.1二、安装目录/mnt/hadoop/hive-2.1.1三、 先决条件Java环境、Hadoop环境、HBase环境(如果需要读/写HBase的数据表)正常运行四、部署步骤1、配置环境变量 /etc/profileexport HIVE_HOME=/mnt/hadoop/hive-2.1.1export PATH=$PATH:$HIVE...
2018-03-24 15:07:09 781
原创 HashSet剖析
对于 HashSet 而言,它是基于 HashMap 实现的,HashSet 底层采用 HashMap 来保存所有元素public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable { // 使用 HashMap 的 key 保存 HashSet
2016-11-24 17:03:01 533
原创 ios UITextView placeHolder效果
我们知道UITextView没有像UITextField一样的placeholder属性。 但是我们通过如下方法让UITextView实现一样的效果1.给UITextView添加初始化默认文字,当成placeholder,并且颜色设置成灰色2.ViewController实现UITextView的代理UITextViewDelegateclass yourUIViewController:UIVi
2016-11-24 09:42:24 642
原创 LinkedHashMap剖析
一、结构 LinkedHashMap的结构和HashMap一样都由数组和链表构成 区别: 1.LinkedHashMap多了两个指针head,tail,分别指向第一个插入Map中的节点和最后一个插入Map中的节点/** * The head (eldest) of the doubly linked list. */transient LinkedHashMap.Entry h
2016-11-13 16:31:21 602
原创 HashMap剖析
JAVA1.6版本一、HashMap结构图 可以看出1.HashMap是一个数组+链表的结构,数组的下标在HashMap中称为Bucket值,每个数组项对应的是一个List2.每个List中存放的是一个Entry对象,这个Entry对象是包含键和值的二、HashMap存放对象的流程HashMap使用put(key,value)函数存放对象,当调用put(key,value)方法的时候会发生以
2016-11-10 20:39:40 2912 3
原创 Java equals和HashCode方法总结
一、如果是自定义类的equals()方法如果是自己定义的一个类,比较自定义类用equals和==是一样的,都是比较句柄地址,因为自定义的类是继承于object,而object中的equals就是用==来实现的 源码:public boolean equals(Object obj) { return (this == obj); } 二、String,Double,Integer
2016-11-09 00:34:58 708
原创 swift init()函数总结
swift初始化函数总结一、很多情况下init方法并不是必须的let常量可以用=号赋值好var变量,可以先设置为nil(注意nil也是一个值)属性可以用闭包给它初始化一个值通过lazy机制class Test{ let a = "" var b : UIView!//X为nil,并不需要在初始化类时给它赋具体的值 var c = {return "c"} l
2016-11-04 23:24:56 5239
原创 JAVA线程池全解
我们都知道线程池有很多好处: 通过重复利用已经创建好的线程,可以减少创建线程时的资源消耗。 如果不限制线程的数量,不仅会大量消耗系统内存,还会照成系统的不稳定。 使用线程池,可以控制线程的数量,还可以对所有线程进行统一的管理,好处不言而喻。
2016-01-17 22:52:45 1048
原创 Java Volatile
volatile的原理Java内存模型对volatile专门定义了一些特殊的访问规则。 我们用通俗的语言解释一下:保持立即可见性当一个变量定义为volatile后,若一条线程修改了这个变量的值,新的值对于其他线程是立即可知的。 引用《java并发编程实战》的描述: 当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是时时共享的,volatile变量不会被缓存在寄存器或者对
2016-01-16 23:54:08 578
原创 《java并发编程实战》读书笔记——并发应用
1.使用线程池当应用需要处理多个任务时,例如一个Web服务器处理它接收到的请求,可以使用线程池。通过重用现有的线程而不是创建新的线程,可以在处理多个请求时分摊在线程创建和销毁过程中产生的巨大开销。另一个好处是,当一个请求到达时,工作线程通常已经存在,因此不会由于等待创建线程而延时任务的执行,从而提高响应性。通过适当调整线程池的大小,可以创建足够多的线程以便使处理器保存忙碌状态,同时
2016-01-06 22:11:10 1524
《java并发编程实战》读书笔记——基础知识(二)
1.同步容器的替代者同步容器类包括 Vector和HashTable,以及使用Collections.synchronizedXxx等工厂方法创建的同步类。这些同步容器类的特点是:每个公有的方法都进行同步,使得每次只有一个线程能够访问容器的状态。同步容器类的问题:由于只是在类中的每单个函数上进行了同步,那么在进行需要多个函数参与的复合操作的时候,比如“若没有则添加”,就会出现问题。
2016-01-01 20:38:43 255
原创 《java并发编程实战》读书笔记——基础知识
1。Servlet是非线程安全的。2。当代码逻辑的正确性取决于多个线程的交替执行的时序时,就会出现竞争条件。3。如果只是将每个方法都作为同步方法,例如Vector,那么不足以保证Vector上的复合操作都是原子的。4。内存可见性问题。...
2016-01-01 13:52:32 787
原创 《java并发编程实战》读书笔记——线程池
饱和策略1.“终止”策略,默认策略:该策略将抛出 RejectedExecutionException。当无法放入队列中时,抛弃该任务。2.“调用者运行”策略:当任务队列满时。将下一个提交上来的任务,交给调用ExecutorService来执行任务的主线程来执行,而不再通过ExecutorService线程池来执行这个任务由于执行任务需要一定的时间,因此
2015-12-06 20:41:20 779
转载 Linux通过PID查看进程完整信息
通过ps及top命令查看进程信息时,只能查到相对路径,查不到的进程的详细信息,如绝对路径等。先通过top查看进程PID这时,我们需要通过以下的方法来查看进程的详细信息:Linux在启动一个进程时,系统会在/proc下创建一个以PID命名的文件夹,在该文件夹下会有我们的进程的信息,其中包括一个名为exe的文件即记录了绝对路径,通过ll或ls –l命令即可查看。
2015-11-30 16:21:35 125770 1
原创 JAVA垃圾收集机制
一。哪些内存需要回收: java使用的不是引用计数法。如果两个对象互相引用,引用计数不为0,那么就无法回收这些对象。java使用的是:可达性分析(Reachability Analysis),这个算法的思想是通过一系列的称为“GC Roots”的对象作为起点,从这些起点开始往下搜索,搜索走过的路径称为引用链,当一个对象到GC Roots没有任何的引用链,相连接时,则
2015-11-19 23:03:34 1105
翻译 MQTT常见问题
What is MQTT?MQTT stands for MQ Telemetry Transport. It is a publish/subscribe, extremely simple and lightweight messaging protocol, designed for constrained devices and low-bandwidth, high-latenc
2015-11-19 22:44:07 7331 1
原创 Java ConcurrentHashMap分析
今天项目里面出现了一个bug.原因是在多线程的环境下使用了HashMap。HashMap是一个非线程安全的类。举一个例子,在多线程中,如果有当一个线程在遍历HashMap时,另一个线程执行了put或者remove操作会发生ConcurrentModificationExceptionpublic class TestHashMap { public static void ma
2015-11-17 20:38:31 775
原创 java线程池学习(六) —— 线程池的合理配置
一、确定线程数在工作中,为了加快程序的处理速度,我们需要将问题分解成若干个并发执行的任务。接着我们将这些任务委派给线程,以便使它们可以并发的执行。但是需要注意的是,由于资源所限,我们不能创建过多的线程。这就涉及到一个 确定创建多少线程数才是合理 的问题。 《java虚拟机并发编程》一书中,对这个问题有详尽的解答,本人在此摘取归纳如下:1.我们可以先获取到系统可用的处理器核心数:Ru
2015-10-04 20:26:59 6179
原创 java线程池学习(五) —— ThreadPoolExecutor源码分析
通过前面的章节,我们学习了可以通过ThreadPoolExecutor来创建一个线程池。那么接下来我们分析一下ThreadPoolExecutor的源码,看看它具体是如何工作的。我们看一下使用execute(Runnable task)执行一个任务的时候,到底发生了什么(代码进过简化):先简单描述一下这个流程:当我们先线程池提交一个任务的时候。检查当前线程池中存活线程数
2015-10-04 17:10:36 1297
原创 java线程池学习(四) —— Executors类
上一章我们介绍了ExecutorService接口,以及它的实现类ThreadPoolExecutor。那么这里我们将介绍Executors类,它可以更进一步的简化我们的工作,直接创建一些预定义过的线程池这个类也在java.util.concurrent包下。它有如下的几个比较常用的创建线程池的方法:一:newFixedThreadPool创建一个线程可重用的并且线程数固定的线
2015-10-03 23:46:21 1379
原创 java线程池学习(三) —— ThreadPoolExecutor
上一篇文章中我们自己写了一个简单的线程池。这一篇文章我们来了解一下java为我们提供的线程池实现—— ExecutorService接口它位于jdk的java.util.concurrent包下。JDK提供了这么两个类来实现这个接口:ThreadPoolExecutorScheduledThreadPoolExecutor我们这篇文章只介绍一下ThreadPoo
2015-10-03 19:34:25 3617 1
原创 java线程池学习(二) —— 实现一个简单的线程池
在上一篇文章中《java线程池学习(一) —— BlockingQueue》,我们简单探讨了一个BlockingQueue的概念。那么在这边文章,我们要利用BlockingQueue来自己实现一个简单的线程池,在以后的章节中,我们再学习一下怎么去使用java为我们封装好的线程池。首先我们关注一个 “生产者消费者” 的情况。生产者:不断产生新的需要解决的任务,比如查询数据库,执行某些业务
2015-10-03 17:01:29 4127
原创 使用Node.js开发一个在线聊天应用——编写前台
创建一个Chat.js,把它放在我们上一章说到的建立的那个public目录下面。chat.js的代码如下:window.onload = function() { var messages = []; var socket = io.connect('http://localhost:3700'); var field = document.ge
2015-04-24 14:45:40 1047
原创 使用Node.js开发一个在线聊天应用——编写后台
现在开始编写这个聊天程序后台:好,现在我们先从一个简单的服务端程序开始,先简单的生成这个程序的HTML页面然后我们再开始更有趣的部分:实时通信。首先我们一个用expressjs创建一个index.js文件:var express = require("express");varapp = express();varport = 370
2015-04-21 10:07:11 1698
原创 使用Node.js开发一个在线聊天应用——准备工作
Nodejs给我了能用我最喜欢的语言JavaScript编写后台代码的能力。Nodejs是编写实时程序一个非常棒的技术在这篇文章中我将展示如何用Nodejs,SocketIO和Expressjs编写一个实时聊天程序1.安装node.js2.使用nodejs写一个helloworld测试一下
2015-04-17 14:06:50 1280
原创 《java并发编程实战》读书笔记——避免死锁的发生
我们使用加锁机制来确保线程安全,但如果过度地使用加锁,则可能导致锁顺序死锁。当一个线程永远地持有一个锁,并且其他线程都尝试获得这个锁时,那么他们将永远被阻塞。在数据库系统的设中考虑了检测死锁以及从死锁中恢复。但它检测到一组事务发生了死锁时(通过在表示等待关系的有向图中搜索循环),将选择一个牺牲者并放弃这个事务JVM在解决死锁问题方面并没有数据库服务那样强大。当一组线程发生死锁时,“游戏”将
2015-03-25 13:50:30 1171
原创 WebSphere配置数据库连接池
WebSphere配置数据库连接池websphere server.xml:<dataSource connectionSharing="MatchCurrentState" id="DB2DS" isolationLevel="TRANSACTION_READ_COMMITTED" jdbcDriverRef="DB2DRIVER" jndiName="jdbc/d
2015-02-25 19:22:57 3227
原创 单点登陆
三、iText生成pdf byte流单点登录(Single Sign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。CAS(Central Authentication Service)是一款不错的针对 Web 应用的单点登录框架,本文介绍了 CAS 的原理、协议、在
2015-02-05 16:29:37 888
原创 工作记录
工作中遇到一个问题 double+double 经常得出一些意想不到的的结果:比如:package test;public class Test { public static void main(String[] args) { double a = 1.1; double b = 2.45; double c = a+b; System.out.println(
2015-01-16 17:28:24 1028
原创 计算机基础:原码、补码、反码
最近工作中用到了,补码的概念,发现这些概念脑子里全糊了翻出书简单复习一下,归纳如下:首先我们讨论的都是有符号数,第一位都是符号位 正0 负1原码:最简单明了x=+1101 [x原码]=0,1101x=-1101 [x原码]=1,1101这里注意下原码0有两种表示法+0原码:0,0-0原码:1,0补码:为什么要有补
2015-01-16 10:27:56 4169
cas单点登录server端代码
2015-03-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人