gzdd
未读1.学习一门新的编程语言(Learn a new programming language)
学习一门新的编程语言将有助于你开拓新的思维方式,特别是当你使用不熟悉的语言时,你将学习到很多种思维方法应用到语言中。而所学习到的新思维方式,你可以运用在你所熟知的语言中。甚至有时你会使用新学的语言进行你的重要项目。
提供学习经验包含: Lisp (Scheme is good), Forth, PostScript or Factor (stack-oriented programming languages), J (wonderful array programming language), Haskell (strongly typed purely functional programming language), Prolog (logic programming) and Erlang (concurrent programming goodness).
2.阅读好的且具有挑战性的编程书籍(Read a good, challenging programming book)**** ...
人才是咱这个星球上永恒的话题,关于人才的管理更是一门高深的艺术。对于管理,我也一直在不断求索。

就像一个馒头引发的血案一样,所有事情都有个起因。这段思考的起因又是什么呢?
事情的发展是这样的。。。
2010年,我在任职某公司开发部经理期间,带着数十个人。我的原则是:制定准则、给予空间;能力服之、诚以待之。我认为工作应该是生活的一部分,应该是快乐的,谁也不愿意一早上上班,就看到领导的脸色,弄得自己一天心情不好;如果一直是这种状况,是我,也迟早得换工作。我认为,和员工之前,平时可以开一些不伤大雅的玩笑,但每个人都应该在平凡的表面之后,认真的去面对自己的每一项工作,这是态度问题。你认真了,也就对自己的人生在负责。
这期间发生了很多事情,比如小李辞职,小张要求加薪啊。每当这个时候,我也很受折磨,心里不平衡。问自己:“我这样对他,为啥他还要辞职,就不能踏踏实实的一起好好做个事业呢。工资低是暂时的,时间长了,自然水涨船高。”
有很长一段时间,真的怕员工离 ...
一、引言在当今数字化时代,网络服务器架构的优化对于提升服务性能和用户体验至关重要。本文将深入探讨几种经典的网络服务器架构模型,从传统的阻塞型接口到多线程模型,再到基于事件驱动的模型,分析它们的原理、优缺点以及适用场景,帮助读者理解不同架构模型的特点,从而在实际网络编程中做出合理选择。
1.1 网络编程中的挑战在网络编程领域,构建高效稳定的服务器程序一直是程序员面临的重要任务。传统的网络编程方式在处理多客户机、高并发请求时,往往面临资源占用高、响应效率低等问题。如何优化服务器架构,提高服务接待能力和网络传输效率,成为了亟待解决的关键问题。
1.2 本文重点本文将重点介绍阻塞型、多线程、基于select()接口的事件驱动以及使用libev事件驱动库这几种服务器架构模型。通过对比分析,揭示事件驱动模型在应对高连接数、高吞吐量场景下的优势,为网络编程提供有价值的参考。
1.3 技术路线
详细阐述每种架构模型的工作原理,包括接口使用、线程操作、事件探测与响应机制等。
结合实际案例和代码示例,深入分析各模型的优缺点。
对比不同模型在资源占用、响应能力、可扩展性等方面的表现,总结出适用场景。
二、 ...
我是一名初级程序员,工作一年多。还记得刚毕业,踏入社会的时候,面临着很多工作上尴尬和困惑。首当其冲的便是在学校学的知识并不够用,甚至并不管用。于是学习新技术成了重点解决的问题。其实IT行业推陈出新的速度是很快的,学习新技术并不是初级程序员独有的问题,但是他们的处境是更为困难的,缺乏经验和指导,如何迈出第一步,如何筛选信息,如何深入学习都是摆在我们前面的一道道题目。下面就我的经验来谈谈程序员学习的策略吧。
1、明确目标
首先在学习之前要设定明确的学习目标。什么是明确的目标呢,例如工作的项目需要你能熟练的编写javascript,那么你的目标很明确,就是学习javascript。如果目标设定为网页前端技术,那么这个目标是很模糊的,因为一种技术有很多的具体的实现方法,所用的具体技术也大有不同。你还需要对目标作进一步的细化,一定要具体到一门语言或一种解决方案。当然你目标设定的前提肯定是要用在工作上,如果学的技术不能用在生产上,那么你学习的东西是没有意义,时间也浪费了,你还不能确定你掌握到了什么程度。如果你无法明确自己的目标,可以看第2点。
2、广泛涉猎,浅尝辄止。
如果你对一个 ...
在编写网络游戏时,最终会出现UDP与TCP的问题。
通常,您会听到人们说这样的话:“除非您在做动作游戏,否则可以使用TCP”或“您可以将TCP用于您的MMO,因为看一下WOW –它使用TCP!”
不幸的是,这些意见不能正确反映TCP / UDP问题的复杂性。
背景首先,让我指出我的背景主要是TCP编程。我在领先的扑克网络的游戏服务器上工作了多年,通常在高峰期,每个服务器实例上运行4,000 – 10,000个连接(多个实例在一台计算机上运行)时没有任何问题。在我看来,TCP是安全且众所周知的替代方法。
尽管如此,我们当前的项目正在使用UDP,但是我们无法使其与TCP一起正常工作。实际上,它始于TCP,但是当很明显我们无法获得想要的连接质量时,我们切换到UDP。
TCP在实践中意味着什么从理论上讲,TCP的优点如下:
简单持久的连接
可靠的消息传递
任意大小的数据包
任何具有TCP实际操作经验的人都知道,可靠的实现需要处理许多不太明显的极端情况,例如断开连接检测,由于客户端响应缓慢而导致的数据包拥塞,与建立连接有关的各种DoS攻击向量,阻塞与非-阻塞IO等
尽管具有前期的易 ...
各位为英语而郁闷的兄弟姐妹们:
自从考完GRE和TOEFL以后,心有所感,本想写点心得,但是因为太懒没写成。今日风雨如晦,心中又有所感,于是一舒笔墨,写下我学英语的方法。俺知道有很多兄弟姐妹们和曾经的我一样因为英语而郁闷,小小心得,也算造福后人,为自己积累一点功德~~
方法之前,先说说俺学英语的历史:
开篇:俺的英语之路
我大概从小学二年级开始学英语,当时在老爸的逼迫之下每天傍晚六点准时坐在电视机前,和“少儿家庭英语”里面那个奇丑无比的老太婆读一些奇无智商的单词句子。有一天放学和同学捉蝴蝶捉得忘了时间,错过了“老太婆”的课,被老爸一脚踢在小腿上三寸下三寸处,从腿面一直黑到腿背。现在已经不记得他说过些什么了,只记得他被俺奶奶狠狠骂了一顿,从此以后再也不敢逼俺学英语了~后来又有一天老爸问:你是不是有时会把英语和拼音混淆?我张着嘴呆了5秒钟,然后毫不犹豫的回答:是!此后俺小学阶段再也不用和老太婆念那几本没智商的“少儿家庭英语”了。其实俺作为广西百色市第七小学三年级“尖子班”中的“尖子生”,说俺会把区区英语和区区拼音混在一起,简直就是侮辱俺的智商。只不过少了每天六点和老太 ...
在阎宏博士的《JAVA与模式》一书中开头是这样描述解释器(Interpreter)模式的:
解释器模式是类的行为模式。给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。
解释器模式的结构下面就以一个示意性的系统为例,讨论解释器模式的结构。系统的结构图如下所示:
模式所涉及的角色如下所示:
(1)抽象表达式(Expression)角色: 声明一个所有的具体表达式角色都需要实现的抽象接口。这个接口主要是一个interpret()方法,称做解释操作。
(2)终结符表达式(Terminal Expression)角色: 实现了抽象表达式角色所要求的接口,主要是一个interpret()方法;文法中的每一个终结符都有一个具体终结表达式与之相对应。比如有一个简单的公式R=R1+R2,在里面R1和R2就是终结符,对应的解析R1和R2的解释器就是终结符表达式。
(3)非终结符表达式(Nonterminal Expression)角色: 文法中的每一条规则都需要一个具体的非终结符表达式,非终结符表达式 ...
在网络上开销最昂贵的资源就是客户端与服务器往返的请求与响应,JDBC中类似的一种情况就是对数据库的调用,如果你在做数据插入、更新、删除操作,可以使用executeBatch()方法减少数据库调用次数,如:
Statement pstmt = conn.createStatement();
pstmt.addBatch("insert into settings values(3,'liu')");
pstmt.addBatch("insert into settings values(4,'zhi')");
pstmt.addBatch("insert into settings values(5,'jun')");
pstmt.executeBatch();
但不幸的是对于批量查询,JDBC并没有内建(built-in)的方法,而且JDBC执行批处理的时候也不能有SELECT语句,如:
Statement pstmt = conn.createStatement();
pst ...
java源码分析
未读JDK源码中Set类是我们开发过程中经常用到的,那么本文将会向你介绍JDK源码中Set类的一些构造,使我们在编程中高效的应用。
JDK源码分析Set类,因为Set类是经常要用到的,那我们知道JDK源码中Set类在其中不可以有相同的元素,那么判断这个元素是否相同是如何实现的呢,我们看下下面这张图:
对JDK源码分析之Set类在这张类图上,首先我们看见一个经典模式的应用,那就是适配器模式,我们把map接口的对象,包装成为了Set的接口;在代码中,我们来分析一下;
首先,我们看一下HashSet
private transient HashMap map;
// Dummy value to associate with an Object in the backing Map
private staticfinal Object PRESENT = new Object();
可见,他适配了HashMap,那么他的功能是如何委托给HashMap结构的呢?
public boolean add(E e) {
return map.put(e, PRESENT ...
在JDK6与JDK7这两个版本中,substring(int beginIndex, int endIndex)方法是不同的. 了解两个版本间的区别可以让你更好地使用它们. 为简单起见,本文中以 substring() 表示 substring(int beginIndex, int endIndex).
1. substring()功能简介String对象的substring(int beginIndex, int endIndex)方法返回此对象的一个子串,从beginIndex 开始,一直到 endIndex-1 结束,共 (endIndex - beginIndex)个字符。新手提示: 1.1 String 的索引和数组一样,都是从0开始. 1.2 注意,方法名字是substring(),全小写. 1.3 有个重载方法是substring(int beginIndex),从beginIndex索引处开始,取得子字符串.
String x = "abcdef";
int begin=1;
int end=3;
x = x.subst ...
