<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[还是搬砖踏实]]></title><description><![CDATA[专注Java]]></description><link>https://blog.youkuaiyun.com/ifucking</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ifucking]]></copyright><item><title><![CDATA[Apache Ranger 1.1.0源码导入IDEA并运行调试security-admin web模块]]></title><link>https://blog.youkuaiyun.com/ifucking/article/details/81455087</link><guid>https://blog.youkuaiyun.com/ifucking/article/details/81455087</guid><author>ifucking</author><pubDate>Mon, 06 Aug 2018 20:32:22 +0800</pubDate><description><![CDATA[前言

Apache Ranger是什么，它是一个为Hadoop平台提供了全面的数据安全访问控制及监控的集中式管理框架，Apache顶级项目。不废话了，其实本篇没那么高大上，就是一步步教你如何将Ranger源码导入到IDEA，并运行调试其web模块。



导入源码


第一步当然是下载源码，这里选用了最新版1.1.0




git clone https://github.com/apache...]]></description><category></category></item><item><title><![CDATA[【JDK源码分析】线程池ThreadPoolExecutor原理解析]]></title><link>https://blog.youkuaiyun.com/ifucking/article/details/81364214</link><guid>https://blog.youkuaiyun.com/ifucking/article/details/81364214</guid><author>ifucking</author><pubDate>Sat, 04 Aug 2018 22:12:22 +0800</pubDate><description><![CDATA[前言

一般情况下使用线程池都是通过Executors的工厂方法得到的，这些工厂方法又基本上是调用的ThreadPoolExecutor的构造器。也就是说常用到的线程池基本用到的是ThreadPoolExecutor。ThreadPoolExecutor的大概原理是先规定一个线程池的容量，然后给提交过来的任务创建执行线程，任务执行完毕后放在池子中等待新的任务提交过来，当然ThreadPoolExe...]]></description><category></category></item><item><title><![CDATA[【JDK源码分析】同步工具Exchanger，它的内部实现原理你看懂了吗？]]></title><link>https://blog.youkuaiyun.com/ifucking/article/details/81263146</link><guid>https://blog.youkuaiyun.com/ifucking/article/details/81263146</guid><author>ifucking</author><pubDate>Sun, 29 Jul 2018 21:53:36 +0800</pubDate><description><![CDATA[前言

Exchanger应该算并发包中工具使用相对少的，因为它主要用于线程之间交换数据，它的用法比较简单在不同线程之间使用exchange方法交换数据，但是内部实现比较巧妙，使用了unsafe的CAS原子操作、自旋来解决冲突问题，下面我们通过源码一探究竟。



源码

先看看源码注释中关于核心算法的介绍



        for (;;) {
            if (slot is...]]></description><category></category></item><item><title><![CDATA[【JDK源码分析】并发包同步工具Semaphore]]></title><link>https://blog.youkuaiyun.com/ifucking/article/details/81229853</link><guid>https://blog.youkuaiyun.com/ifucking/article/details/81229853</guid><author>ifucking</author><pubDate>Fri, 27 Jul 2018 02:07:11 +0800</pubDate><description><![CDATA[前言

这次分析信号量Semaphore，为什么称之为信号量呢？是因为它可以控制同时访问某个资源的操作数量或是同时执行某个指定操作的数量。就好比它像一个租赁汽车的公司，租赁公司的汽车的数量是固定的，用完需要归还，用之前需要去租借（acquire 前提是还有可用的汽车），如果汽车都被租出去了，那只能等到别人归还了才能租到。它是基于AQS的共享锁来实现的，其中使用了较多的AQS的方法，所以在这之前最好...]]></description><category></category></item><item><title><![CDATA[【JDK源码分析】并发包同步工具CountDownLatch]]></title><link>https://blog.youkuaiyun.com/ifucking/article/details/81226853</link><guid>https://blog.youkuaiyun.com/ifucking/article/details/81226853</guid><author>ifucking</author><pubDate>Thu, 26 Jul 2018 23:15:48 +0800</pubDate><description><![CDATA[前言

CountDownLatch是一个闭锁实现，它可以使一个或者多个线程等待一组事件发生。它包含一个计算器，用来表示]]></description><category></category></item><item><title><![CDATA[【JDK源码分析】并发包同步工具CyclicBarrier]]></title><link>https://blog.youkuaiyun.com/ifucking/article/details/81193323</link><guid>https://blog.youkuaiyun.com/ifucking/article/details/81193323</guid><author>ifucking</author><pubDate>Tue, 24 Jul 2018 23:52:31 +0800</pubDate><description><![CDATA[前言

CyclicBarrier它是什么？一个同步辅助类，它允许一组线程互相等待，直到到达某个公共屏障点。类似于朋友之间联系要在中午聚个会，几个朋友全部到齐后才开始喝酒吃菜。



源码



CyclicBarrier属性和构造器

public class CyclicBarrier {
    // 互斥锁
    private final ReentrantLock lock = ne...]]></description><category></category></item><item><title><![CDATA[【JDK源码分析】通过源码彻底理解ReentrantLock显示锁]]></title><link>https://blog.youkuaiyun.com/ifucking/article/details/81183614</link><guid>https://blog.youkuaiyun.com/ifucking/article/details/81183614</guid><author>ifucking</author><pubDate>Tue, 24 Jul 2018 16:48:03 +0800</pubDate><description><![CDATA[前言

ReentrantLock和synchronized一样是一个可重入的互斥锁，但ReentrantLock功能更强大，它提供了非公平和公平两种锁争用策略供使用者选择，而synchronized只有非公平一种。ReentrantLock提供了可中断的锁等待机制以及可用于多组线程需要分组唤醒的条件。



类图

下面是ReentrantLock的类图，内部抽象类Sync继承了Abstract...]]></description><category></category></item><item><title><![CDATA[【JDK源码分析】通过源码深入分析AbstractQueuedSynchronizer]]></title><link>https://blog.youkuaiyun.com/ifucking/article/details/81154168</link><guid>https://blog.youkuaiyun.com/ifucking/article/details/81154168</guid><author>ifucking</author><pubDate>Sun, 22 Jul 2018 22:31:57 +0800</pubDate><description><![CDATA[前言

AbstractQueuedSynchronizer是并发包的核心基础类，它是构建阻塞锁和相关同步器（信号量、事件，等等）的框架，内部为FIFO队列，采用的是一种基于CLH锁队列修改的同步队列。引用他人对CLH的解释，CLH锁也是一种基于链表的可扩展、高性能、公平的自旋锁，申请线程仅仅在本地变量上自旋，它不断轮询前驱的状态，假设发现前驱释放了锁就结束自旋。

源码

1. 父类Abstra...]]></description><category></category></item><item><title><![CDATA[【JDK源码分析】深入理解ThreadLocal以及破坏它的线程隔离机制]]></title><link>https://blog.youkuaiyun.com/ifucking/article/details/81122557</link><guid>https://blog.youkuaiyun.com/ifucking/article/details/81122557</guid><author>ifucking</author><pubDate>Fri, 20 Jul 2018 02:09:33 +0800</pubDate><description><![CDATA[前言

众所周知ThreadLocal提供了线程局部变量，独立于变量的初始化副本。也就是ThreadLocal通过get或者set方法都是与当前线程相关联。



深入源码

set方法

    public void set(T value) {
        Thread t = Thread.currentThread();
        ThreadLocalMap map = ge...]]></description><category></category></item><item><title><![CDATA[【JDK源码分析】StringBuilder、StringBuilder、String、AbstractStringBuilder源码解析]]></title><link>https://blog.youkuaiyun.com/ifucking/article/details/81108063</link><guid>https://blog.youkuaiyun.com/ifucking/article/details/81108063</guid><author>ifucking</author><pubDate>Thu, 19 Jul 2018 00:21:29 +0800</pubDate><description><![CDATA[前言

JDK 8 
String为不可变，StringBuilder、StringBuffer都为可变。 


为什么String是不可变的？



// final修饰，禁止继承String
public final class String
    implements java.io.Serializable, Comparable&amp;amp;amp;amp;amp;lt;String&amp;amp;amp;amp;amp;gt;, CharSequence ...]]></description><category></category></item><item><title><![CDATA[【JDK源码分析】 String.join()方法解析]]></title><link>https://blog.youkuaiyun.com/ifucking/article/details/81106635</link><guid>https://blog.youkuaiyun.com/ifucking/article/details/81106635</guid><author>ifucking</author><pubDate>Wed, 18 Jul 2018 22:38:24 +0800</pubDate><description><![CDATA[前言



最近出于习惯问题，顺手点开了String的源码，意外发现String在JDK 8中新增了join方法。（实在惭愧，JDK 8都发布多久了。。。）

源码

String重载了join方法，两个方法的异同点在于，第一个方法使用的可变参数，第二个方法使用的可迭代参数，这样设计主要是为了方法适用性更广。比如参数可以传一个数组、集合等等。下面就拿一个方法的源码来解析 
String 类

  ...]]></description><category></category></item><item><title><![CDATA[Nginx 配置https强制跳转]]></title><link>https://blog.youkuaiyun.com/ifucking/article/details/80094154</link><guid>https://blog.youkuaiyun.com/ifucking/article/details/80094154</guid><author>ifucking</author><pubDate>Thu, 26 Apr 2018 15:09:26 +0800</pubDate><description><![CDATA[Nginx http非默认端口强制跳转https配置以及默认端口



Nginx http非默认端口强制跳转https配置以及默认端口

http非默认端口强制跳转https配置
http默认端口强制跳转https配置











http非默认端口强制跳转https配置

当需要使用非默认端口时，按如下配置即可，示例中端口号为8000



server {
    listen  ...]]></description><category></category></item><item><title><![CDATA[PostgreSQL命令行常用命令psql]]></title><link>https://blog.youkuaiyun.com/ifucking/article/details/80005241</link><guid>https://blog.youkuaiyun.com/ifucking/article/details/80005241</guid><author>ifucking</author><pubDate>Thu, 19 Apr 2018 17:02:30 +0800</pubDate><description><![CDATA[PostgreSQL命令行常用命令（psql）

一般我们使用 psql来和数据库交互，方括号中为可选项参数，不带任何参数表示连接本机


  psql [option…] [dbname [username]]




PostgreSQL命令行常用命令（psql）
登录数据库
导入SQL脚本
常用命令
展示数据库
切换数据库（创建新的数据库连接）
展示当前数据库下所有关系（table、view...]]></description><category></category></item><item><title><![CDATA[Linux下源码编译安装Redis及如何后台启动Redis]]></title><link>https://blog.youkuaiyun.com/ifucking/article/details/79985037</link><guid>https://blog.youkuaiyun.com/ifucking/article/details/79985037</guid><author>ifucking</author><pubDate>Wed, 18 Apr 2018 17:57:28 +0800</pubDate><description><![CDATA[操作系统:Centos

下载源码包

http://download.redis.io/releases/redis-4.0.9.tar.gz

解压


# tar -zxvf redis-4.0.9.tar.gz

编译安装


# cd redis-4.0.9

指定安装路径编译安装


# make PREFIX=/usr/local/redis install

更改配置使其后台启动
...]]></description><category></category></item><item><title><![CDATA[Linux下源码编译安装PostgreSQL]]></title><link>https://blog.youkuaiyun.com/ifucking/article/details/79977700</link><guid>https://blog.youkuaiyun.com/ifucking/article/details/79977700</guid><author>ifucking</author><pubDate>Tue, 17 Apr 2018 17:59:47 +0800</pubDate><description><![CDATA[操作系统:Centos

下载源码包

https://www.postgresql.org/ftp/source/v10.3/

解压


# tar -zxvf postgresql-10.3.tar.gz

编译安装


# cd postgresql-10.3

指定安装路径


# ./configure --prefix=/usr/local/postgresql

 可能出现错误co...]]></description><category></category></item><item><title><![CDATA[Linux下源码编译安装Nginx]]></title><link>https://blog.youkuaiyun.com/ifucking/article/details/79976437</link><guid>https://blog.youkuaiyun.com/ifucking/article/details/79976437</guid><author>ifucking</author><pubDate>Tue, 17 Apr 2018 16:39:34 +0800</pubDate><description><![CDATA[操作系统:Centos

下载源码包

http://nginx.org/en/download.html

解压


# tar -zxvf nginx-1.12.2.tar.gz 

编译安装


# cd nginx-1.12.2

指定安装路径及添加SSL模块功能


# ./configure --prefix=/usr/local/nginx --with-http_ssl_modul...]]></description><category></category></item><item><title><![CDATA[Linux下源码编译安装Python3]]></title><link>https://blog.youkuaiyun.com/ifucking/article/details/79975049</link><guid>https://blog.youkuaiyun.com/ifucking/article/details/79975049</guid><author>ifucking</author><pubDate>Tue, 17 Apr 2018 15:54:43 +0800</pubDate><description><![CDATA[操作系统:Centos

下载源码包

下载地址 https://www.python.org/downloads/release/python-365/

解压


# tar -zxvf Python-3.6.5.tgz

安装需要的依赖


# yum -y install tkinter tcl-devel tk-devel xz-devel gdbm-devel bzip2-devel ...]]></description><category></category></item><item><title><![CDATA[Docker 出错 docker: Error response from daemon: OCI runtime create failed: container_linux.go:348]]></title><link>https://blog.youkuaiyun.com/ifucking/article/details/79899729</link><guid>https://blog.youkuaiyun.com/ifucking/article/details/79899729</guid><author>ifucking</author><pubDate>Wed, 11 Apr 2018 17:30:43 +0800</pubDate><description><![CDATA[容器来源于使用官方Dockerfile build的镜像 https://github.com/docker-library/postgres/tree/master/10

环境：CentOS 7

文件列表


-rw-r--r--. 1 root root 3962 Apr  8 17:13 docker-entrypoint.sh
-rw-r--r--. 1 root root 5649 ...]]></description><category></category></item><item><title><![CDATA[Linux下PostgreSQL开机启动配置方法]]></title><link>https://blog.youkuaiyun.com/ifucking/article/details/79892580</link><guid>https://blog.youkuaiyun.com/ifucking/article/details/79892580</guid><author>ifucking</author><pubDate>Wed, 11 Apr 2018 10:59:40 +0800</pubDate><description><![CDATA[操作系统:Centos

目前官方文档提到有两种方式开启PostgreSQL开机启动方法

方式一、使用源码提供的脚本

1、Linux脚本路径为源码包解压后contrib/start-scripts/linux ；

2、将linux文件复制到/etc/init.d或者/etc/rc.d


$ cp contrib/start-scripts/linux /etc/init.d/pgsql

...]]></description><category></category></item><item><title><![CDATA[Maven跳过单元测试配置]]></title><link>https://blog.youkuaiyun.com/ifucking/article/details/57915564</link><guid>https://blog.youkuaiyun.com/ifucking/article/details/57915564</guid><author>ifucking</author><pubDate>Mon, 27 Feb 2017 09:03:42 +0800</pubDate><description><![CDATA[介绍二种跳过单元测试的配置方式

使用maven-surefire-plugin，修改pom文件


&amp;lt;plugin&amp;gt;
	&amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;
	&amp;lt;artifactId&amp;gt;maven-surefire-plugin&amp;lt;/artifactId&amp;gt;
	&amp;lt;version&amp;gt;2...]]></description><category></category></item></channel></rss>