- 博客(67)
- 收藏
- 关注
原创 docker安装zookeeper和kafka
docker search zookeeperdocker search kafkadocker pull wurstmeister/zookeeperdocker pull wurstmeister/kafkazookeeper启动命令docker run -d -p 2181:2181 --name zookeeper wurstmeister/zookeeper:latest启动后可以通过docker logs kafka命令查看启动的状态kafka启动命令link模式连zooke
2020-09-26 17:45:30
1179
1
原创 ConcurrentHashMap1.8源码和同步机制
1. ConcurrentHashMap几个重要概念2. ConcurrentHashMap的get操作详解3. ConcurrentHashMap的插入操作详解4. ConcurrentHashMap的链表转红黑树5. ConcurrentHashMap的扩容操作详解6. ConcurrentHashMap的同步机制详解首先谈默认参数:MAXIMUM_CAPACITY = 1 << 30 最大元素容量DEFAULT_CAPACITY = 16 默认初
2020-09-22 14:37:15
611
原创 SpringBoot 2.x 整合redis
Spring boot 2.x 默认整合redis客户端为lettuce。Lettuce 和 Jedis 的都是连接Redis Server的客户端程序。Jedis在实现上是直连redis server,多线程环境下非线程安全,除非使用连接池,为每个Jedis实例增加物理连接。Lettuce基于Netty的连接实例(StatefulRedisConnection),可以在多个线程间并发访问,且线程...
2019-09-23 20:47:52
518
2
原创 Maven安装与命令详细介绍
目录 1 .安装Maven 2 .命令集合 3 .参数集合1,安装Maven官网下载对应的安装包:https://maven.apache.org/download.cgiwindows安装:1,解压安装包2,添加环境变量3,验证安装是否成功4,修改maven setting.xml liunx安装:1.解压tar -zxvf xxx.tar.gz2,...
2019-09-21 16:39:32
923
原创 Java堆——Tlab分析,介绍
首先谈java对象的创建我们在语言层面上,创建一个对象仅仅是一个new关键字可以解决的。但是在JVM层面上是怎么创建一个对象的呢??当 jvm 遇到 new 指令 1,检查指令的参数能否在常量池中定位到一个类的符号引用。并检查这个符号引用所代表的类是否已经被加载,解析,初始化过。 2,没有,就进行相应的类加载。 3,类加载完成后就知道对象所需内存大小,为对象进行内存空间分配,在将...
2018-08-25 19:03:43
1562
原创 通过Condition实现wait与指定线程notify
Object 的 wait / notify / notifyAll 几个方法可以实现对线程的挂起和唤醒。ReentrantLock 也可以,不过要借助我们的 Condition 条件监视器,而且 Object 唤醒部分县城是随机唤醒,Condition 使得线程唤醒是可控的,可以指定唤醒部分线程。 首先我们用 ReentrantLock 和 Condition 实现 Object 中对应的...
2018-08-15 19:41:32
1431
原创 通过demo对比了解Volatile的实现
Volatile的定义 volatile可以保证线程可见性且提供了一定的有序性,但是无法保证原子性。在JVM底层volatile是采用“内存屏障”来实现的。 上面的定义有两层含义: 1,保证共享变量的可见性,但无法保证原子性 2,防止指令重排Volatile的可见性 一个变量如果用volatile修饰了,则Java可以确保所有线...
2018-08-15 14:32:28
1106
原创 调用wait,notify,sleep方法对锁资源的处理
我们知道wait和sleep方法可以将一个线程阻塞的目的。wait是将线程从Running变为waiting,直到被notify或者notifyAll,才会将线程从waiting状态变成Runnable状态。sleep是在一段时间内将线程从Running变为waiting,时间过去之后,线程进入Runnable状态。 在状态转换的时候,锁资源发生什么变化呢?首先我们用一个dem...
2018-08-14 19:22:43
742
原创 ReentrantReadWriteLock源码分析,java8
一,关系简介二, 实现 2.1 Sync的成员变量 2.2 构造器 2.3 lock() 2.4 ReadLock.lock()流程图关系简介 在这个关系很乱的UML图中,我们可以发现ReentrantReadWriteLock实现了ReadWriteLock接口,内部类有Sync(锁的实现),NonfairSync,FairSync公平锁与非公平锁,Wr...
2018-08-14 14:54:28
448
原创 创建一个自己的数据库连接池
思路1,我的思想是,用一个链表对JDBC连接线程进行保存。这个链表中保存在执行的连接,当一个连接调用close方法的时候,也就证明此连接线程的生命正在走向终结,就将这个连接通过反射代理回收。在添加新的连接线程。 2,我们往线程池中获取连接的时候,getConnection就OK了。话不多说,直接上代码,对于反射和代理有过了解的,一看代码就明白,写的一个很简陋的连接池。 配置信息...
2018-08-10 21:44:35
1359
原创 聚簇索引和非聚簇索引的区别
引言 聚簇索引并不是一种索引类型,只是一种存储方式。当表有了聚簇索引的时候,表的数据行都存放在索引树的叶子页中。无法把数据行放到两个不同的地方,所以一张表只允许有一个聚簇索引。 索引使得大多数时候我们避免全表扫描,使数据的性能有一定的提高。而聚簇索引的影响力也是很大的。我们熟悉的Myisam和innodb两大引擎,innodb的默认数据结构是聚簇索引,而Myisam是非聚簇索引。 ...
2018-08-09 17:50:29
3974
原创 解读可重入锁——ReentrantLock&AQS,java8
1 , ReentrantLock简介 首先我们可以查看ReentrantLock类,实现了Lock接口,其内部类都直接或者间接的继承了AQS类,则AQS肯定与ReentrantLock关系密切 我们来个demo,让大家更直接的了解重入锁: 2, 构造器MyReentrantLock是为了写自己理解的注释,改了一下类名 /** * Reen...
2018-08-03 21:31:07
999
原创 java十六进制转为byte类型
借用Integer类型转换byte c = Integer.valueOf("ca",16).byteValue();byte c = (byte) Integer.parseInt("ca", 16);直接强转byte b = (byte)0xca;
2018-07-24 18:17:47
2121
原创 配置SpringMVC拦截器实现用户权限认证
实现HandleInterceptor接口public class AuthorizedInterceptor implements HandlerInterceptor { /** 定义不需要拦截的请求 */ private static final String[] IGNORE_URI = {"/login","index.html"}; /** ...
2018-07-13 15:53:24
1361
原创 Web项目中使用log4j,指定日志输出文件
使用log4j在web项目中,需要打印日志到文件中。使用相对路径,默认的是相对于tomcat的bin目录下。顿时觉得很坑。寻找解决到相对于项目之下,踩了很多坑。最后决定自己实现配置加载处理,就不会出现什么问题。 使用servlet加载log4j配置,log4j只在项目启动加载一次,所以给servlet加load-on-startup为1就行我的log4j配置文件log4j.roo...
2018-07-12 19:34:58
2977
原创 Single Thread Execution 模式
概念Single Thread Execution 模式:就是在多线程执行时,对于共享资源的操作,当一个线程获取到共享资源的锁,并且没有释放锁的时候。其他线程无法使用共享资源。如果违背了这些原则,则会陷入死锁: - 具有多个锁参与其中 - 线程锁定一个锁没解除就去获得其他锁 - 线程获取这些锁的顺序不同但是只要打破其中一个就会避免死锁 共享资源Gate类...
2018-06-08 09:00:29
503
原创 Redis实现——链表
前言链表在Redis中的应用十分广泛,list底层实现采用的就是链表。还有发布与订阅,监视器等底层也是用到了链表。 实现Redis的链表是一种双端链表,在adlist.c和adlist.h实现 链表节点typedef struct listNode { // 前置节点 struct listNode *prev; // 后置节点 ...
2018-06-08 08:51:19
1116
原创 Redis实现——String类型(sds)
前言Redis底层是使用C语言实现的,对于字符串类型,其做出了改进,是一种基于动态字符串sds实现,redis作为数据库,查询必然多,修改也会有一定多,sds解决了C语言字符串动态扩展的不方便,以及查询长度操作从O(n)变为了O(1)。 sds相比C语言原始字符串最大优势在于空间预分配,惰性空间释放,性能得到很大提高 定义设计redis实现sds相关的redis源码文件...
2018-06-07 22:00:57
1858
原创 liunx(ping: unknown host)解决
可能是因为DNS设置问题。打开/etc/resolv.conf文件设置本地域名为: nameserver后面为域名,我是设置为百度的,备用域名为谷歌的domain localdomainsearch localdomainnameserver 180.76.76.76nameserver 8.8.8.8...
2018-05-13 15:42:29
665
原创 二叉搜索树(java实现)
目录 1 .插入元素思想与实现 2 .删除元素思想与实现 3 .完整代码 二叉搜索树定义二叉搜索树,也称有序二叉树,排序二叉树,是指一棵空树或者具有下列性质的二叉树:若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;任意节点的左、右子树也分别为二叉查找树。没有键值相等的...
2018-05-07 16:41:19
3434
1
原创 4个子线程计数,每个线程都计数25次
要求主线程执行在子线程执行之后。 这个很好办,子线程都设为不是守护线程然后处理4个子线程我们可以让每个线程向如下static class MyThread { public static void start(int begin, int step){ Thread t = new Thread(()-&gt;{ ...
2018-05-06 00:12:21
869
原创 Redis cluster集群发生(error)
(error) MOVED 14990 xxxxx:7003错误解决方法为 启动客户端加 -c参数
2018-04-28 15:39:59
799
原创 Jedis连接redis cluster集群
public static void main(String[] args) throws IOException{ Set<HostAndPort> jedisClusterNode = new HashSet<HostAndPort>(); jedisClusterNode.add(new HostAndPort("ip",7001));//添加对应机器的i...
2018-04-28 15:33:46
2597
原创 redis搭建高可用cluster集群
1 .在redis目录下新建文件夹mkdir cluster 2 .在cluster目录下创建机器节点目录,每个服务在不同的端口号运行的 我的配置了6个节点,分别执行端口号为7001~7006 3 .将配置文件redis.conf复制到各目录下cp redis.conf ../cluster/700x 4 .修改配置文件如果是单机操作,可以不注释...
2018-04-28 15:07:48
280
原创 安装gem与redis插件
插件下载地址:https://rubygems.global.ssl.fastly.net/gems/redis-3.2.1.gem 然后执行:gem install -l ./redis-3.2.1.gem很是心累,刚开始yum安装,发现ruby版本太低,不能下载插件,弄得我,把ruby和gem的yum安装全部删除了。全部源码安装,用了最新版本。yum卸载指令yum -y ...
2018-04-28 00:20:43
10162
原创 Rubygems安装
下载源码包源码下载地址 https://rubygems.org/pages/download 解压tar -zxvf rubygems-2.7.6.tgz转到目录下ruby setup.rb如果需要更新版本gem update
2018-04-28 00:13:29
5983
原创 Ruby安装
下载tar包Ruby源码包下载地址: http://www.ruby-lang.org/en/downloads/ 解压tar zxvf ruby-2.5.1.tar.gz转到解压目录依次执行./configure #检查包文件make && make install #编译源码,底层是由c写的 检查ruby -v...
2018-04-28 00:07:05
2007
原创 Servlet转向和重定向的区别
转向:请求转发是指将请求再转发到其他地址,转发过程中使用的是同一个请求,转发的地址栏内容不变。重定向:是指由原请求地址重新定位到某个新地址,原有的请求失效,客户端看到的是新的请求返回的相应结果。举例说明吧:转发过程: 客户端对servlet1容器发起请求,但是servlet1想让servlet2进行一波客户端请求处理,于是就调用servlet协作让servlet2进行处理。 重定...
2018-04-26 00:38:58
1421
原创 JSP与servlet区别
JSP JSP就是servlet(服务端小程序):实际上,JSP翻译得到的代码就是一个servlet,这说明,每个JSP页面实际上就是一个servlet。由于每个JSP都是一个servlet,所以,如果对servlet有所了解,并知道服务器如何处理servlet,这会很有帮助。由此我们可以认识另外一些同样适用于JSP的技术。 Servlet Servlet(Java服...
2018-04-25 23:33:31
334
翻译 在JSP中使用JavaBean
导入java类<%@page import="java类相对路径"%> 实例化java类<jsp:useBean id=“test” class=“java类相对路径” scope=“request”/> <jsp:useBean>:用于初始化JavaBean,或者定位一个已经存在的JavaBean实例,并把实例的引用赋给一个变量...
2018-04-25 00:24:45
944
翻译 JSP内置对象分别作用和重要方法
JSP为简化页面的开发提供了一些内部对象。这些内部对象不需要由JSP的编写者实例化,它们由容器(Tomcat context)实现和管理,在所有的JSP页面中都能使用内部对象。所有的内部对象只有对脚本或表达式有用,但在JSP声明中不可用。JSP里有以下内部对象:requestresponsepageContextoutsessionconfigpageexceptiona...
2018-04-24 23:52:01
552
原创 依赖注入3种方式(xml实现)
构造器注入构造器注入依赖于构造方法实现,而构造方法可以是有参和无参的比如有构造器为:public Test(String id,String name){ this.id = id ; this.name = name ;}xml配置可以为<bean id = "test1" class = "相对项目的路径"> <!--...
2018-04-22 23:50:42
1560
原创 Spring IOC的自我理解和实现过程以及生命周期
目录 1 .IOC 概述 2 .IOC容器的设计 3 .Spring IOC容器的定义和初始化 4 .Beand的生命周期 5 .IOC总结 IOC 概述IOC(控制反转):也是一个发布Bean的容器控制反转是个很抽象的东西,那就得了解谁控制谁?谁被反转了?控制:传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创...
2018-04-22 00:48:53
1533
原创 配置git和在idea中配置github
首先得安装好git,相信安装一个软件应该是很简单的事情 1 .git的本地配置首先通过ssh rsa算法生成密钥ssh -keygen -t rsa -C "xxx@163.com" //自己注册github账户绑定的邮箱然后配置个人信息git config --global user.name "username" //这里是使用github的用户名git c...
2018-04-19 18:03:36
1334
原创 HashMap使用对象作为key实现
HashMap在使用可变对象作为key是一件很危险的事情我们开始一个简单的实例class People{ private String name; private int age; public People(){ } public People(String name, int age) { this.name = name;...
2018-04-19 17:25:59
14069
2
原创 HashMap之Put方法解读
HashMap底层是使用Entry对象数组存储的,而Entry是一个单项的链表或者是红黑树。 下面是对HashMap的put源码的解读 final V putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict) { Node<K,V>[] tab...
2018-04-19 17:04:58
929
原创 创建HBase操作连接对象
通过Connection接口对Hbase数据库建立连接 private Connection connection; //建立一个表操作对象 Table table = connection.getTable(TableName.valueOf(tableName)); //建立一个数据库操作对象 Admin admin = connection.getAdmin();通过Con...
2018-04-18 21:41:57
1078
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人