编程语言
binling
这个作者很懒,什么都没留下…
展开
-
理清Java中的各种内部类
中文都是说内部类,英文原文其实分的很清楚top level classnested classstatic class: declared as a static member of another classinner class: declared as a instance member of another classlocal inner class: declared inside an instance method of anther classanonymous inn原创 2022-01-07 10:30:11 · 328 阅读 · 0 评论 -
Shell Programming的一些常见问题
引号单引号 v.s. 双引号单引号不进行变量替换,双引号会进行变量替换变量是否加引号一个保险的做法是变量总是加引号, 因为变量的值有可能带空格[[ ]]内会把变量替换后的值当成一个整体,但[ ]不会[ ] 和 [[ ]][ 等于 test, 是一个程序,会把] 当成参数列表里最后一个参数[[ ]] 是bash specific的,是bash关键字。[ -f “a.txt” ] && [ -f "b.txt ] 中的&&是连接两个命令的运算符;[原创 2021-12-15 12:32:50 · 645 阅读 · 0 评论 -
c++ 二进制兼容本质
总的一条就是让client只依赖“名字”,而不依赖任何"实现"。“实现” 具体的就是2类1)函数体,code2)任何内存块大小,layout细节为什么会有二进制兼容问题,就是因为一般的c++头文件并不是单纯的接口声明,其中也还包括了“实现细节”,因为成员变量就是一种内存layout,就属于实现细节。对于函数,也有2种情况使得client依赖了实现:1)inline functi原创 2017-07-24 16:35:41 · 602 阅读 · 0 评论 -
Java中 Happen-before 规则总结
详细见:http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/package-summary.html比较重要的几条1)Actions prior to "releasing" synchronizer methods such as Lock.unlock,Semaphore.release, and CountD原创 2015-12-18 16:20:39 · 1511 阅读 · 0 评论 -
java的 violate 和 synchronize
volatile原创 2014-09-30 17:53:22 · 4687 阅读 · 0 评论 -
多线程、锁,可重入,同步,原子性,可见性,非阻塞算法
问题1 什么是Re-entrant Lock锁的acquire是per thread 的, 而不是per call的,也就是同一个线程再次申请已经获得的锁,直接成功返回。如果是非re-entrant的锁,一个线程试图获取已经获得的锁会死锁,因为当前线程会挂起,没有机会release锁synchronized的锁和 ReentrantLock都是 Re-entrant Lock问原创 2015-07-15 19:20:23 · 1519 阅读 · 0 评论 -
compiler之automatic memory management以及Java GC
基本方案就3种1)mark and sweep2) stop and copy3) reference counting前2种方案GC是一个是独立的过程,要先进行扫描(object graph 遍历)检测reachable object,然后进行mark或者copy。引用计数是即时的,当一个object的RC变为0时候立刻回收。一个赋值语句 a = b;对应4条语句RC(b)原创 2015-11-17 16:20:23 · 544 阅读 · 0 评论 -
smart pointer的设计和实现
总体思想是用栈对象封装堆上的资源,利用栈对象必然被回收的性质,达到堆资源自动管理的目的,避免人工delete的error-prone和异常导致的泄露。1 unique_ptr没有拷贝构造函数,只能move。move的时候之前unique_ptr的内部指针置空,这样 析构的时候指针为空不deletetemplate class unique_ptr {private: T* p;原创 2015-11-05 16:49:28 · 647 阅读 · 0 评论 -
complier之stack machine with one register
place holder原创 2015-11-17 17:20:37 · 290 阅读 · 0 评论 -
如何提高并发度?读写锁,分拆锁、分离锁,ThreadLocal,copyOnWrite,工作队列 per thread, 工作窃取
读写锁读写锁并没有分拆锁定粒度,而是区分操作的性质,读与读可以并发,读-写,写-写互斥,只有写是独占锁。分拆锁和分离锁的思想都是对于复杂数据机构,不同的部分对应不同的锁,降低锁的粒度分拆锁,splitingLock独立不相关的数据用不同的锁,比如一个对象有很多字段,这些字段是独立的,而不是组合起来表示一个逻辑数据(比如firstName, lastName,必须组合起来表示原创 2015-07-22 17:53:28 · 3154 阅读 · 0 评论 -
单例模式的写法
基本点:1)构造函数私有化2)一个static成员变量存放单例实例引用3)一个static的 getInstance()方法来提供单例访问其他考虑的问题1)lazy or eager initialization2)线程安全如果不太在乎lazy,最简单的就是用一个static 变量在声明时候就把单例创建 好,这样不需要考虑线程安全问题。在单例类装载的时候原创 2015-01-06 16:05:25 · 597 阅读 · 0 评论 -
C++ 中只能在堆或栈上创建的对象
1.只能在堆上创建的对象1) 把析构函数声明为private2)定义一个destroy()函数,用这个函数来delete对象,void destroy() { delete this;}2.只能在栈上创建的对象1)覆盖operator new 和 operator delete 为priavate原创 2015-01-06 14:35:01 · 537 阅读 · 0 评论