Beluga

  • 首页

  • 标签

  • 分类

  • 归档

  • 搜索

InnoDB ibdata1文件导致MYSQL服务无法启动

发表于 2019-05-04 | 分类于 MySQL
MYSQL服务无法启动 InnoDB ibdata1 can't be opened in read-write mode
阅读全文 »

chown、chmod改变文件权限

发表于 2019-05-04 | 分类于 Linux

chgrp :改变文件所属群组
chown :改变文件拥有者
chmod :改变文件的权限, SUID, SGID, SBIT等等的特性

常用权限数字:

vim编辑后 -rw-rw-r– : 664
修改为可执行文件 -rwxr-xr-x : 755
禁止其他用户查看 -rwxr----- : 740

阅读全文 »

打开Mac OSX原生的读写NTFS功能

发表于 2019-04-27 | 分类于 MacOS技巧

默认情况下,把一个NTFS格式的磁盘插入到Mac里,是只能读不能写的。网上一直流传着这么一个简单的方法是用第三方工具,Paragon NTFS for MAC。但是要收费,第二就是破解版还不一定能运行。其实最早在OSX 10.5的时候,OSX其实原生就支持直接写入NTFS的盘的,后来由于微软的限制,把这个功能给屏蔽了,我们可以通过命令行手动打开这个选项。

阅读全文 »

Windows命令行设置永久环境变量

发表于 2019-04-26 | 更新于 2019-04-27 | 分类于 Windows

在cmd窗口中set设置的环境变量为临时变量,如:

1
set PATH=%PATH%;D:\Program Files\

使用setx设置为永久环境变量,适用于bat中:

1
setx PATH "%PATH%;D:\Program Files\"
阅读全文 »

JDK并发包

发表于 2019-04-26 | 更新于 2020-07-13 | 分类于 Java , 高并发

JDK并发包简介

[TOC]

同步控制

1. synchronized扩展:重入锁 ReentrantLock

必须手动指定加解锁,提高逻辑控制灵活性

中断响应

lock.lockInterruptibly()可被Thread.interrupt()中断

可设置超时

lock.tryLock(5, TimeUnit.SECONDS) 超时返回false

公平锁

new ReentrantLock(true) 可生成公平锁

2. 信号量 Semaphore

控制同时执行的线程数

3. 读写锁 ReadWriteLock

1
2
3
readWriteLock = new ReentrantReadWriteLock()
readLock = readWriteLock.readLock()
writeLock = readWriteLock.writeLock()

两把锁会根据读写关系阻塞

4. 倒计时 CountDownLatch

用于等待有确切数量的进程完成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public void CountDownLatchDemo(){
ExecutorService exec = Exectors.newFixedThreadPool(10);

for(int i = 0; i < 10; i++)
exec.submit(new CheckTask);
}
end.await();
// 阻塞直到10个线程全结束
}

public class CheckTask implements Runnable{
static final CountDownLatch end = new CountDownLatch(10);

@Override
public void run(){
// do some check
end.countDown();
}
}

5. 循环栅栏 CyclicBarrier

CyclicBarrier cyclic = new CyclicBarrier(N, new BarrierRun(...));
当执行cyclic.await()未达到N次时,一直阻塞,直到第N次后执行BarrierRun线程,且cyclic解锁
cyclic可以继续await(),继续触发BarrierRun

线程池

1. 固定大小 newFixedThreadPool 空闲就执行,满了就队列等待

2. 单线程池 newSingleThreadPool 大小为1的 newFixedThreadPool

3. 大小不固定 newCachedThreadPool 满了会创建新的线程

4. 单线程任务计划 newSingleThreadScheduledExecutor 可以延时/周期执行,大小为1

5. 多线程任务计划 newScheduledExecutor

生成线程池方法
ExecutorService es = Executors.newFixedThreadPool(5)

执行线程

1
2
3
4
5
6
7
8
es.submit(new MyTask());

public class MyTask implements Runnable{
@Override
public void run (){
...
}
}

JDK并发容器

1. ConcurrentHashMap 高效且线程安全的HashMap

2. CopyOnWriteArrayList 安全的ArrayList。在读多写少场合性能远远好于Vector

3. ConcurrentLinkedQueue 高效且安全的LinkedList

4. BlockingQueue 阻塞队列接口,用于数据共享通道

5. ConcurrentSkipListMap 跳表实现,用于快速查找

Collections工具可以将任意容器包装为线程安全的容器,例如
public static Map m = Collections.synchronizedMap(new HashMap());

阅读全文 »

高并发下隐蔽的错误案例

发表于 2019-04-26 | 更新于 2019-04-27 | 分类于 Java , 高并发

并发下的ArrayList

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class ArrayListMultiThreadTest {

static ArrayList<Integer> a1 = new ArrayList<>(10);

public static void main(String[] args) throws InterruptedException {

Thread t1 = new Thread(new AddThread());
Thread t2 = new Thread(new AddThread());
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println(a1.size());

}

public static class AddThread implements Runnable {
@Override
public void run() {
for (int i = 0; i < 1000000; i++) {
a1.add(i);
}
}
}
}

运行这段代码,期望各添加1000 000个元素,但是遇到两种非预期结果:

  • 程序抛出异常 Exception in thread “Thread-0” java.lang.ArrayIndexOutOfBoundsException: 823
  • ArrayList大小为1000141

改进方式:ArrayList换为Vector

阅读全文 »

Docker 搭建 etcd 集群

发表于 2019-04-22 | 更新于 2019-04-27 | 分类于 etcd
  • 主机安装
  • 集群搭建
  • API 操作
  • API 说明和 etcdctl 命令说明
    阅读全文 »

VirtualBox vmdk文件缩容

发表于 2019-04-22 | 更新于 2019-04-27 | 分类于 VirtualBox

一、清理虚拟机内的内容

df -hl 查看 各盘使用情况

使用 du -h –max-depth=1

一步步找到占用大空间的文件夹

然后进行删除整理磁盘

二、vmdk -k、-d命令缩容

阅读全文 »

更改CentOS主机名

发表于 2019-04-20 | 更新于 2019-04-23 | 分类于 Linux

在CentOS中,有三种定义的主机名:静态的(static),瞬态的(transient),和灵活的(pretty)。静态主机名也称为内核主机名,是系统在启动时从/etc/hostname自动初始化的主机名。瞬态主机名是在系统运行时临时分配的主机名,例如,通过DHCP或mDNS服务器分配。静态主机名和瞬态主机名都遵从作为互联网域名同样的字符限制规则。而另一方面,灵活主机名则允许使用自由形式(包括特殊/空白字符)的主机名,以展示给终端用户(如qqmm)。
在CentOS 7中,有个叫hostnamectl的命令行工具,它允许你查看或修改与主机名相关的配置。

阅读全文 »

基于go和etcd实现分布式锁

发表于 2019-04-20 | 更新于 2020-09-13 | 分类于 分布式系统
近期需要用到etcd,参考别人的分布式锁代码
阅读全文 »
1…4567

Irishemma

68 日志
25 分类
18 标签
© 2021 Irishemma