叙事为主的设计流程表现高效
英文原文:Why good storytelling helps you design great products
对于产品设计团队来说,他们面临的最大问题是,经常将外观时髦的产品与功能优越的产品混为一谈,而且这种问题屡见不鲜。表面看来,这是一个微不足道的失误,但却会造成十分严重的后果:毕竟,如果用户玩不转你的产品,即便它们看上去再好,也没人买账。
我觉得,消除这种障碍的最佳途径是,采用一种以叙事为中心的设计手法。这种手法的核心理念是,针对产品提出一系列叙述性使用案例,从用户的角度出发,将产品设计的每一个步骤都描述清楚。我向大量创业公司推荐过这种设计手法,它总能让设计团队忽略表面文章,在用户真正关心的问题上做出更好的决定:即如何让产品最终做到物尽其用。
设计不应是蓝图
我注意到,一些团队在提出产品蓝图时,往往在UI(用户界面)设计上敷衍了事。每个屏幕会显示产品在不同情况下的外观,但这些屏幕并未以某种方式被联系起来。问题的症结就在于,当设计方案以这种方式呈现在大家面前时,用户只是对产品外观有大概的了解。
设计团队并没有将重点放在产品的 ...
java
未读不可变的对象指的是一旦创建之后,它的状态就不能改变。String类就是个不可变类,它的对象一旦创建之后,值就不能被改变了。
不可变对象对于缓存是非常好的选择,因为你不需要担心它的值会被更改。不可变类的另外一个好处是它自身是线程安全的,你不需要考虑多线程环境下的线程安全问题。
下面是创建不可变类的方法,我也给出了代码,加深理解。
要创建不可变类,要实现下面几个步骤:
将类声明为final,所以它不能被继承
将所有的成员声明为私有的,这样就不允许直接访问这些成员
对变量不要提供setter方法
将所有可变的成员声明为final,这样只能对它们赋值一次
通过构造器初始化所有成员,进行深拷贝(deep copy)
在getter方法中,不要直接返回对象本身,而是克隆对象,并返回对象的拷贝
为了理解第5和第6条,我将使用FinalClassExample来阐明。
代码实例
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 ...
一个在线2k的游戏,每秒钟并发都吓死人。传统的hibernate直接插库基本上是不可行的。我就一步步推导出一个无锁的数据库操作。
1. 并发中如何无锁。
一个很简单的思路,把并发转化成为单线程。Java的Disruptor就是一个很好的例子。如果用java的concurrentCollection类去做,原理就是启动一个线程,跑一个Queue,并发的时候,任务压入Queue,线程轮训读取这个Queue,然后一个个顺序执行。
在这个设计模式下,任何并发都会变成了单线程操作,而且速度非常快。现在的node.js, 或者比较普通的ARPG服务端都是这个设计,“大循环”架构。
这样,我们原来的系统就有了2个环境:并发环境 + ”大循环“环境
并发环境就是我们传统的有锁环境,性能低下。
”大循环“环境是我们使用Disruptor开辟出来的单线程无锁环境,性能强大。
2. ”大循环“环境 中如何提升处理性能。
一旦并发转成单线程,那么其中一个线程一旦出现性能问题,必然整个处理都会放慢。所以在单线程中的任何操作绝对不能涉及到IO处理。那数据库操作怎么办?
增加缓存。这个思路很简单,直接从内存读取, ...
类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一。它使得 Java 类可以被动态加载到 Java 虚拟机中并执行。类加载器从 JDK 1.0 就出现了,最初是为了满足 Java Applet 的需要而开发出来的。Java Applet 需要从远程下载 Java 类文件到浏览器中并执行。现在类加载器在 Web 容器和 OSGi 中得到了广泛的使用。一般来说,Java 应用的开发人员不需要直接同类加载器进行交互。Java 虚拟机默认的行为就已经足够满足大多数情况的需求了。不过如果遇到了需要与类加载器进行交互的情况,而对类加载器的机制又不是很了解的话,就很容易花大量的时间去调试 ClassNotFoundException 和 NoClassDefFoundError 等异常。本文将详细介绍 Java 的类加载器,帮助读者深刻理解 Java 语言中的这个重要概念。下面首先介绍一些相关的基本概念。
类加载器基本概念顾名思义,类加载器(class loader)用来加载 Java 类到 Java 虚拟机中。一般来说,Java 虚拟机使用 Java 类的方式如下:Jav ...
讲到测试,人们脑海中首先浮现的就是针对软件正确性的测试,即常说的功能测试。但是软件仅仅只是功能正确是不够的。在实际开发中,还有其它的非功能因素也起着决定性的因素,例如软件的响应速度。影响软件响应速度的因素有很多,有些是因为算法不够高效;还有些可能受用户并发数的影响。
在众多类型的软件测试中,压力测试正是以软件响应速度为测试目标,尤其是针对在较短时间内大量并发用户的访问时,软件的抗压能力。本文以 JMeter 为例,介绍了如何使用它来完成常用的压力测试:Web 测试、数据库测试和 JMS 测试。
概述JMeter 最早是为了测试 Tomcat 的前身 JServ 的执行效率而诞生的。到目前为止,它的最新版本是2.1.1,它的测试能力也不再仅仅只局限于对于Web服务器的测试,而是涵盖了数据库、JMS、Web Service、LDAP等多种对象的测试能力。在最新的 2.1.1 中,它还提供了对于 JUNIT 的测试。
JMeter 的安装非常简单,从官方网站上下载,解压之后即可使用。运行命令在%JMETER_HOME%/bin 下,对于 Windows 用户来说,命令是 jmete ...
一对一交流的想法来源两篇文章:《与员工一对一交流:企业经营必行之道》,《你知道我今天为什么来公司上班吗?》。重要性这里不再赘述。认为不重要的可以使用这样的逻辑思考:
1、 你是否想让你的直接领导找你沟通,并且说出你的真实想法?
2、 想怎么样被管理,就怎么样管理别人。
按照这两篇文章的思路,我进行了一次员工的面谈,这里总结一下其中的经验。
具体操作
首先,这次面谈是由我一个人来完成的,面谈的对象包括所有的研发员工。最后主管一级的员工没有全部进行交流,后面要进行补充。
其次,面谈的问题基本来自上面的文章中,包括:
· 关于我们公司的发展,你有什么好的想法?
· 你觉得我们目前面临的头号问题是什么?为什么会这样想?
· 在我们公司工作有什么不甚理想的地方?
·& ...
查看 Nginx web 访问日志访问量前十的ip 以及访问的网站页面地址 ,可以分析网站哪些页面受欢迎,以及访问量大的ip在干什么!
12345678910111213awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -n 10 #结果 391942 211.**.151.218 269168 218.**.103.140 142282 112.**.20.133 105460 112.**.25.241 96016 119.**.155.137 89926 112.**.31.16 83113 218.**.200.19 79975 112.**.28.11 79890 119.**.156.14 72041 124.**.110.72
12345678910111213#如果想查看某一天的 cat access.log | grep "07/Nov/2013" | awk '{print $ ...
人生思绪
未读学习Java已经好几个月的了,不管是看书还是看视频,总是感觉的好简单的,看着书上讲的,听着视频中老师讲的,感觉很是简单的,没什么难度的,可事实是真的如此的吗?
沙漠中树之所以能够不断的成长,在于它不断和恶劣的环境作斗争,根不断深入到下面去吸收养分,才得以存活;小鸟之所以能在空中翱翔,是因为它不断的拍打者自己的那双小小的翅膀;石头之所以能被水滴击穿,是因为水滴对着石头的同一个地方不断的滴打着。都是经过不断的努力,不断的奋斗,才得以成功,而且是针对正确的方式去做,用自己实际行动在行动。而想想自己,这几个月的学习,好像是仍然只是停留在原地,没有得到提高,时间花了那么的多,精力也花的不少,可是就是没有得到一点的起色,或是效果实在是太低。
无意间在上网的时候,看到一篇文章,我从头看到尾,连续的看的好几篇的,越是感觉自己就是这样的,自己是真正的弄懂的吗?学到的真正的是成为自己的了吗?没错自己看的视频很多,自己看的书也是很多,自己听别人说的也是很多,自己的努力也很多,可是自己有没有去做,有没有好好的动手,动脑,自己亲手去做,去把一个问题的原由,和解决的方法,从头到尾的用自己的思想,当然也 ...
看十个成功故事,不如看一个失败故事更让自己警醒。中陛资本合伙人丁辰灵根据公开报道整理出了 17 个有代表性的失败案例,并做出了深度点评,为有志创业的人提供了从公司财务、定位、团队,到市场、资本、政府监管、用户价值等各个方面的经验教训。
1. 亿唐网
不少人还记得 2000 年北京街头出现的大大小小的亿唐广告牌,“今天你是否亿唐”的那句仿效雅虎的广告词着实让亿唐风光了好一阵子。亿唐想做一个针对中国年轻人的包罗万象的互联网门户。他们自己定义了中国年轻人为“明黄一代”。
失败的教训:缺少定位,融资过多
1999年,第一次互联网泡沫破灭的前夕,刚刚获得哈佛商学院 MBA 的唐海松创建了亿唐公司,其“梦幻团队”由 5 个哈佛 MBA 和两个芝加哥大学 MBA 组成。
凭借诱人的创业方案,亿唐从两家著名美国风险投资 DFJ、SevinRosen 手中拿到两期共 5000 万美元左右的融资。
亿唐宣称自己不仅仅是互联网公司,也是一个“生活时尚集团”,致力于通过网络、零售和无线服务创造和引进国际先进水平的生活时尚产品,全力服务所谓“明黄e代”的 18~35岁之 ...
前言GOF 基于经验总结并发明了很多设计模式,客观的说,都非常经典,具有重大的理论指导和实战运用价值。然而这些设计模式远远不能穷尽我们的业务需求,自然也不可能完全支撑我们的业务发展;另一方面,削足适履般生搬硬套设计模式,往往使项目在代码维护、需求变更方面耗费更大的精力和成本。
以本人多年的工作经验来看,知道设计模式是架构师或者核心设计人员的基本知识,但如何运用这些基本知识进行再创新并有效解决核心商业问题,才是真正的价值所在,而不是在一些无关紧要的技术面前玩杂耍。
如何基于业务需求驱动理念来开展我们的模式创新,成为了当今软件架构师、设计师的重要职责之一。
所以本文所要阐述的,就是基于本人所经历的具体项目案例,思考并总结如何基于业务需求驱动思想,开展有价值的设计模式创新。
项目背景本人所参与的这个项目,是一个国家级的身份注册项目,叫 NRIC(National Registration Identity Card)项目。本人的角色是项目唯一的架构师。
身份注册涉及很多的资格审核(Eligibility Verification),也就是说,系统需要检查这个那个一系列的条件,以确保在进行身份 ...
