2017-10-31 Java [Java] 分布式和集群的区别 对于集群,不是n个服务器做同一个任务,而是与n个任务分布在n台机器上同时处理,比如,你前台页面有n个用户,分别发送一个请求,那么如果不是集群的话,那这n个请求需要并行在一台机器上处理,如果每个请求都是1秒钟,那么就会有1个人等待n秒钟,有一个人等待n-1秒钟,以此类推。那么现在在集群环境下,n个任务并行发到n台机器上同时运行,那么每个人等待的时间还是1秒钟。 阅读全文…
2017-10-28 C++ [C++] C++面试 智能指针- shared_ptr ref_count 自旋锁 enable_share_from_this 是什么意思,请举一个场景说明 需求:在类的内部需要自身的shared_ptr而不是this裸指针 场景:在类中发起一个异步操作,callback回来要保证发起操作的对象仍然有效 使用boost库时,经常会看到这样的类: 1class A : public enable_sha... 阅读全文…
2017-10-24 C++ [C++] 迭代器失效 迭代器失效当使用一个容器的insert或者erase函数通过迭代器插入或删除元素可能会导致迭代器失效,因此很多建议都是让我们获取insert或者erase返回的迭代器,以便用重新获取新的有效的迭代器进行正确的操作。 12iter = vec.insert(iter);iter = vec.erase(iter); 迭代器失效的原因以vector为例,当我们插入一个元素时它的预分配空间不够时,... 阅读全文…
2017-10-23 C++ [C++] C++中的new、operator new和placement new new/delete和operator new/operator deletenew operator/delete operator就是new和delete操作符,而operator new/operator delete是函数。 new operator: 调用operator new分配足够的空间,并调用相关对象的构造函数 不可以被重载 operator new: 只分配所要求的... 阅读全文…
2017-10-23 C++ [C++] allocator原理 allocator原理介绍考虑到小型区域可能造成内存破碎问题,SGI STL设计了双层级配置器,第一层配置器直接使用malloc()和free(),第二层配置器则视情况采用不同的策略:当配置区块超过128bytes时,调用第一层级配置器,当配置区块小于128bytes时,采用复杂的memory pool方式。 第一级配置器__malloc_alloc_template123456789101... 阅读全文…
2017-10-23 C++ [C++] C++中的模板 非类型模板参数非类型模板参数可以使用整型类型、指针或引用。绑定非类型整型形参的实参必须是常量表达式,不能把普通的局部变量或者动态对象绑定指针或引用的非类型,可以使用全局类型进行绑定。 123456template <const char* C>void pointerT(const char* str) { std::cout << C <<... 阅读全文…
2017-10-23 C++ [C++] static void (* __set_malloc_handler(void (*__f)()))() 1static void (* __set_malloc_handler(void (*__f)()))() 拆开一层一层的分析,最内部的__f是一个函数指针,其参数为void,返回值为void。 对于__set_malloc_handler,首先它是一个函数,其参数为形如__f的函数指针,其返回值也是一个指针,这个指针的类型是void(*)()。 用法如下: 123void (*foo)(... 阅读全文…
2017-10-23 Linux [Linux] Linux中的伙伴系统和slab机制 伙伴系统Linux中采用4KB大小的页框作为标准的内存分配单元,在实际应用中,经常需要分配一组连续的页框,而频繁的申请和释放不同大小的连续页框,必然导致在已分配页框的内存块中分散了许多小块的空闲页框,这样,即使这些页框是空闲的,其他需要分配连续页框的应用也很难得到满足。 Linux内核引入了伙伴系统算法来避免这种情况。其把所有的空闲页框分组为11个块链表,每个块链表分别包含大小为1、2、4、... 阅读全文…
2017-10-22 Java [Java] Java并发编程之volatile关键字 说在前面本文转载自文章Java并发编程:volatile关键字解析,作者对volatile关键字的使用以及原理进行了详细的解析,我觉得写的非常好,所以转载下来做个记录,感谢作者。 内存模型的相关概念计算机在执行程序的时候每条指令都是在CPU中执行的,而执行指令的过程中势必涉及到数据的读取和写入。由于程序运行过程中的临时数据都是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU执行速... 阅读全文…
2017-10-20 Java [Java] Java面试题 String类为什么是final的? 从设计安全上讲,确保不会在子类中改变语义,String类是final类,这意味着不允许任何人定义String的子类,也就是说,如果有一个String的引用,它引用的一定是String对象,而不可能是其他类的对象 从效率上讲,设计成final,JVM才不用对相关方法在虚函数表中查询,而直接定位到String类的相关方法上,提高了执行效率 HashM... 阅读全文…