释义
前缀表达式就是前序表达式。
前缀表达式就是不含括号的算术表达式,而且它是将运算符写在前面,操作数写在后面的表达式,为纪念其发明者波兰数学家Jan Lukasiewicz也称为“波兰式”。例如,- 1 + 2 3,它等价于1-(2+3)。
2求值方法对于一个前缀表达式的求值而言,首先要从右至左扫描表达式,从右边第一个字符开始判断,如果当前字符是数字则一直到数字串的末尾再记录下来,如果是运算符,则将右边离得最近的两个“数字串”作相应的运算,以此作为一个新的“数字串”并记录下来。一直扫描到表达式的最左端时,最后运算的值也就是表达式的值。例如,前缀表达式“- 1 + 2 3“的求值,扫描到3时,记录下这个数字串,扫描到2时,记录下这个数字串,当扫描到+时,将+右移做相邻两数字串的运算符,记为2+3,结果为5,记录下这个新数字串,并继续向左扫描,扫描到1时,记录下这个数字串,扫描到-时,将-右移做相邻两数字串的运算符,记为1-5,结果为-4,所以表达式的值为-4。
3公式用法前缀表达式是一种十分有用的表达式,它将中缀表达式转换为可以依靠简单的操作就能得到运算结果的表达式。例如,(a+b ...
有一对兄弟,他们的家住在80层楼上。有一天他们外出旅行回家,发现大楼停电了!虽然他们背着大包的行李,但看来没有什么别的选择,于是哥哥对弟弟说,我们就爬楼梯上去!于是,他们背着两大包行李开始爬楼梯。爬到20楼的时候他们开始累了,哥哥说“包包太重了,不如这样吧,我们把包包放在这里,等来电后坐电梯来拿。”于是,他们把行李放在了20楼,轻松多了,继续向上爬。
他们有说有笑地往上爬,但是好景不长,到了40楼,两人实在累了。想到还只爬了一半,两人开始互相埋怨,指责对方不注意大楼的停电公告,才会落得如此下场。他们边吵边爬,就这样一路爬到了60楼。到了60楼,他们累得连吵架的力气也没有了。弟弟对哥哥说,“我们不要吵了,爬完它吧。”于是他们默默地继续爬楼,终于80楼到了!兴奋地来到家门口兄弟俩才发现他们的钥匙留在了20楼的包包里了。
有人说,这个故事其实就是反映了我们的人生:20岁之前,我们活在家人、老师的期望之下,背负着很多的压力、包袱,自己也不够成熟、能力不足,因此步履难免不稳。20岁之后,离开了众人的压力,卸下了包袱,开始全力以赴地追求自己的梦想,就这样愉快地过了20年。可是到了40岁 ...
系统架构
未读为什么越来越多的企业应用开发正在转向组件框架和解决方案?组件架构是否有前途?我相信答案是肯定的,而且很快所有开发框架都将会是基于组件的——这是近在眼前的事情。下面让我来向你揭示这一切的原因。
你怎么来建设你的房子?一般你会从砌块开始。我们可以将构建 Web 应用与构建你的乡间小屋进行对比。你能够快速构建一个非常好看的应用,而且它具有所有必需的功能。同样,在你的房子里面,每一间房间都是针对具体的需求来创建的,例如厨房、起居室、卧室或浴室。房子的布局使你能够通过走廊和楼梯很方便地在房间之间移动。
现在你能够做得更好,而且能够承担建设一座更大更好的房子的投入——你也许希望拥有桑拿房、游泳池、影院以及一座满是爬行动物的巨大的水族馆☺。但要想改变房子的设计却是件非常困难的事情。若要添加额外的设施,房子最终看起来也许就不那么漂亮了。此外,由于你添加的这些设施必须放在不太方便的位置,它们也会影响房子使用的便利性,例如你必须穿过主卧室才能进入台球室。
最后,你那漂亮又整洁的房子将拥有一堆不同的功能,但它会变得笨拙又不舒适。同样的道理也适用于应用开发。
问题是,有没有可能设计一款应用,能够根据你的需求成 ...
叙事为主的设计流程表现高效
英文原文: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 $ ...
