断肠人醉看红尘
断肠人醉看红尘
天堂是地狱的终极,地狱是天堂的走廊。
关注数: 32
粉丝数: 33
发帖数: 1,412
关注贴吧数: 93
Java开发大数据圣诞祝福墙【腾讯内部顶尖技术】谁有源代码? 求分享
转贴:涟漪效果 极客标签 | 在线编程知识分享学习平台 涟漪效果 极客标签 | 在线编程知识分享学习平台来自:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.gbtags.com%2Fgb%2Fshare%2F4441.htm&urlrefer=be86ae6d3a045662b4d75f7437ade4d9
【maven】eclipse新建webapp后无法添加src/../java和src/../test 原文出自:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fblog.csdn.net%2Ftruong%2Farticle%2Fdetails%2F17200967&urlrefer=2e06b9dbac78e51d9e073c2208ffeabb 1.eclipse->window>preferences->java->compiler->选择本地要用的Java版本 2.eclipse->window>preferences->java->installJars->修改为本地jdk 3.项目右键->buildPath configure Build Path->点击选项卡Libraries->选中JRE System Library-> 点击edit->选中Alternate JRE->选择jdk 4.点击finish,点击ok,自动出现src/main/java和src/test/java
开发的那些事 我眼中的开发和测试 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.csdn.net%2Farticle%2F2014-12-01%2F2822868&urlrefer=dd4c04b99fe9bcdc5d2a0072c3cf6bad
【招聘网站】
【Java小程序】 1.简单记事本程序java源码项目 import java.awt.Color; import java.awt.FileDialog; import java.awt.Font; import java.awt.Frame; import java.awt.Menu; import java.awt.MenuBar; import java.awt.MenuItem; import java.awt.TextArea; import java.awt.Toolkit; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.Transferable; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class Main extends Frame implements ActionListener { private static final long serialVersionUID = 1L; TextArea textArea = new TextArea(); MenuBar menuBar = new MenuBar(); Menu fileMenu = new Menu("File"); MenuItem newItem = new MenuItem("New"); MenuItem openItem = new MenuItem("Open"); MenuItem saveItem = new MenuItem("Save"); MenuItem saveAsItem = new MenuItem("Save As"); MenuItem exitItem = new MenuItem("Exit"); Menu editMenu = new Menu("Edit"); MenuItem selectItem = new MenuItem("Select All"); MenuItem copyItem = new MenuItem("Copy"); MenuItem cutItem = new MenuItem("Cut"); MenuItem pasteItem = new MenuItem("Paste"); String fileName = null; Toolkit toolKit = Toolkit.getDefaultToolkit(); Clipboard clipBoard = toolKit.getSystemClipboard(); private FileDialog openFileDialog = new FileDialog(this, "Open File", FileDialog.LOAD); private FileDialog saveAsFileDialog = new FileDialog(this, "Save File As", FileDialog.SAVE); public Main() { setTitle("记事本程序-by Jackbase"); setFont(new Font("Times New Roman", Font.PLAIN, 12)); setBackground(Color.white); setSize(400, 300); fileMenu.add(newItem); fileMenu.add(openItem); fileMenu.addSeparator(); fileMenu.add(saveItem); fileMenu.add(saveAsItem); fileMenu.addSeparator(); fileMenu.add(exitItem); editMenu.add(selectItem); editMenu.addSeparator(); editMenu.add(copyItem); editMenu.add(cutItem); editMenu.add(pasteItem); menuBar.add(fileMenu); menuBar.add(editMenu); setMenuBar(menuBar); add(textArea); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); newItem.addActionListener(this); openItem.addActionListener(this); saveItem.addActionListener(this); saveAsItem.addActionListener(this); exitItem.addActionListener(this); selectItem.addActionListener(this); copyItem.addActionListener(this); cutItem.addActionListener(this); pasteItem.addActionListener(this); } public void actionPerformed(ActionEvent e) { //监听事件 Object eventSource = e.getSource(); if (eventSource == newItem) { textArea.setText(""); } else if (eventSource == openItem) { openFileDialog.show(); fileName = openFileDialog.getDirectory() + openFileDialog.getFile(); if (fileName != null) readFile(fileName); } else if (eventSource == saveItem) { if (fileName != null) writeFile(fileName); } else if (eventSource == saveAsItem) { saveAsFileDialog.show(); fileName = saveAsFileDialog.getDirectory() + saveAsFileDialog.getFile(); if (fileName != null) writeFile(fileName); } else if (eventSource == selectItem) { textArea.selectAll(); } else if (eventSource == copyItem) { String text = textArea.getSelectedText(); StringSelection selection = new StringSelection(text); clipBoard.setContents(selection, null); } else if (eventSource == cutItem) { String text = textArea.getSelectedText(); StringSelection selection = new StringSelection(text); clipBoard.setContents(selection, null); textArea.replaceRange("", textArea.getSelectionStart(), textArea.getSelectionEnd()); } else if (eventSource == pasteItem) { Transferable contents = clipBoard.getContents(this); if (contents == null) return; String text; text = ""; try { text = (String) contents.getTransferData(DataFlavor.stringFlavor); } catch (Exception exception) { } textArea.replaceRange(text, textArea.getSelectionStart(), textArea.getSelectionEnd()); } else if (eventSource == exitItem) { System.exit(0); } } public void readFile(String fileName) { //读取文件处理 try { File file = new File(fileName); FileReader readIn = new FileReader(file); int size = (int) file.length(); int charsRead = 0; char[] content = new char[size]; while (readIn.ready()) charsRead += readIn.read(content, charsRead, size - charsRead); readIn.close(); textArea.setText(new String(content, 0, charsRead)); } catch (IOException e) { System.out.println("Error opening file"); } } public void writeFile(String fileName) { //写入文件处理 try { File file = new File(fileName); FileWriter writeOut = new FileWriter(file); writeOut.write(textArea.getText()); writeOut.close(); } catch (IOException e) { System.out.println("Error writing file"); } } @SuppressWarnings("deprecation") public static void main(String[] args) { Frame frame = new Main(); //创建对象 frame.show(); //是对象显示 } } //本文出自:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.cnblogs.com%2Fhuasili%2Fp%2F4120196.html&urlrefer=cc35057da6dcb30af46f551c8c983db7
【学习】HTTP状态码 维基百科: http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fzh.wikipedia.org%2Fwiki%2FHTTP%25E7%258A%25B6%25E6%2580%2581%25E7%25A0%2581&urlrefer=81f2c636e73923a89afcead1db703475 百度百科: http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fbaike.baidu.com%2Fview%2F1790469.htm&urlrefer=a9afbe607d6edae0c8b1f1106a3568b1 CSDN: http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fblog.csdn.net%2Fjom_ch%2Farticle%2Fdetails%2F1332132&urlrefer=547561812709c836715f27ebc5d240a6 百度文库: http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwenku.baidu.com%2Flink%3Furl%3DO2sweG878d23q_i1xSm6vLqhyvCX-_1efZdCDxAO1QVmBvXB1f-93HFIncxLj4hDP7TdZis8j_QQSLh83l5g54KxDeBqMTBDdD9PU07nkVi&urlrefer=bfa1721475cd6eef99d6de05dcb86ed2 博客园: 1.http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.cnblogs.com%2Fkunhony%2Farchive%2F2006%2F06%2F16%2F427305.html&urlrefer=544003823093a95017e63b7cac568919 2.http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.cnblogs.com%2Fphoebus0501%2Farchive%2F2011%2F05%2F14%2F2046377.html&urlrefer=2ac7c2ba945c1352ce191df36fb14e74 网页吧: http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.wangyeba.com%2FArticle%2Fweb02%2FHTMLcss%2F201001%2F20100104122422.shtml&urlrefer=4f9dff88b7f584bfc3ddc90e6c8c6d99 幕课网: http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Ftool.oschina.net%2Fcommons%3Ftype%3D5&urlrefer=6992229cf8dff5cef7234a3e18a8f3d3 众享网: http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2F9988.in%2Fjiaocheng%2F2826.html&urlrefer=18f8cb41b23bb6609092fd509cff775e 三生有幸网: http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.3464.com%2FData%2FHTTPStatus%2F&urlrefer=da8226d240baae008491379b9aadc98c 不知名的网站: http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.dreamdu.com%2Fwebbuild%2Fhttp_status_code%2F&urlrefer=7a59816eb6a0826defd4521351a0365e
网页爬虫 JSP抓取网页代码的程序: <%@ page contentType="text/html;charset=gb2312"%> <% String sCurrentLine; String sTotalString; sCurrentLine=""; sTotalString=""; java.io.InputStream l_urlStream; java.net.URL l_url = new java.net.URL("http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.163.net%2F&urlrefer=89d2ddc72a25fa9c6e55634b8954176d"); java.net.HttpURLConnection l_connection = (java.net.HttpURLConnection) l_url.openConnection(); l_connection.connect(); l_urlStream = l_connection.getInputStream(); java.io.BufferedReader l_reader = new java.io.BufferedReader(new java.io.InputStreamReader(l_urlStream)); while ((sCurrentLine = l_reader.readLine()) != null) { sTotalString+=sCurrentLine; } out.println(sTotalString); %> 后记 虽然代码比较简单,但是,我认为根据这个,可以实现“网络爬虫”的功能,比如从页面找href连接,然后再得到那个连接,然后再“抓”,不停止地(当然可以限定层数),这样,可以实现“网页搜索”功能。 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fblog.csdn.net%2Fahwr24%2Farticle%2Fdetails%2F4967319+&urlrefer=880a92e1159dbc51ba6804cef598338e
著名编程语录 一个好的程序员应该是那种过单行线都要往两边看的人。 – Doug Linder, 系统管理员 任何一个工具,它的一个最重要的、同时也是最难以做到的方面就是对那些学习使用这个工具的人在使用习惯上的影响。如果这个工具是一种编程语言,那么,这种影响——不管我们是否喜欢——将是一种思考习惯上的影响。 – Edsger Dijkstra, 计算机科学家 抽象化是一种非常的不同于模糊化的东西 … 抽象的目的并不是为了模糊,而是为了创造出一种能让我们做到百分百精确的新语义。 – Edsger Dijkstra 除数学外,对本土语言的异常的精通会是一个计算机程序员的最宝贵的财富。 – Edsger Dijkstra C语言很容易让你犯错误;C++看起来好一些,但当你用它时,你会发现会死的更惨。 – Bjarne Stroustrup,C++语言的创始人 评论:解决问题大多数都很容易;找到问题出在哪里却很难。 – 无名 看看目前我们的计算机编程上的这种糟糕的状态,软件开发很显然仍然处于一种黑色艺术状态,仍然毫无工程规范可言。 – 比尔克林顿,美国前总统 长久以来一个问题一直困扰着我,为什么有些东西如此昂贵,如此的高科技,却毫无用处,就像我知道的,计算机虽然是台笨机器,却有能力做出难以置信的智能事情,而程序员虽然是一些聪明的人,但却老是做难以置信的傻事情。他们呀,简言之,是对绝配。 – Bill Bryson, 作家, 出自《Notes from a Big Country》 给与足够的眼球,所有的Bugs都很容易发现(例如,大量的beta测试,结对开发,所有的问题都能很快的发现和修复) – Eric S. Raymond, 程序员,开源软件的倡导者, 出自《The Cathedral and the Bazaar》 高质量的代码就是对程序自己最好的注释。当你打算要添加注释时,问问自己,“我如何能改进编码以至于根本不需要添加注释?”改进你的代码,然后才是用注释使它更清楚。 – Steve McConnell, 软件工程师,作家, 出自 《Code Complete》 嘿,编译通过了!装包吧! – 无名 任何优秀的大软件里面都是一个优秀的小程序。 – Charles Antony Richard Hoare, 计算机科学家 我们应该注意到,没有一个受过伦理教育的软件工程师会同意开发出“摧毁巴格达”的程序。然而基本的职业道德却可以要求他们开发出“摧毁城市”的程序,巴格达只是这个程序的一个参数。 – Nathaniel S.Borenstein, 计算机科学家 管理程序员就像是在放养一群猫。 – 无名 用代码行数来评估程序的开发进度,就好比是拿重量来评估一个飞机的建造进度。 – 比尔盖茨,前微软总裁 在一种编程语言中,即使有再多的好程序被诋毁指责,也要比被说成完美无缺好 — 好的多。 – Bjarne Stroustrup, 出自 《The Design and Evolution of C++》 程序应该是写给其他人读的,让机器来运行它只是一个附带功能。 – Harold Abelson and Gerald Jay Sussman,计算机科学家和作者,出自《The Structure and Interpretation of Computer Programs》 真正的程序员从来不注释他们的代码。如果你做不到这样,也就说明你不能使你的程序易于理解。 – 无名 简单是稳定的前提。 – Edsger Dijkstra C语言 — 这是一种既有汇编语言强大的功能,又有汇编语言的灵活性的编程语言。 – 无名 最初90%的开发工作将会用去你最初90%的开发时间。剩下的10%的开发量将会用去你另外一个90%的开发时间。 – Tom Cargill, 贝尔实验室的面向对象编程专家 对于增加一个功能点所付出的代价,你要明白的很重要的一点就是,它不仅仅指开发这个功能所消耗的时间。它同时还包括带来的额外的给以后扩展造成的困难。不错,任何的功能特性都是能实现的——只要有足够的时间。除了这些将来会出现的问题外,你最终还会使你的程序变得脆弱,最终连一个绝对简单的功能都越来越难以和现有的混乱的web结合起来。应对此问题的办法是你应只接受那些不会导致冲突的功能。 – John Carmack, 计算机游戏开发 性能的关键是精简,而不是一堆的优化用例。除非有真正显著的效果,否则一定要忍住你那些蠢蠢欲动的小微调的企图。 – Jon Bently 和 M. Douglas McIlroy, 同为贝尔实验室的科学家 用C写的最后的一个好东西就是舒伯特的第九交响乐。 – Erwin Dieterich, 程序员 使用C++的问题就在于 … 这种语言有一种很大的脾气,在你想做任何事情之前你必须把所有的知识都掌握才行。 – Larry Wall, Perl语言的开发者 开发的越早,程序花费你的时间越长。 – Roy Carlson, 威斯康星州大学 原型的价值就在于它对你的教育,而不是代码本身。 – Alan Cooper, 软件作者, 出自《The Inmates are Running the Asylum》 世上只有两种编程语言:一种是总是被人骂的,一种是从来没人用的。 – Bjarne Stroustrup 世上有两种设计软件的方法。一种是尽量的简化,以至于明显没有任何缺陷。而另一种是尽量复杂化,以至于找不到明显的缺陷。 – Charles Antony Richard Hoare 丑陋的程序和丑陋的吊桥一样:他们都容易坍塌,因为人类(尤其是工程师们)的审美定义跟人们对复杂事物的处理和理解密切相关。一种编程语言如果不能使你写出优美的代码,那它也就不能使你写出好的程序。 – Eric S.Raymond 数周的编程能省掉你几个小时的计划时间。 – 无名 当一种能够让程序员通过简单的英语来编程的编程语言诞生后,你会发现程序员们都不会说英语。
这就是传说中的未完待续…… 亏我开心了一晚……
有没有一种熟悉的感觉?像不像黄金瞳里面的海岛
【程序员日报】 出自:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fnews.cnblogs.com%2Fn%2Ftopic_335.htm&urlrefer=09c73c676ec9585931d87989024770a4
【WebService】 首先了解一下什么是WebService: 详情:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fbaike.baidu.com%2Fview%2F67105.htm%3Ffrom_id%3D2342584%26type%3Dsyn%26fromtitle%3Dwebservice%26fr%3Daladdin&urlrefer=bcafaf01d729584a387f35aac82b8e80 常用的框架有三种: 1.Apache CXF 2.Xfire 3.Axis
【流程】《流程的永恒之道》辛鹏:企业的本质就是流程运营 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.csdn.net%2Farticle%2F2014-08-28%2F2821423-CTO-Club&urlrefer=ad70dc2d08940ff1027ac881990bf92e
【畅言】从“码农”说起 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.csdn.net%2Farticle%2F2014-10-01%2F2821945&urlrefer=1286c2878e7b324545354a9b4615c5f6
软件产品升级流程,你知多少? http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.csdn.net%2Farticle%2F2014-10-13%2F2822067&urlrefer=4618a56e21bf1c6d29c1326fff562f3b
专访 专访荣浩:流程的永恒之道: http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.csdn.net%2Farticle%2F2014-09-10%2F2821606&urlrefer=ddc9b21b77eb00674b25b2a332491564 专访李智勇:一个老程序员的哲学思考与勇猛精进的人生 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.csdn.net%2Farticle%2F2014-09-24%2F2821834&urlrefer=44af76fc7f0e8fd347ebc3f9f65ab46b 专访孔德芳:如何才能提高Java Web性能? http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.csdn.net%2Farticle%2F2014-04-28%2F2819531&urlrefer=625a6157c9238e796041951157fecd93 专访徐宜生:坚决不做代码搬运工! http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.csdn.net%2Farticle%2F2014-10-15%2F2822071&urlrefer=be62d33e646600cc20ff44681b33ed31
http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fzhidao.baidu.com%2Flink%3Furl%3Df-Pbx05nlkJeoXhty2xKcpszmDe3UpjFSyOumr4buN7OS8jB0RT08N3skQZmfx0HHp2dKaf_QF27BF3AEO2a3a&urlrefer=9764f08b237b366733d88ea1327dec74
Spring的内容 ----------------------------------------------------------------------------- spring boot spring framework spring io platform spring xd spring cloud spring data --- spring integration spring batch spring security spring hateoas spring soclal spring amqp --- spring mobile spring for android spring web flow spring web services spring ldap grails groovy --- ----------------------------------------------------------------------------- Spring scala Spring roo Spring blazeds integration Spring loaded
提高代码质量的12个技巧 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.codeceo.com%2Farticle%2F12-skills-improve-code-quality.html&urlrefer=49b90c49f29de0b6ddfe6f507e3d8347
原来我还可以这样活:拆掉思维里的墙 安全感奴隶(1) 买房,卖梦想的房奴 不管你在中国的哪一个城市,只要你还准备结婚,还有个工作,而且父母安在,你都也许想过一件事情,这个城市里,我是不是要买房?怎么样才能买到房?什么时候买?父母出不出钱? 因为你知道,要一提裸婚,都没有人愿意嫁给你。即使老婆愿意,他们家人呢?别人会怎么看?孩子以后怎么办?看看下面这个裸婚的故事。 有这么一个人,我们暂时称呼他为小飞。他21岁从某名牌大学金融系毕业。在大城市找不到工作,他于是回到老家省会的证券公司当一名普通员工,1年以后,蚁族小飞遇到自己喜欢的姑娘小苏,于是向她求婚。小苏问他那,房子怎么办?他说我才工作一年,加上大学时候赚了点钱。大概就攒下来10万多。我给你两个选择,1是花这笔钱在当地买个小房子,2是让我去投资,过几年买套大的。小苏说好,我相信你,我选2。于是小飞和小苏租了个两房一厅就结婚了,房子真有点破,晚上还能听到天花板的老鼠在开派对。第一年他们生了个女孩,他们没买房。结婚4年后,小飞的事业终于有了点起色,他成为一个投资公司的合伙人。第6年的时候,他在新的公司站稳了脚,收入也开始稳定起来。他花了大概30万在当地买了套一般的房子,全家搬了进去。32岁的时候,小飞终于赚到了自己的第一个一百万,虽然朋友们都住上了更好的房子,这笔钱他也不准备用来买更大的房子,他想继续做他的投资生意。 你觉得这样的生活,你可以接受吗? 这样的生活,比选择了直接买房子的故事版本怎么样? 这是一个真实的故事。小飞和小苏其实是你认识的人,他们叫做巴菲特和苏珊。 1951年,巴菲特在哥伦比亚大学毕业,在纽约找不到工作,于是回到了老家奥马哈做股票经纪人,就相当于今天证券公司的一名普通员工。1952年,蚁族巴菲特遇到了自己喜欢的姑娘苏珊。据说老巴在结婚的时候跟他老婆说:“亲爱的我现在给你两个选择,我工作一年就攒下来了一万多美金,1是花1万美金买套小房子,2是这1万美金让我去投资,过几年买套大的。”苏珊说:“好,我相信你。”巴菲特租了一套两室一厅,晚上都能听到老鼠在天花板上开派对,他们结婚了。 1952年 蚁族巴菲特裸婚,与老婆苏珊租下两房一厅 1953年 他们的第一个女儿出生了。 1956年,租房子住4年后,26岁的巴菲特成立巴菲特联合有限公司 (Buffett Associates, Ltd.)。开始创业 1958年,他的投资开始稳定获利,他花了万美元买下位于奥哈马的一座灰色小楼,至今住在这里。 1962年,10年后,巴菲特赚到了自己人生的第一个一百万。 2008年 财产620亿美元,世界首富。 巴菲特的房子 各位不见房子不撒儿女的中老年父母们,各位无房绝不裸婚的男男女女们,谁才是真正的股神?巴菲特媳妇苏珊!她为巴菲特做了这一辈子最重要的一次投资决策,投资自己,而不是投资一套房子!如果当年苏珊选择的是买房子,估计巴菲特一辈子就废了。因为即使是股神这样的天才,也需要给个十年发展机会啊。从职业发展来看,一套房子消灭一个巴菲特。 一套房子消灭一个梦想 你是否意识到,在你年轻的时候,买一套房子多大程度在卖你的梦想?我们来做这样一个“人生试验”。 假设有这么2个人,小强和小明,他们是同年从同一个专业毕业,在同一家企业工作。2年后,他们月收入都是5000,现在他们决定思考买房子的事情。正好单位的班车通过北京五环的一个地方,房价1万2每平,户型是80平米两房。(在我写这篇文章的时候,这个价已经买不到五环房子了,读者可以自动把五环改为六环或者七环,以此类推。)两个家庭都能够支持大概35万元,如果按照最长的30年贷款算下来,月供大概在3000元左右。
Web面试题 1.为什么ajax无法实现异步上传? 答:ajax与后台通信都是通过传递字符串,怎么能传递文件呢?出于安全考虑js是不能操作文件的,所以就不要再说用ajax来实现文件的上传了,这是不可能的。可以通过Jquery的ajaxSubmit实现.
Web开发中的6个坏习惯
Java进阶之道
我来了,感谢大伙 不知道有没有那你忙吧的十五个字啊,哈哈嘿明天休息一天
发几个帖子试试 今晚上段总请吃饭飙歌,我只参加一般就要回家了。
本吧是为了记录我学习Java,并且进步才开的。 是否太局限了?
【解析】list集合去除重复对象 对象重复是指对象里面的变量的值都相等,并不定是地址。list集合存储的类型是基础类型还比较好办,直接把list集合转换成set集合就会自动去除。 当set集合存储的是对象类型时,需要在对象的实体类里面重写public boolean equals(Object obj) {} 和 public int hashCode() {} 两个方法。 package basic; public class Student { public String id; public String name; public Student() { } public Student(String id, String name) { this.id = id; this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((id == null) ? 0 : id.hashCode()); result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Student other = (Student) obj; if (id == null) { if (other.id != null) return false; } else if (!id.equals(other.id)) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append("Student [id="); builder.append(id); builder.append(", name="); builder.append(name); builder.append("]"); return builder.toString(); } } package basic; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class QuSame { public static void main(String[] args) { List<Student> stu = new ArrayList<Student>(); stu.add(new Student("1","yi")); stu.add(new Student("3","san")); stu.add(new Student("3","san")); stu.add(new Student("2","er")); stu.add(new Student("2","er")); //set集合保存的是引用不同地址的对象 Set<Student> ts = new HashSet<Student>(); ts.addAll(stu); for (Student student : ts) { System.out.println(student.getId()+"-"+student.getName()); } } } 转自:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.2cto.com%2Fkf%2F201310%2F252691.html&urlrefer=de97021519a82673846ae1f98bbdd0f3
许立志博客 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fblog.sina.com.cn%2F1360qxh&urlrefer=1274a48a578e1d3eca307f57600979f1
许立志-《小小的湖》 细小的晨曦被微风吹送着 我看过风景看过雪 独不见一个早晨的明亮 小叶榕有瀑布般的根须 拂过路边行人困倦的脸 谛听这些声音,这些光线 我的内心是宁静的 它庚续了朝代间缄默的溪水 爱与孤独,树脉上流动的思想 土地上碎落的方言 我弓腰,拾起几枚 在阳光下反复诵读,咀嚼 抵达每个乡村,每个生命的卑微 展望新的日子,我满怀期待 湛蓝的喜悦在心里荡开 静卧成一面,小小的湖
许立志-《致志》 或许吧, 或许这首诗也只能有这三个字。 我想到一句好结尾的, 现在我却全部忘了…… 走吧,走吧, 雨夹太阳光铺雪; 走吧,走吧…
许立志-《梦想》 夜,好像深了 他用脚试了试 这深,没膝而过 而睡眠 却极浅极浅 他,一个远道而来的异乡人 在六月的光阴里 流浪或者漂泊 风吹,吹落他几根未白的白发 那些夕阳沉睡的傍晚 他背着满满的乡愁 徘徊于生活的十字路口 这疼痛,重于故乡连绵万里的青山 弓着腰,他遍地寻找 妈妈说的梦想 2011-6-12
Web开发中的6个坏习惯
【入门】程序员初学者如何自学编程另类版 程序员初学者如何自学编程另类版 一、要做大神编程基本要靠自学 俗话说老师引进门,修行靠个人。 编程也不例外。没有哪个培训机构能100%保证能把你培养成啥样。编程不是健身,你的私人教练无法帮你把胸脯练得和他一样大。 不要纠结是否要选培训机构、要选哪个培训机构。实际上如果你强迫自己学一门语言一年,如果还是懵懂的很厉害(譬如连hello world都写不出),那么基本请考虑换个事情做做吧。 一般好的程序员都是靠自学的。就像老板大部分都没上过MBA. 二、开发语言选型 选啥语言? Php?你会发现学了一半,好像java做的事情更多 Java?你会发现学了一半好像ios开发更有前景 Ios?你会发现还不如android好 Andoid?你会发现其实还是php容易找工作 所以初学者其实很难选择语言。既然难,索性不要急于选。 小建议:不管什么语言,在网上都很容易找到入门教程。这里要说明的是,不建议一上来就买纸质书,一方面现在的纸质书滥竽充数的太多,抄袭太多,另一方面,也贵~~~ 我看到过一个学校的专业班级(和企业合作,有php、java和.net三个方向),学生到了大四可以选择进入这个班级,作为企业定向培训。这个班级分类学生很有意思: 1、 老师在网上下载了php、java和.net三个语言的基础教程,分发给大家 2、 每个人分别看入门教程各一天。(只许看第一章,不许动手写程序) 3、 然后选择自己“感觉看的最爽”的语言进行班级语言分类选择。 这就是一个很实践的帮助学生选语言的方式。 三、选一本好书 如果语言确定了,那么选一本书就很重要。 如果你没有项目经验,那么学一门语言基本上靠看网络文章是学不好的。必须买书,因为网络上很多技术文章都有各种错误,我写的也不例外。 一本书好不好,主要看第一章、中间一章和最后两章。基础讲得好,一般不会差。 高级章讲的好,一般也不会差。差的书在于基础部分讲的冗余、啰嗦、拖沓,到了高级章节一掠而过(实际上是写书的人自己也不会)。 看定价,除非书是精装版、经典版、国外版,如果死贵死贵的书,一般都是出版社找个有名声大牛,然后大牛找个专门写书的团队这边抄,那边摘。 四、不管什么不会都不能不会javascript 要么你打算这辈子就搞底层开发了(那么你还敢说你是初学者?还用我教?) 看看google带来的web去世和各种html5应用就知道,如果你还没有工作想学习编程,我建议你从javascript入手,如果这门语言你能学的得心应手,那么今后玩java一定不会玩的太木鱼。 五、Linux学习 微软不做老大已经很多年,大家一定很怀念当年vb6雄霸天下的年代。这个年代如果你还只会windows而对linux一点不会,那么已经不能称之为合格的程序员了。 据统计,学习linux很有助于你学习真正的开发语言。所以如果你一点基础都没有,不妨抛开一切所谓的语言,先把linux学一学,学到一定程度后你必然会觉得豁然开朗。 除非你记性太差,那么linux其实并不难学。 六、不要过早玩开源 这点其实很多忽视了,都以为学编程先弄个开源框架学习。一般来说,好的开源框架集结了多个技术大神多年来的技术经验和思想,你想在毫无基础的情况下学会必然会让你一头雾水。 正所谓:零基础学开源框架属于杀敌一千自伤八百,很不上算。当然也不排除有些奇葩能搞定。 太早玩开源好比早恋,弊总是大于利,但是运气好你成为大神的时间会缩短很多。 七、反向思维写程序 大部分程序员初学编程有个习惯,写完一段代码后想着如何优化。实际上这个办法适合大部分人,但凡事都有例外,并不一定所有人都能这么干并能干成功,反而越写越觉得没有信心,当你也有这种情况时请看下面方法: 这里有个我在一个技术大牛“回忆录”中看到的办法: 先按照教程学习,然后合上书、拔了网线,把刚才学到的内容用程序写出来,注意不要写太多。 编译通过后,进行反向思维,写一段性能更烂的程序,并时刻关注内存耗费情况。 再次编译通过后,重复上述步骤,再写一段性能更烂的程序,并时刻关注cpu耗费情况。 重复上述步骤数次后,你会发现你再也写不出比最后一段更烂的程序了,然后你会发现为了写更烂的程序你竟然把各种知识点都掌握了。 八、开个”淘宝店” 这个办法也是一个很有趣的办法,也是我道听途说来的,据说这个办法帮助了很多人“突然间”成为了程序员。 我有一个朋友的朋友,大学刚毕业,想做web程序员,结果死活学不会,但这货还就是想学,就是想做程序员,谁让他转行跟谁急。 苦于毕业后在家没有收入,于是这货没办法只能先开个淘宝店(自己有一些货源),然后边兼职做淘宝边上一些培训班。 好吧,没想到过了大半年: 1、 舍不得花钱买模板,这货竟然学会了css,还很精通,店铺自装修的挺精美 2、 这货发现原来dreamweaver是这么的好用 3、 最近已经能很犀利的把你的照片PS成裸照 4、 为了宣传自己的淘宝店,开了一个博客来宣传自己的产品(wordpress学会了) 5、 他突然发现自己会php了 6、 有段时间他的博客瘫痪了,在数据移植和恢复的过程中,他mysql基础学会了 据说现在开了微信服务号,正在搞微信接口开发,并熟练开发了html5页面。一个实战级的程序员就是这么从零开始产生了。 最后,想告诉大家,要成为程序员靠的是“装”(自学各种知识装进你的大脑),要成为优秀的程序员靠的是“逼”(生活压力逼着你进步),要成为大神那么要结合前两个,那就是装和逼双管齐下,简称装逼
2014,成为更好程序员的7个方法 程序员总是有很多的决定,不是吗?如果你的新年待办事项还是空白的话,那么可以考虑使用下面这些程序员的想法。即使是最聪明的人,也还有成长空间。以下内容摘录自 Kevlin Henney 的《程序员应该知道的 97 件事》。1. 在怪罪其他东西之前先检查自己的代码 质疑一下你自己和他人的预设情况。来自不同供应商的工具,可能内置有不同的预设,也有可能相同的供应商提供不同的工具。 当有人想你报告一个你无法重复的问题之时,去看看他们做了些什么。他们可能会做一些你没有想到的事情,或者是按照不同的顺序来做那件事。 我的原则是,如果我遇到一个我无法避免的 bug 时,我会首先考虑是编译器的错误,然后我就会去检查堆栈是否被破坏了。这可以通过跟踪代码来实现,可以有效地移除问题。多线程问题是另一个绞尽脑汁也不容易找到的错误来源,通常还伴随着机器的错误。当一个系统使用多线程的时候,所有的简单的代码的错误都会成倍地增长。不能依靠调试和单元测试去发现这样的兼容性问题,所以简单的设计是最重要的。 总之,在你怪罪你的编译器之前,请记住福尔摩斯的忠告:“当你把所有的不可能都排除了,那么剩下的东西,无论他有多么的不可能,都必定是真相。”Dirk Gently 也说了类似的话。 ——Allan Kelly 2. 持续学习 我们生活在一个有趣的时代。随着全球化的发展,你要知道有大量的人都能胜任你的工作。你需要不断地学习,以维持竞争力。否则,你会成为一个落伍的人,永远做着相同的工作,直到你不再被需要,或者这个工作被廉价外包给其他人的那一天。 因此,你打算做些什么呢?有些大方的老板会提供训练来拓宽你的技能。而其他的公司并不会给你空闲的时间和金钱去做任何的训练。所以为了工作的稳定,你需要为自己的教育负责。 这里是一些让你持续学习的方法清单。其中许多都能够随便在网上找到: 阅读书籍、杂志、博客、Twitter 和其他网站。如果你想对一个目标进行更深入的研究,考虑添加一个邮件列表或新闻组 如果你真想专注于某一种技术,那就动起手来——写一些代码 成为行业的顶尖人物可能会妨碍你的学习,你得尽量与导师合作。虽然你可以从任何人那里学到东西,但是从那些比你更聪明或更有经验的人那里你能够学得更多。如果你不能找到一个导师,那就继续去找 使用虚拟的导师。在网上找一些作者或者开发人员,他们写的东西你都会喜欢并且都会看的。订阅他们的博客 了解你所使用的框架和库。知道了他们是如何工作的,你使用起来就更得心应手。如果他们是开源的,你就很幸运了。使用调试器来单步执行,去观察他们内部是如何运作的。你将会看到那些真正聪明的人所编写和审阅的代码 当你做错了或者是在修复 bug,或者是碰到一个问题的时候,尝试去深入了解到底发生了什么。有可能其他人也遇到了同样的问题,并且把 2 他发布在了网上。Google 这时候就非常有用了 学习一样东西的一个好方法就是去传授和谈论它。当人们想要听你讲解并且想问你问题的时候,你就会更加积极地去学习。在工作中使用 lunch-’ n’-learn 方法,可以是一个用户组或者是一个本地的协会 加入或者创办一个研究小组(社区的模式)或本地用户组,可以研究你们感兴趣的语言,技术或者是法律 多去参加会议。如果你不能去,很多的会议都会把内容免费发布到网上的 想要长期通勤?听一下博客吧 你是否曾经在一个代码库上运行一个静态分析工具或者在你的 IDE 里看到一些警告?弄明白他们报告的是什么,为什么要报告 遵循高效程序员的建议,每年学习一门新的语言。至少学习一门新的技术或者是一个新的工具。弄一个分支出来添加上你的想法,以便你能够在你目前的知识库里使用 并不是你应该学的每一样东西都必须跟技术有关。学习你工作领域的一些东西,能够让你更加了解需求,并且能够给帮助你解决一些商业问题。学习如何提高工作效率,学习怎样更高效低工作是一个不错的选择 返回学校 如果你有《黑客帝国》里的尼奥那样的能力就好了,能够直接下载我们需要的东西到大脑里面去。但是我们并没有,所以必须花费一定的时间去学习。你不必每时每刻都在学习。一点点时间足以,比如一周一次,有总比没有好。我们总得有一些工作之外的生活。 科技发展如此迅速,我们不要被甩在后面了。 ——Clint Shank 3. 不要害怕破坏某些东西 每一个具有行业经验的人无疑曾在一个充满不稳定性的项目中工作过。这个系统是很难重构的,通常改变一个地方就会触及到另一个不相关的地方。每当要添加一个模块的时候,程序员的目标都是尽量少改动,在每一个版本中都是小心翼翼的。这就和把建造摩天大楼当做搭积木一样,容易造成灾难。修改对的时候是非常伤脑筋的,因为系统已经生病了。它需要一个医生,否则状况就会越来越差。虽然你已经知道了你系统发生了什么错误,但是你还是害怕“打破鸡蛋去煮你的煎蛋卷”。一个熟练的医生知道,为了做手术就必须开刀,而且她也知道开刀只是暂时的,而且很快就会愈合。对于最初的疼痛来说,做手术是非常有价值的,患者通常都会获得比做手术前更好的状态。 不要去担心你的代码。当你在做事的时候如果暂时被打断,谁会去担心呢?对改变的恐惧会让你的项目将进入这样的状态。花一些时间去重构项目会让你节约很多的时间。还有一个额外的好处就是一个团队面对这个损坏的系统的处理经验会让你们明白该怎样才能让它正常工作。要学会运用这些知识,而不是抵触他们。每个人都不应该把时间花在自己所讨厌的东西上。重新定义内部接口,重组模块,重构、复制、粘贴代码,并通过减少依赖来简化设计。你可以通过消除极端情况来减少代码的复杂度,他们通常会产生不当的耦合性。慢慢地将旧架构过渡到新的架构,边改边测试。试图在一个可能产生很多问题的大项目上进行一次大的重构,这些问题可能慧然你在中途就放弃之前所作的所有的努力。 作为一个医生,是不应该害怕切除患病的部位,以留出愈合的空间。态度是会传染的,并且会激励其他人去对那些一直拖延着的项目进行修改。去列出一个团队都感觉良好的项目的清单。虽然这些任务可能不会产生明显的效果,但你得去说服管理层,他们就会减少开支,加速对新版本的开发。永远不要停止关心代码的总体“健康度”。 ——Mike Lewis 4. 做专业的程序员 一个专业的程序员最重要的特征就是个人责任感。专业的程序员会对自己的生涯、自己的估计、自己的日程安排、自己的错误以及自己的作品负责。一个专业的程序员是不会把这些责任推给其他人的。 如果你是一个专业人员,那么你就会对自己的工作负责。你有责任阅读和学习。你有责任追赶业界及技术的潮流。而很多程序员都认为这是他们上司的工作。对不起,这是大错特错的。你认为医生也会那样做吗?你认为律师也是那样的吗?不是的,他们会利用自己的时间和金钱去学习。他们花费大量的下班时间去阅读期刊和做出计划。他们会时刻更新自己,我们也必须这样做。你和雇主之间的关系只是为了履行合同。总之:你的雇主承诺给你工资,你就得承诺去把这份工作做好。 专业的程序员会对他们编写的代码负责。如果他们不清楚代码是否会正常的工作,就绝不会轻易放出代码。试想一下,如果打算放出一个不确定的代码,你还有可能是一个专业的程序员吗?专业的程序员都不希望 QA 来发现他们的错误,因为他们如果不经严格测试是不会放出代码的。当然,QA 也许会找到一些问题,因为没有什么是完美的嘛。但是作为专业人士,重要的是我们的态度,我们决不能让 QA 找到什么问题。 专业人士都是团队合作。他们会对整个团队的未来负责,这并不是他们个人的工作。他们互相帮助,彼此教导,互相学习,甚至包括别人需要的任何时候。当一个队友倒下,其他人都会去关心,因为他们知道他们都有互相需要的时候。 专业的人士是不会容忍一大串 bug 列表的。一个巨大的 bug 清单是非常粗心的。一个在问题跟踪数据库里有成百上千问题的系统是粗心酿成的悲剧。事实上,在大多数的项目中,如果非常依赖问题跟踪系统,那么他们肯定总是粗心大意的。只有非常大的系统才可能会又这么长的 bug 清单,这个时候需要的是自动化的管理。 专业人士不会把事情弄得一团糟,他们会对自己的工作引以为豪。他们保持代码的整洁,结构的良好,而且便于阅读。他们跟随着默认的标准而且做出了很好的实践。他们永远不会趋之若鹜。假设你能够在医生给你做开放式心脏手术的时候灵魂出窍。这个医生有一个最后期限(只是字面意义上的)。他必须在心肺循环功能损失过量血细胞之前完成。你觉得他该怎么做?你是想要他们像典型的软件开发人员那样匆忙而且混乱吗?或者想要他们说“我待会儿再回来解决”?还是你要他们小心地遵循着纪律,抓紧时间,相信他自己的做法是目前可以采取的最好的方法。你是想要一片混乱还是专业精神呢? 专业人员得有责任感。他们会对自己的事业负责。他们会对代码的正常运行负责。他们对自己工作的质量负责。即使最后期限迫在眉睫,他们也不会放弃自己的原则。事实上,当压力越来越大的时候,专业人员甚至会对这些原则要求得更紧,因为他们认为这是对的。 ——Robert C. Martin (Uncle Bob) 5. 利用代码分析工具 测试的价值是在他们编程之旅的早期阶段就灌输给开发者的。今年来,单元测试,测试驱动开发,以及敏捷方法的兴起都被大量地用于开发周期的每一个过程。然而,测试只是众多能够提高代码质量的工具之一。 回到早期阶段,当C语言还是一个新兴的技术的时候,CPU 的时间和存储的形式都是非常珍贵的。第一个C语言编译器注意到了这一点,所以通过一些语义分析减少了便利代码的次数。这意味着在编译阶段,只能检测到一小部分的错误。为了弥补这个,Stephen Johnson 编写了一个叫做 lint 的工具,这个工具能够取出你的代码中的一些冗余,实现了在其相似的C编译器中已经去除的静态分析。然而,静态分析工具,会增加大量的无用警告或者是一些关于文体问题的不必要的警告。 当前,语言、编译器和静态分析工具的情况是非常不同的。内存和 CPU 时间现在也变得非常的便宜,所以编译器能够承担更多的错误检测。几乎每一种语言都至少拥有一个工具来检查违规的格式和常见的问题,不过有时,那些隐含的错误并不会被检测到,比如潜在的空指针引用。对于更复杂的工具,比如针对C的 SPlint,针对 Python 的 Pylint,都是可配置的,也就是说,你可以通过一个配置文件选择这个工具在命令行或者是 IDe 里要发出什么错误和警告。SPlint 甚至会让你在注释里注释你的代码,以给别人更多关于程序运行的提示。 如果一切都失败了,你发现你自己正在寻找一些你的编译器或 IDE 或 lint 工具没有捕获的简单的 bug 或者是一些违规行为,你就得收起你所有的静态分析工具。这并不像听起来那么困难。大多数编程语言,尤其是那些声称是动态的语言,都会把他们的抽象语法树和编译工具作为其标准库的一部分。去了解你正在使用的这个语言的开发团队的标准库的细节是非常有意义的,因为这样你就能发现一些有价值的东西,这对于静态分析和动态测试是非常有用的。比如:Python 标准库包含了一个反汇编程序,它会告诉你生成一些编译程序和目标程序的字节代码。这对编译器作者 python-dev 团队来说貌似是一个不起眼的工具,但是它实际上在日常工作中发挥着不同寻常的作用。这个库能够反汇编出来你最后一次堆栈跟踪的信息,这会给你恰当的反馈,因为字节码指令会把最后一次未捕获的异常扔在那里。 所以,不要把测试放在质量保证工作的最后,利用好分析工具,不要害怕把自己的错误展示出来 ——Sarah Mount 6. 和你的朋友一起使用 Ubuntu 哲学 所以很多时候,我们独立地编写代码,这些代码反映了我们个人对问题的理解,也反映了一个非常个性化的解决方案。我们可能会是团队的一部分,但是我们仍然会是独立的,因为这是一个团队。我们很容易忘记这些独立编写的代码会被其他人所执行、使用、扩展和依赖。这是在开发软件中容易被忽略的社交的一面。创造软件是一个混合了技术和社交的活动。我们只需要经常抬头,这样才会意识到我们并不是孤立地工作的,我们都有责任去提高个人成功的可能性,而不只是为了开发团队。 你可以在孤立的环境下写出高质量的代码,但这样会失去自我。从一个角度来看,那是一个以自我为中心的方法(不是自大,而是自我)。这也是一个禅宗的观点,他就是针对你编写代码那一过程的。我总是试着进入这个环节,因为它会让我离高质量更加接近,但那之后我就会陷入这个环节。我的团队现在处于什么环节?我的环节和团队的是一样的吗? 在祖鲁语中,Ubuntu 的哲学被概括为“Umuntu ngumuntu ngabantu”,可以大致翻译为“A person is a person through (other) persons.”(人与人之间是互相联系的。我会变得更好因为是你,通过你的行为让我变得更好。在另一方面,当我做自己的事做得糟糕的时候你也会在你所做的事情上变糟。对于开发者来说,我们可以这样理解“A developer is a developer throuth (other) developers.”(开发者与开发者之间是相互联系的),也可以说“Code is code through (other) code.”(代码与代码之间是相互联系的) 我写的代码的质量会影响到你写的代码的质量。如果我的代码质量很差会怎样呢?即使你写了很整洁的代码,但由于你会使用我的代码,所以你的代码也会降低到和我的代码质量差不多的地步。你可以使用很多模式和技术去降低损失,但是损失已经造成了。我建议你去做一些必须做的事之外的一些事情,这是因为当我在做自己的事情的时候我并不会去考虑你。 我会认为我的代码是非常整洁,但我还是认为如果我使用 Ubuntu 哲学我可以做得更好。Ubuntu 哲学到底是什么?它看起来就像是一段良好的整洁的代码。它并不是简单的代码,而是一件艺术品。它是跟创造艺术有关的行为。和你的朋友一起使用 Ubuntu 哲学将会帮助你的团队守住你们的价值观,增强你们的原则。如果有其他人在任何情况下接触到你的代码,都会变成一个更加优秀的开发者。 禅宗是有关个人的。对于一群人来说,Ubuntu 也是一种禅宗。我们几乎不会看到只为自己而写的代码。 ——Aslam Khan 7. 你必须关心你的代码 不用福尔摩斯我们就会知道好的程序员才能写出好的代码。糟糕的程序员嘛…就不会。他们会产生我们必须清理的垃圾。你想写出好的东西,是不是?那你其实就是想去做一个好的程序员。 优秀的代码并不会无中生有。它并不像行星对齐那样是靠运气才产生的。为了获得优秀的代码,你就得努力去争取。这有些辛苦。如果你真的关心优秀的代码你就会写出很好的代码。 优秀的程序并不单单来自技术能力。我曾见过一些有很高能力的程序员,他们能够写出给人很深印象的算法,他们把编程语言的标准烂熟于心,但是他们却写出了最糟糕的代码。这些代码阅读起来非常痛苦,用起来也痛苦,修改起来也痛苦。我也曾见过更多谦卑的程序员,他们坚持写出更加简单的代码,他们写出来非常优雅非常富有表现力的程序,和他们工作简直就是享受。 根据我在软件行业多年的经验,我得出了这样的结论,一般的程序员和伟大的程序员之间真正的区别是:态度。优秀的程序使用了专业的方法,并在现实世界的约束和软件产业压力之下尽量写出最好的软件。 代码的铺就都得有一个良好的计划。要想成为一个优秀的程序员,你就必须做出很好的计划,并且真正关心起代码——培养积极的观点,养成良好的态度。伟大的代码是由工匠大师精心打造的,绝不是由满湖的程序员或自称编码大师的程序员在不经意间就完成的。
【突破】程序员,请优先提高代码的可读性1 现在,当有人提及“优化”一词时,他们通常是指“优化执行时间”,除非他们明确表明要优化GPU的内存消耗,网络流量等等。 了解优化对象 当我开始编程时,所拥有的处理器执行速度很慢,内存空间也非常有限 —— 有时仅以KB衡量。因此,必须合理考虑内存的使用和优化。 在大学里,我们知道了优化的两个极端情况: 你可以牺牲空间来换取执行速度的提升, 或者通过执行重复操作来换取内存消耗的优化。 如今,没有人会太在意内存的使用(除了demoseners,嵌入式系统工程师,部分手游开发者),不仅是对于RAM空间,硬盘空间也是。 试想一下仅安装看门狗就耗费硬盘近25Gb 空间。 此外,我在谷歌浏览器选项卡中写这篇文章时,占用了130Mb的RAM空间。 实际上需要优化的对象有很多: 随着智能手机市场的增长,电量损耗的优化备受关注; 优化可读性可以让代码易于阅读和调试,从而缩短开发周期,降低开发成本; 还有很多优化类型,此处不再赘述…… 优化可读性——让代码更容易阅读、跟踪和理解。 你应该明白,你在优化时难以兼顾各个方面。 例如,当致力于性能优化时,你很可能让应用程序内存消耗增加,同时代码可读性也变差。 为何优化可读性 开发者大量工作时间并不是在编写代码,而是阅读代码,调试代码,查阅他人提交的开发文档,学习新的库等。 当阅读代码时,开发者实际上是充当代码解释器的角色(虽比不上计算机)—— 在他们的头脑中执行代码,并试图记住当前执行状态。 这就是程序员在阅读代码过程中被打搅脾气暴躁的原因。 时间== 金钱 你应该意识到一件很最重要的事,是你和你的同事浪费了大量时间。 即使是一个努力工作的开发者,在做下面的事时仍然浪费了大量时间: 实现一些现在不需要,以后也可能永远用不到的功能。 做一些没有实际价值的改进。 例如,花费一周时间优化一个函数的执行时间,而该函数在1小时内仅被调用10ms的时间。 编写的代码难以调试,却还要试图从中找出错误。 编写的代码他人难以理解。 注意,“他人”也可能是短短一周后的你。 上述情况是假设遇到问题的开发者经验丰富并且熟知高效算法和简洁代码如何书写,否则要列出的情况要更多。 优化可读性 唐纳德·克努特说过一句名言。 我敢打赌你听过很多次。 “在编程中,过早优化是万恶之源。 ” —— D.Knuth,1974 我遇到很多知道这句话的人,但真正理解这句话的却很少。 最常见的错误理解像这样: —为何这么简单的任务,代码却如此复杂? —我优化了X和Y,因为在将来…… —难道你没听说过早的优化是万恶之源吗? —当然,但这并不是过早优化,我能肯定这样做程序执行效率会更高。 我想这是由于对过早优化这个词没有明确界定的原因。 这就是这些人一点也不认为他们那么做属于过早优化的原因。 那么,我们该如何界定这个词呢? 过早优化——在工作系统中分析和运行测试前的任何优化尝试。 除可读性之外任何修改都属于过早优化。 所以,与其说一个人不应该做什么,不如说应该做什么。 那么,这句引言可以这样理解: 优先提高可读性。 什么阻碍了开发者阅读代码 好吧,我们一致认为,我们应该让代码更易于阅读,这样可以节约时间和金钱,对吧?但这究竟意味着什么? 有迹象表明,下面两个基本方面极大地降低了开发者阅读代码的速度: 代码晦涩难懂, 代码难以跟踪。 代码艰涩难懂 遗憾的是,人们并不能像软件解释器那样,可以不必理会将两个数相加并调用一个函数这部分代码的功能(机械式的编译)。 为了查找代码异常的原因,程序员必须理解源程序中编写的代码实现了何种功能,编写的初衷是为了实现何种功能。 什么让代码晦涩难懂? 下面情况是对于经验丰富的开发者而言,这些开发者熟悉代码开发使用的语言和程序中使用的算法(即他们有足够的知识来理解这段代码)。 代码不良。 单个字母的奇怪变量和1000行代码的冗长函数。 代码的格式不正确或不一致。 代码中包含冗余代码。 代码中包含未备注的低层次优化。 代码过于高明。 我将跳过前两条,因为无论如何你不应该阅读不良代码。 如果你所在的公司有人编写了不良代码,你应该纠正它们或者将其废弃。 当然,你必须为你的整个代码库执行严格的编程规范。 3. 代码中包含冗余代码 亦或所谓的行数优化。 嵌套函数调用和条件运算符的长行代码难以剖析。 当然,你可能会说这种观点是片面的。 但这些人觉得源程序代码越短越好,不必考虑可读性。 4. 未备注地层次优化 最初,代码的可读性很好,工作也很稳定,但有些人决定在某些方面对其进行优化。 经过认真剖析,这可能是一个很好的优化,但此时的代码看上去像是数组、位运算和幻数的结合体。 没有人知道代码在做什么,甚至代码应该做什么,因为完成优化的人没有提交任何说明。 也许你听说过优秀的代码不需要说明文档。 但是经过优化的代码(特别是优化效果很理想的情况)必须要有说明文档。 在你的代码库中,可能大部分的优化只是像这样的未备注行: if (val != val) { ... } 5. 代码过于高明 作为软件开发者,我们掌握越来越多的学术技巧并将其运用到实际代码开发中。 毕竟,我们是计算机科学家,而不只是码农! 有些语言甚至鼓励开发者使用前沿技术,使代码更具表现力和学术性。 当你用代码建立了一个非常健壮的系统,特别当你用数学方法证明了一个高深定理,而99.997%受过教育的人对这种方法都不理解,你就会有这种成就感。 即使代码被良好地封装成模块/类/函数并且这些模块包含完全可读的命令式代码,但其他人想要读懂这段代码,他们必须掌握整个代码的框架以及所有使用的相关技术和模式。 再一次强调,记住“其他人”可能就是一周后的你。 极可能这是我在工作中仅认识两个使用Scala语言人的原因。就我个人而言,非常喜欢Scala语言。 对我来说,它就是一个学术操场,我可以在那里建造玻璃城堡。 一旦你越了解它,它的越多特性也就能为你所用,你也就越明白它本质上只是一门编程语言(请不要在这里引用我!)。 虽不如Perl语言,但即使最漂亮的代码库也需要修改和更新。 现在,你需要寻找一个能够理解这些优美代码的人…… 简洁高明的代码难以阅读似乎是有争议的。 “软件调试要比编写代码困难一倍,如果你发挥了最大才智编写代码,那么你的智商便不足以调试这个代码。 ” —— Brian Kernighan
【探讨】程序员可以只关心技术么? 本文转自:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.csdn.net%2Farticle%2F2014-07-18%2F2820715&urlrefer=49e6dfb47658a668986cc657dec0bd28CSDN上有几个热心评论员,几乎每篇热门文章评论中都可以看到他们的身影,印象比较深的一个是一门心思批微软的技术,一个则是持Linux万能论。有时候他们的观点未必没有道理,关键的问题是视野太窄了,始终只盯着技术不放,不能说这一定不对,极客精神么,但大多时候程序员价值(尤其是现金价值)的实现不只取决于技术。 模式不一样 程序员价值也不一样 开源之外,软件是商业的延续,所以代码里大多时候也包含了商业利益,而不只是单纯的技术。商业利益依赖于商业模式,而商业模式决定了很多人的职业特色和路径,进一步决定了程序员可以只关心技术么这个问题的答案,比如:外包与产品开发在盈利模式上的差别直接决定了它对人员的不同要求。 在微软如日中天的时候,曾经有一本书叫《微软的秘密》里面讲了这样一个小故事: 我们中有些人对开发人员怀有极度的不满,那简直就是嫉妒。达瑞尔•希文斯是Windows NT的主要开发人员之一,他有9辆保时捷,我当然也希望能够拥有9辆保时捷。但我怨恨达瑞尔么?当然不。他绝对受之无愧,他真的棒极了。如果用我的支票来给他开工资,我也愿意。不过从长远来看,过一两年你肯定就能得到应得的报酬。如果由于某些原因,我们引入了达瑞尔,并付给他足够买9辆保时捷的薪水,而他一旦干得不够好,就不会在这里工作很久... ...但这些开发人员都是精心挑选出来的人才......唯一的不利之处在于,总有一部分人感到开发人员才是“主角”,但这正是这一行业的本质。 假设一个人技术也和上面说的达瑞尔一样牛,但是在外包的模式里面,那它可能达到上面的程度么?答案是不可能,因为模式限制了纯技术角色所可能创造的价值,进一步预先定义了技术路径长短的极限。 当一个公司的核心技术并没有创生多大价值,而是需要靠人力规模、商业模式等来支撑业务的时候,那么我们可以称之为技术路径短的公司。想象一下,如果一家公司专门承接本地化工作,那么也许也会需要程序员编制某些工具,但对程序员而言技术路径无疑是短的。 如果暂时把眼光从程序的世界移开,那么事情就可以看得更清楚。 在盖楼的时候,只要达到基本的质量,一个人每天砌200块砖,固然比砌100块要好的多,但相对于大楼而言,多砌100块砖,所多带来的价值有限。再进一步由于砌每块砖的价值是固定的,同时一个人每天所能砌的砖也是有限度的,这就会导致砌砖工人,不管多么努力,其收入水平必然会被限制到某一个较低的水平,只要他的工作还只是砌砖,而不是设计师或别的什么。这种限度是由这一工作的内涵所决定的,倒不是谁遭到了歧视。 再类比到软件行业里,单纯的在既定接口下实现已定义的业务逻辑就是技术路径比较短的工作,是体力密集型的;而分析业务逻辑,控制整体架构或者去研究TTS的算法则是智力密集型的,技术路径较长。 这样一来上面问题的答案就更清楚一些了。如果你所处的地方其商业模式允许较长的技术路径,那就可以更多的关心技术,否则就要横向展开而不能只盯着技术。 程序员的两个进阶模式 这背后事实上隐含了两种进阶的模式: 一是达到一定高度横向展开。比如:编程语言,(金融)业务逻辑,外语,网络知识等组合在一起就可以成为一个高地,这里面编程语言上一个人可能不如天才程序员,业务逻辑上可能不如银行员工,外语可能不如专职翻译,但每多一重过滤,就会导致高地的海拔拔高一分,最终转换为稀缺性。 一是彻底的专家型道路。有的岗位可能不需要把面扩的很宽,比如做TTS,OCR的算法,有些人甚至编程语言都可能不是了解的很熟,但确实可以是某一方面的专家。这同样是一种价值高地。在这个方向上,一旦真的达到一定高度,那就不是单纯的累积数量可以超越的。比如:认为100个或多少个平庸的科学家等价于一个爱因斯坦无疑的是愚蠢的。 而考虑这种进阶模式时要与自己身处的环境相结合。一般来讲越大越牛的公司越能支持比较专业化的分工,创业公司怎么可能有人去钻研OCR算法。上述观点在创业公司上展开就会关联到近来总有人说的全栈不全栈的话题,全栈显然走的是横向展开的路数,它在初期打造产品的角度上性价比比较好,但技术深度肯定会弱些。但全栈工程师确实会比较契合于小团队靠产品打天下的模式。 这类横向展开的关键是:你可以完整的搞定一件很有商业价值的事情,而这件事情大多数人搞不定。比如说: 我可以主导开发一款手机,因为我即懂软件又懂硬件,也还知道如果开发一款良好的产品。 我可以带领队伍搞定这个银行的整个系统。 …… 最后想补充的两点是: 年青的时候总是希望有一个迅速解决问题的方法,比如如何搞定一份好的简历再搞定一份好的工作?如何和上级谈涨工资成功几率比较大?近来V众投上也在探讨这类问题,比如:大家都是怎么跟领导提要求涨工资这事儿的? 一份好的简历应该有哪些内容? ……对此我的观点是不能说这类技巧不重要,但是在年纪小时,这些都没有确保自己在一条正确的增值路上重要。而怎么走在正确的增值路上,很多人也希望有一个立刻且明确的答案,而不耐烦做点思考,偏偏这也是不可能的,你最少要考虑怎么在指定环境下更好的去增值,怎么提高自己的表达力,怎么选择合适的平台,怎么创造自身的稀缺性。 另一点补充是写上面这些文字时没考虑兴趣的影响,更多的考虑的是利害,因为兴趣是绝对主观的,想干什么就干什么好了,一个人如果确实认为兴趣更重要,那就可以忽略上面的观点,只做自己喜欢做的事情。
【突破基本功】你需要立刻突破的十大编程禁忌
公司做项目的几点经验总结(个人经验) 首先作为一个低级码农,写这篇文章是需要一点勇气的。。哈哈哈。。。毕竟自己也才做了几个小项目而已,没有资格高谈阔论。反正就是希望给一些不知道的人一些思路,知道的活就不用看了。本文是从程序员视角进行分析。 1.项目的注释。 这是一个很大的而且很严重的问题,一般只要公司不做强制性要求的话,至少我们部门,我很少看到能有自觉写注释的人。这就导致了一个问题,如果那个人的方法写得很复杂,或者命名不规范的话,又没有注释,当然雪上加霜了,结果就是,其他人看那个人写的代码,不说看不懂,调不通,至少也会花费大量的时间去做,去弄清楚哪些东西,从而浪费了大量的时间。 2.只去关心自己做过什么。 大家也许会说,我做项目的话,为什么要关心别人写过的代码呢?我只要把自己做过的事情做完就行了。反正工资又不会少我的,其实这种想法也不是错的,但是大家有没有想过这么一个问题:如果只是关心自己的代码,自己学到的东西,是不是很有限?你有一个苹果,我有一个苹果,交换过来,1个人还是只有一个苹果,你有一个思想,我有一个思想,交换过来每个人就不止一种思想了,所以吸取别人的经验,可以在以后的编程过程中,少走弯路。 3.知其然而不知其所以然。 打个比方:有些人说,我做事,调用公司的框架,把事情做出来就行了,何必去关心这些东西是怎么实现的? 排序调用一下方法,数据库连接调用一下方法,分页调用一下方法,所有的东西都是用现成的就行了。我说这些的目的,并不是说要大家完完整整的写一遍,因为公司要求的是快速开发,肯定是用框架好些,但是我只是想让大家有这种研究的想法,毕竟,去研究一下,钻研一下,对自己以后的程序的长期发展也有好处。 4.做自己不喜欢做的事情。 这一点大家也许会想,我就是一个码农,难道还要挑三拣四?要我做什么就应该做什么啊。其实我想说,你给老板打工,老板选择你,其实这是双向选择,没有谁欠谁的道理,就拿我来说,我喜欢JAVA,但是我们部门有搞JAVA的,也有搞.NET的,本来JAVA搞得好好的,我被抽过去搞.NET,导致了兴趣不足,我也有很多牢骚,因为部门就我一个懂JAVA &.NET的人,哈哈,然后我找到老板,单独谈话,说明了我想在下一个项目搞JAVA而非.NET 的意愿,试想一下,如果我不说,老板以为我什么都懂,弄不好下一个项目还会让我搞.NET,我说这些的目的是:在允许的范围内,要争取自己的权益,毕竟,我们和老板都是双向选择的。 5.客户提什么要求,我就做什么。 这点大家也许经常在做项目的时候会碰到,一下子又来了一个新的需求,然后又使劲的迎合客户,反正就是只要钱没拿到以前,就会不停的做,不停的做。大家有没有想过,其实我们可以主动出击,把项目做好,而不是等客户来挑毛病,因为客户大部分不是软件专业的,他也不懂,他反正觉得怎么好看就怎么样改。其实主动发现问题,也是一种能力。 6.为了钱才去工作。 这一点我是写给入行 不久的人的,因为作为我个人来说,我是因为兴趣才走上编程的道路的,但是我知道很多人编程的目的就是为了养家糊口,并不是特别感兴趣,作为 年轻人,其实不要想上司给很多工作,然后又没给多少钱,自己做的事情和创造的效益不相符合,于是产生不满情绪。其实反过来想,我学到了东西,我拥有的是年轻,当我知识到了一定程度以后,如果他不给我加工资,我可以跳槽啊,我就可以有跟下一个老板谈钱的资本。 7.人与人的沟通能力 试想一下,你在一个公司里面,然后的话,你总是一个人在搞自己的东西,碰到了问题也不去问别人,总是以自己的思路解决,有时候,确实可以 解决问题,但是会走很多弯路,如果多与人沟通,就可以借鉴别人的思路,毕竟,项目是一个整体,这就是所说的团队意识。3个臭皮匠,顶个诸葛亮。 好了,就说这么多,菜鸟不才,如有不好的地方,请大家指出来。
从1.5k到18k, 一个程序员的5年成长之路 昨天收到了心仪企业的口头offer, 回首当初什么都不会开始学编程, 到现在恰好五年. 整天在社区晃悠, 看了不少的总结, 在这个时间点, 我也写一份自己的总结吧. 我一直在社区分享, 所以, 这篇总结也是本着一种分享的态度, 希望相比我还年轻的同学们, 可以从中找到一些让自己成长更快的文字. 先介绍下背景: 1. 2008年3月开始学习编程, 目前2013年3月; 2. 2009年6月计算机专业本科毕业; 3. 大学期间, 基本稳拿班级倒数第一, 高考英语49分, 大学英语除了补考没及格过. 接着, 是一份总结: 1. 5年间60%以上的时间, 每天凌晨2-4点睡觉; 2. 为学习编程花费的总时间超过6000小时; 3. 手写了超过50万行代码; 4. 记录了超过100万字学习笔记; 5. 录制了两份视频教程; 6. 翻译了小型技术文档5份以上, 5个php扩展的官方文档, jqueryui官方文档一份, 书籍<php扩展和嵌入式> 7. 供职过4家公司; 8. 获得两次优秀员工; 下面是这几年的流水, 本人没有过硬的文采, 只是以流水的方式记录, 希望可以激励到别人, 仅此而已: 2008年03月 -- 2008年10月, 一个偶然的机会, 看到了北京尚学堂的java视频教程, 以此为起点, 我开始了自己的编程学习之路. 5月份汶川地震, 我在甘肃, 学校给通宵电, 在这段时间, 我就基本很少去学校上课了, 每天晚上学习到凌晨5-6点, 接着睡到10-11点, 每天两袋1.3元的方便面, 其余所有的时间都用来学习. 这段时间, 我学会了基本的程序设计, 更重要的是, 视频中, 马士兵老是给我灌输了影响我后来最重要的两个观念: 1) 不要怕英文, 出错信息, 文档, 都是学习英文的机会; 2) 不要怕出错, 出错就是学习的机会. 在后来的5年中, 我一直坚持, 我是从基本每个英文单词都要查翻译软件, 到现在能翻译一些东西的. 同样, 我在碰到问题的时候, 都是自己跟踪源代码去解决. 这两个观念直接决定了我今天可以进入自己心仪的企业. 2008年10月 -- 2009年1月, 这段时间, 宿舍搬到了校本部, 没有通宵电了. 学校一位老师找我们帮他做项目, 他为我们提供了他的宿舍, 很烂, 但我依然搬进去了, 就为了通宵电, 我住进了这个阴森森的宿舍, 恐惧缠绕着我, 但我依旧坚持. 白天帮老师做项目, 晚上继续自己的学习. 同样, 我也很感谢这位老师, 虽然他只给了我们很少的报酬, 但是, 我知道, 我得到的远远不是这些报酬可以比拟的. 这里这种很容易满足的心里也是很重要的, 我奉劝各位职场新人, 刚开始不要期望什么, 放低身段, 去做自己的积累就好了. (想起从社区里看到的一句话: 现在的你, 凭什么翘着二郎腿, 你应该放下你的腿, 身体前倾, 时刻保持战斗姿态) 2009年02月, 一个小插曲, 我独自一人来到北京, 开始了第一次真正意义的独立, 我来找工作. 我开始在网上投了10多份简历, 没有回信. 接着我就急了, 直接从网上找招聘的公司, 查地图, 直接去公司面试, 一般都还是会给面试机会的. 最好的成绩是一家表示能给到3000左右, 但后来也没信了. 这段时间, 我有两个收获: 1) 我打印了一整本的<Java数据结构与算法>, 20天的时间, 把基础的数据结构与算法读了一遍; 2) 在一个完全陌生的城市, 我独自一人, 查招聘信息, 查地图, 找公司, 厚颜无耻的霸王面, 这一切都是对我处世能力的极大提升. 2009年03月 -- 2009年06月, 回到学校, 仍然没有工作. 我继续在老师的小黑屋, 实现了所有我找工作时学习的数据结构与算法. 接着, 就进入了毕业季, 每天都泡在酒精中, 浑浑噩噩. 这段时间, 老婆把工作签到了山东淄博, 我也联系了一家淄博的公司, 准备毕业后去面试. 这段时间, 和高中的毕业季一样, 是值得怀念的, 放松, 惬意. 2009年06月 -- 2010年03月, 我来到了淄博, 找到了之前联系的公司, 面试没有通过. 淄博是一个小城市, 做软件开发的没有几家, 还好, 山东人好, 虽然没有面试通过, 但我依然可以借宿在公司宿舍找工作, 就这样, 我放下了所有的尊严, 在别人的宿舍借住, 15天后, 我找到了我的第一家公司. 公司有30人左右, 做国家电网的项目, 老板人很好, 我还得到了一台笔记本电脑, 并且可以带回家. 我每天加班到9点, 然后回家继续学习大凌晨2点左右. 公司的工作相对轻松, 当然, 工资也很少, 只有1.5k. 老婆每周末都过来, 我们虽然没有钱, 经常要靠吃方便面度日, 但我们很幸福. 这段时间, 我学习了python, javascript, 翻译了jqueryui的文档, 录制了一套python的视频教程, 录制了一份fullcalendar的视频教程, 我的生活非常的充实, 当然, 我还有另一个收获: 我学会了吃苦. 冬天, 我住的小屋窗户基本起不到保暖作用, 买个小电暖也起不了多少作用, 屋里水龙头都已经结冰, 我很长时间每天需要吃两包方便面, 但我依然坚持学习, 因为我知道有一天我将不再这样. 2010年03月 -- 2011年03月, 从后来很多次建议来看, 不得不说老婆很有眼光. 她建议我去北京找工作, 我请了3天假, 再一次来到了北京, 不同于上一次, 我现在有大半年经验, 我翻译过文档, 录制过视频教程, 有一定资本了. 然而, 事情并不是那么顺利, 当时期望的用友并没有通过, 在用友面试完后, 我就觉得自己一无是处. 无奈, 只能退而求其次, 来到一家刚创业的游戏公司. 跟这家公司谈完薪水后, 我先给妈妈打了电话, 5.5k, 已经到了妈妈不能相信的地步. 就这样, 我正式的踏入了北京的土地. 一年中, 我更多的是为公司付出, 自己以javascript研发进入, 后来页面制作也的我搞, php后来我也要做, 服务器我还要搞, 不得不说, 非常锻炼人. 还是前面的态度, 我觉得这种锻炼就是我最大的收获, 从这里开始, 我正式的转向php开发.到2011年3月的时候, 已经觉得公司很不行了, 又碰巧老婆怀孕, 不得不考虑结婚的事情, 因此, 我就辞职, 回家结婚. 2011年04月 -- 2012年03月, 婚后的生活很好, 我又找到了一份工作, 这家公司相对比较大, 2000+的规模. 不过有一些体制内的特质, 我进入的薪资是6k, 全年能拿到18薪以上, 公司的福利待遇都很完善, 工作也相对轻松, 我的领导人也很好, 技术也很好, 就这样, 在这家公司, 我又开始了自己的学习之路. 我继续每天凌晨2-3点睡觉, 完成了这几年最重要的积累: unix环境高级编程, unix网络编程, php内核和扩展, shell/awk/sed等等最基础的东西. 同样, 在大公司中, 我也学会了更多的团队协作, 同事关系方面的东西. 2012年03月, 公司一位副总跳槽, 就这样, 我们小组集体来到了下一家公司. 2012年03月 -- 2013年03月, 新的公司, 项目还没有上线, 已有的东西问题诸多, 我们被委以重任, 6.1日上线. 旧的团队存在诸多问题, 士气不振, 技术水平不足. 我们在6.1之前完成了很重要的几件事: 1) 提升团队士气; 2) 整理旧的框架不好的东西; 3) 修改大量的bug; 4) 规范工作流程; 5) 规划未来的技术框架. 虽然后来看做的东西一般, 但在这么短的时间完成这一切, 我觉得实在难得. 虽然我一直自我感觉对自己更多的提升是自己业余时间的学习, 但不可否认, 在这家公司的一年中, 我在团队建设, 团队管理, 团队协作方面也有了质的变化. 在这家公司, 我的薪资得到了很大的提升, 达到了18K, 这是我从来都没有想过的事情. 所以, 我想给诸位职场新人说, 你不要一开始就想要这要那, 只要你做的够好, 终有一天, 你会发现你得到的远比失去的要多. 后面这两家公司中, 我觉得更重要的是我学会了一种处世方式, 首先学会听别人说话, 然后自己做感悟, 做提升. 流水的结束, 就是在昨天, 我收到了自己心仪公司的口头offer, 并且也已经给现在的公司提出了离职. 和leader聊了一会儿, 大家都还挺开心. 在前5年中, 我用的网名是selfimpr, 是self-improvement简写而来, 含义是: 自强不息. 5年中, 我从所有可能激励我的地方去激励自己, 让自己可以一直坚持走到今天. 这几天, 我在考虑, 用一个词总结我的前5年. 我想, 这个词就是"积累". 这也正是我想给这个行业的后来者说的, "积累", 并且要是不计回报的积累, 因为你一旦太过计较回报, 你的心就很难平静, 往往就会半途而废. 此外, 还有一点要说的是, 比我基础更差的同学估计也很难找了, 所以, 能不能学有所成, 关键不在你是否有基础, 而在于你付出了多少. 接下来, 我已经更换了自己的网名goosman, 是从swan goose演化而来, 我不知道"鸿鹄"用英语怎么说, 就用了这个单词, 希望我可以像书中所说, 利用自己前5年的积累, 一展鸿鹄之志.
一个Java程序员应该掌握的10项技能
三年总结 2007年那个暑假至2010年那个难忘的10月,我做了三年JavaEE开发。 时常感觉自己是井底之蛙,有时也阿Q自己,然后继续憧憬北京&积蓄力量; 有多个通宵嗑瓜子喝可乐看电视剧的自在,也有多次梦中写代码调bug的惊魂之夜; 有无数加班的烦躁,也时常痛快畅饮。 有浓浓的失落感,也略有一丁点成就感; 有大悲也有窃喜,有小得也有大失; 不想过于感伤,也不必过于缅怀! 向恩师以及那些曾经一起战斗的兄弟们致敬! 此致。 言归正传,本篇代码全部是JavaSE相关的。 为什么? 1)若不分享,这些代码就是躺在电脑里的一堆0和1,虽日久天长也不会发霉,但确实更像是没价值的数字垃圾。 2)虽然没啥“高科技”的代码,但总有需要它们的人。 有什么? 1)自己写的例子:或是为了在项目中应用某项技术而写的demo,或是为了纯粹学习某项技术而写的demo。 2)网上下载的例子:或改过或没改过,或完善过或原封没动。 没什么? 1)公司项目的源代码(这个真没有,虽然可以有,虽然已经离职2年有余) 以后若有时间,可以将项目源代码中的某些技术(并不是什么高深的技术)提炼出 来发帖子或博客,分享之。 `2)公司业务紧密相关的测试代码。 1、DataStructure:有3个演示排序算法的类,冒泡排序、插入排序和选择排序。 2、JavaSortDemo:插入排序、希尔排序例子。 3、DownLoadDemo:实现网络下载文件功能。 4、JavaDB:实现JDBC连接Oracle数据库以及演示调用存储过程。 属性文件中配置数据库连接基本参数: DRIVERS=oracle.jdbc.driver.OracleDriver URL=jdbc:oracle:thin:@localhost:1521:ctcmc USER=demo PASSWORD=demo 5、JavaDesignPatterns:仅仅一个工厂设计模式的例子。 6、Javaenhance:传智播客java加强课程的一个工程,有:自动注入、AOP、反射、类加载器等等。 7、JavaIODemo:Java IO常用类的演示。 8、JavaMianShi:一些Java面试题目的示例代码。 9、JavaSocketDemo:Java网络编程,实现Client与Server文件传输功能,有TCP、UPD两个版本。 10、JavaStaticTest:静态变量、静态成员、静态域的一些测试。 11、JavaTest:数组、日期类、异常的小测试。 12、JavaThread:多线程开发相关的例子,比如:生产者、消费者的实现。 13、javaTTD:一本敏捷开发书籍的例子(如果不看书,代码本身参考价值不大,太久远了,书名我忘记了)。 14、JavaZip:实现将目录压缩成zip包及将zip解压缩的例子(当时项目中需要这样的功能,这个例子应该是从网上下载后做过修改)。 15、jpaDemo:Java Persistence API的一些演示代码(存放jar包的某些目录已删除了,所以工程中的jar包有缺失,如有需要自己网上找全jar包吧)。 16、JunitDemo:Junit使用方法的一些演示代码。 17、luceneDemo:全文检索引擎工具包lucene演示代码。 zygLucene工程也是lucene相关的一个例子。 18、RegexTest:演示正则表达式的一些代码,有实现统计代码量以及字符串处理相关方法。 19、zygJavaDBPool:演示数据库连接池使用方法的例子。在MS SQL Server、Oracle上测试过。 20、ZygParseXML:演示XML解析的例子,也有构造XML文件相关的代码。 以上20个工程源代码下载地址:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fdownload.csdn.net%2Fdetail%2Fm_changgong%2F4891374&urlrefer=c84e49809b9f37b94ba529e25afbdbed 严重声明:以上代码仅供参考学习,若照搬到项目中出现严重Bug被TeamLeader骂,被老板骂,被客户骂。。。,给工作、生活带来毁灭性打击,本人概不负责! 未完待续。。。<a href="baidu.com"></a>
转贴:代码介绍:创建自定义的HTML5输入框出错信息 | 极客标签 | ... <iframe height=100% width=100% src="http://www.gbtags.com/gb/rtwidget-replayer/98.htm" frameborder=0 allowfullscreen></iframe> 代码介绍:创建自定义的HTML5输入框出错信息 | 极客标签 | 在线编程知识分享学习平台来自:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.gbtags.com%2Fgb%2Frtreplayerpreview%2F98.htm&urlrefer=64313a9b57e4aa4976b0a4fc85a164ae
儒家第三圣,荀子! 孔子提到过了。
楚阳和万圣真魔有什么区别? 改善别人的资质,让别人心里忠诚于自己。更能操控别人。与万圣真魔不一样的是,他不能吸收别人的功力罢了。但是这与万圣真魔也没有什么不同吧。
各位大神,能够讲诉一下你们曾经做过的项目 跪求项目……
凡人修仙传PK仙逆 魔天记PK(求魔+我欲封天) 忘大与耳大是不是要打架的前奏啊???
目测土豆大姨夫来了吧!老毛病犯了,每本书都这样,不愧"拖豆"之名 各位觉得如何呢?貌似"拖豆"还是单身喔,可能过节去了吧
尼玛的补更补了几年了。 走过路过,不要错过。
看这么久了,出来冒个泡 土豆的老招数就是说欠更会补,然后爆出来之后就说是爆发,然后果断求票,我都腻了
升官(下)以更3小时,吧务呢? 我只能说,这北京时间的地方差太远了吧!
T108前来报道,各位同学多多指教 人生难得几回秀,秀出风采,秀出自我
刚去起点转了圈,结果看到了这个……
越看越觉得快要烂尾了……诸位,是否有同感。 魔前一叩三千年,回收凡尘不做仙.
每当我看到小说里面觉得好的句子,我都会到本吧里面来增加人气 --离歌难言一曲眷恋,啼音昆仑遍。 --往事断弦无声有念,情觞江湖前
我只能说,他两天没更新还不找接口,我的百连签断了 我只能说,难道每个人的人品都会随着自己的出名度变得越来越差
山之巅,我欲登之。歧路之难,止于本心! 山之巅,我欲登之。歧路之难,止于本心!山之巅,我欲登之。歧路之难,止于本心!
山是山,水是水……山是水,水是山 萧萧琴声雨,铮铮铁剑鸣。 山高水长,鸟语花香,完美世界。 修仙不孤单,长生需自在,逍遥需齐天。 蔚蓝世界,无我不浩瀚,天地为尘埃。 我予你世界,你回我完美。
隐星辰,灭世灯,横空一掠留空城。闯千关,除万难,佳人离去... 隐星辰,灭世灯,横空一掠留空城。闯千关,除万难,佳人离去断心肠。我为七彩神皇掌人间,却憾寻觅天下无所恋……
同学过生日,有没有什么介绍的地方啊,价格实惠啊…… 都是一些学生党……拜托……
1
下一页