- 浏览: 17701 次
- 性别:
- 来自: 北京
最新评论
-
qindongliang1922:
代码可以加上格式
读写锁总结
文章列表
HashMap的实现原理
- 博客分类:
- ImportNew
原文地址:http://www.importnew.com/16301.html
HashMap概述
HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
HashMap的数据 ...
HashMap的工作原理
- 博客分类:
- ImportNew
原文地址:http://www.importnew.com/7099.html
HashMap的工作原理
首页所有文章资讯Web架构基础技术书籍教程我要投稿更多频道 »
HashMap的工作原理
2013/11/15 | 分类: 基础技术 | 24 条评论 | 标签: HASHPMAP
分享到: 306
本文由 ImportNew - 唐小 ...
Java线程面试题 Top 50
- 博客分类:
- ImportNew
原文地址:http://www.importnew.com/12773.html
Java线程面试题 Top 50
不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题。Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎。大多数待遇丰 ...
Java的GC堆空间可分为年轻代(new Generation) 和年老代(old Generation), new Generation分为Eden, From, To区。其大小默认比例是8:1:1. 新的对象总是在Eden Space中被创建,当Eden区域满时,会触发Monitor GC, 这时会将仍在被使用的读写从Eden区copy到From区,然后清除Eden区;这样Eden区空了,新对象继续可在Eden中创建,当Eden再满时,触发Monitor GC把Eden和From区中仍然存活的对象copy到To区,然后清空Eden和From区;当Eden区再满时,触发Monitor GC把E ...
聊天室总结
1. 我刚来公司的时候,聊天室是单机的方案:即只有一个chatroom服务,以chatroomId作为targetId, 这意味着,一个聊天室的所有行为,都只能在一台server上。包括加入、退出聊天室;聊天室发消息、聊天室发Notify,以及最终的用户来聊天室拉取消息。
2. 随着聊天室业务的爆发性增长,单机方案已经无法撑住高并发的用户量。这时的架构改进为:把notify和拉取消息的行为,拆分到新增加的chatroommessage服务中,即按业务进行了架构拆分,chatroommessage以userId作为targetId, 这样,当一个聊天室人数很多时,可以通过扩容硬件来 ...
1. ReadWriteLock
对象的方法中一旦加入了synchronized关键字,则任何时刻只能有一个线程访问synchronized修饰的块。假设有个数据对象用户拥有写方法和读方法,那么多线程环境下要保证数据的安全,需要对该对象的读、写方法都加synchronized关键字。 这样,
1)对于任何线程在写入时,其他线程都无法读,也无法写;
2)如果有线程在读时,其他线程也无法读,也无法写。
这样的规则,对于写入操作时,没有问题。但对于读操作时,会造成不必要的性能瓶颈。因为读操作是可以多线程同时进行的,而synchronized限制了数据的并发读。
ReadWriteLo ...
1. 分布式架构要解决的主要问题
1)高可用:举个单机房高可用的例子,你肯定不希望因为一个磁盘损坏,或一个机器损坏,或者一个交换机损坏,就导致整个系统的服务不可用了。
2)在系统容量增长的情况下,如何实现可伸 ...
top是Linux下的性能分析工具,用于实时显示系统各进程的资源占用情况,类似于windows的资源管理器。
1. 前5行是整体的统计信息区:
第一行,任务队列信息
top - 14:13:29 up 14 days, 23:41, 3 users, load average: 0.00, 0.03, 0.05
1)14:13:29 --&g ...
Log API 性能总结
- 博客分类:
- 实战经验
Log的三种写法:
1. LOGGER.info(String.format("aaaaaa%sbbbbbb%sccccc%sdddddd%s", "11", "22", "33", "44"));
2. LOGGER.info("aaa{}", "bb");
3. LOGGER.info("aaaaaa"+"1111"+"bbbbbb"+"2222"+"ccccc& ...
Zookeeper学习
- 博客分类:
- 开源技术
1. 什么是zookeeper?
zookeeper是一个分布式的,开源的"分布式应用程序协调服务"。它包含了一个简单的原语集,分布式应用程序可以基于它实现同步服务、配置维护、命名服务等。
zookeeper是hadoop的一个子项目。在分布式应 ...
1. 需求:把ChrmMember类存入Redis, 以备重启server后,聊天室的成员不会丢失。
ChrmMember类的结构:
-- private int msgNum; //聊天室中的消息数
-- private long lastMsgTime; //聊天室中最新的消息时间
-- private Stack<String> list = new Stack<>(); / ...
ssdb把数据存储到磁盘上,性能接近于redis, 但又不像redis那样纯内存那样昂贵,所以可以存储数据量大,且对于读写速度要求大于传统DB的情况。
1. LSM原理 + 异步: (Log-Structured-mechanism), 磁盘内容的所有操作,都将会被顺序地写入一个类似日志的结构中,从而提供文件的写入效率。(通过异步)。同时该日志中还包含了索引信息以提高日志的读效率。日志会被划分为多个段(segment)来进行管理,很适合哪种存在大量小文件写入的场景。简而言之,LSM就是将对数据的更新操作暂时缓存在内存中,当达到一个指定的值,再将其批量写到磁盘,在写入过程中跟已有的数据做merg ...
当两个线程并发地执行一个HashSet的时候,一个线程对HashSet做遍历(Iterator或者for循环,或者.clone()), 另一个线程对它.add或者.remove的时候,会抛出:java.util.ConcurrentModificationException.
而读的时候,hashSet.size(). hashSet.contains(XXX); 则不会发生异常。
解决办法是读的时候加读锁,写的时候加写锁。要注意读写锁必须来自同一个Lock:
Lock writeLock = UserListManager.getUserMsgLock(key).writeLock();
...
一. Basic Life
1. 保持好从容和平的心态
2. 每天坚持锻炼
3. 少吃油腻,多吃清淡
4. 保证每天睡眠充足
5. 每天按部就班进步
二. 学习方法
1. 简明(从官网或博客上学习,书和视频为辅助)
2. 实践驱动(安装到本地,写些有代表性的小例子,总结写精炼的知识点)
3. 底层原理(细究底层原理:通过网上及自己测试,总结成果到博客)
4. 随时记录下工作中的有价值的经验经历。
架构师学习方向
- 博客分类:
- Target & Direction
2017-07-09:
需要做的:
1. 总结聊天室的架构和优化方案。总结出聊天室从单机到当前的分布式的结构演化过程,以及未来要做的优化和架构调整。
2. 学习Zookeeper, CMP,Cluster, 导航等单位中的技术架构和知识。
3. 学透这三本书:《深入了解JVM的高级特性与最佳实践》、《Java并发编程实践》、《大型分布式网站的架构》
4. 学习Python, Go语言。以此来印证Java语言的优缺点 -- 精通多门语言,才能当好架构师。
2016-03-16:
跟李淼转正谈话:怎样做架构师?
1. 深度:要弄投计算机专业课底层原理(数据结构、操作系统、微机原理、通信协议 ...