程序员

程序员千万不要学算法!

非 Y 不嫁゛ 提交于 2019-11-28 16:53:16
“程序员必须会算法 ?” 程序员对算法通常怀有复杂情感,算法很重要是共识,但是否每个程序员都必须学算法是主要的分歧点。 很多人觉得像人工智能、数据搜索与挖掘这样高薪的工作才用得上算法,觉得算法深不可测 。但是这些其实都不是具体的算法,而是一系列算法的集合。 对初学者来说,为避免片面或抽象地理解算法,可根据几个问题 评估自己是否适合学习算法 : 学习算法最重要的是什么? 在学习算法的过程中,一能解决问题,二对自己有用,是最大的推动力 。而那些抽象的,与程序员日常工作关系不大的竞赛题,很难提起大多数人的学习兴趣。最好能通过工作中应用的一些案例来切入,利用碎片化时间入门算法,提升技术竞争力。有了兴趣之后就可以尝试将算法尽可能的优化,并套用到一个完整的项目中。 “学习算法很难”,怎样降低难度? 从基础来讲,要学习算法, 至少要非常熟练地掌握一种排序算法 ,各种线性表的插入、删除算法,树的遍历和插入、删除算法,图的遍历算法等。 多学习掌握一些常见问题的解决模式 ,比如穷举算法如何应用,动态规划算法如何应用。最后要勤思考已经掌握并解决的算法,复盘为什么用这种方法解决,有没有其他方法,类似的问题怎么办,提高举一反三的能力。 编程和数据挖掘算法的区别与联系? 编程算法只是算法的一种表达形式,还可以用表格或流程图来表达算法。数据挖掘领域涉及的算法和其他领域算法只是问题域不同

算法(第4版)

有些话、适合烂在心里 提交于 2019-11-28 16:53:05
内容简介 Sedgewick 之巨著,与高德纳 TAOCP 一脉相承 几十年多次修订,经久不衰的畅销书 涵盖所有程序员必须掌握的 50 种算法 《算法(第4版)》全面讲述算法和数据结构的必备知识,具有以下几大特色。 算法领域的经典参考书:Sedgewick 畅销著作,反映了经过几十年演化而成的算法核心知识体系; 内容全面:全面论述排序、搜索、图处理和字符串处理的算法和数据结构,涵盖每位程序员应知应会的 50 种算法; 全新修订的代码:全新的 Java 实现代码,采用模块化的编程风格,所有代码均可供读者使用; 与实际应用相结合:在重要的科学、工程和商业应用环境下探讨算法,给出了算法的实际代码,而非同类著作常用的伪代码; 富于智力趣味性:简明扼要的内容,用丰富的视觉元素展示的示例,精心设计的代码,详尽的历史和科学背景知识,各种难度的练习,这一切都将使读者手不释卷; 科学的方法:用合适的数学模型精确地讨论算法性能,这些模型是在真实环境中得到验证的; 与网络相结合:配套网站 algs4.cs.princeton.edu 提供了本书内容的摘要及相关的代码、测试数据、编程练习、教学课件等资源。 作者简介 Robert Sedgewick,斯坦福大学博士,导师为 Donald E.Knuth,从 1985 年开始一直担任普林斯顿大学计算机科学系教授,曾任该系主任,也是 AdobeSystems

程序员常用的刷题网站

不问归期 提交于 2019-11-28 16:52:32
1、Lintcode Lintcode.com ——LintCode网站是国内较大的在线编程&测评网站。此网站提供各大IT公司的算法面试题类型,行分门别类,由简单到中等,再到难,便于不同水平的程序员进行刷题练习。同时网站支持多种语言(Java, Python, C++),方便不同语言特长的程序员利用擅长语言进行刷题练习。因此对于不同编程能力水平、不同职位需求的人来说都是非常有用的刷题网站。 [注:网站 http://www.jiuzhang.com/solutions 提供LintCode & LeetCode所有题目的最优答案,程序员们可以在此寻求解答,或是找到进步空间] 2. ACM之家 http://www.acmerblog.com/ - ACM之家,全球大学生ACM竞赛交流互动的平台,包含POJ、HDU、ZOJ等在线OJ解题报告,相关经典算法收集整理,以及知名IT企业的面试题,大部分题目难度较大,不太适合初学者,但确是对于ACM竞赛者深入学习的极佳的刷题网站。 3.CodeVS http://codevs.cn/ CodeVS, OI 在线测试题库,是阶梯式系统,用户可以通过不断的联系来提高自己的水平和排名。网站主要针对高中生和初中生,题目大多是初高中生编程竞赛的题目。适合初高中编程爱好者进行刷题学习&相互交流。 4、HackerRank hackerank.com

什么样的程序员才是牛逼的程序员?

故事扮演 提交于 2019-11-28 16:51:08
恰好最近在反省自己的日常生活,感觉每天做些增删改查、枯燥无味的工作, 对于现在的我来讲,学会且能够享受生活就是牛逼,对于其他行业一样。 写代码十年了,现在也还坚持要让自己写写代码。 * 第一层能力,编码能力。用你掌握的语言把描述中的算法编写出来,运行正确。逻辑比较复杂的代码,比如说五层以上的循环,各个层内有判断和处理,能看透能定位问题。或者其他语言写好的核心级别的代码块,能重新编码成另一语言的版本。这一层能力决定了程序员之路能走多顺畅多块。 * 第二层能力,分析推理。从需求文档到对象设计,能有多快多准确。一个问题或者变更,要动哪层哪块代码,动多少,工作量多大。还有,这个需求后续最有可能跟着哪些需求,这个问题后面会隐藏着什么其他缺陷,如何改进,工作量多大。这一层能力决定对技术理解深入到什么级别,对客户业务需求理解有多深入,对软件架构有多了然于胸。 * 第三层能力,销售水平。客户提出的需求,有的是对他重要对你则稍微改动即可,你是免费还是收费,收的话收多少合适。项目管理所谓进度质量成本三角,数据库的速度一致性数据量三角,根本是取舍之道。程序员要生存要发展,人生就是干活,作品的价值,售出的价格三角的平衡。不能只从自己的视角看自己的东西,要从团队客户商业战略角度多审视。所以要提高销售水平,和bug斗也要学会别被人斗,万一斗起来自己能有概率反杀。 * 第四层能力,意志力。这个不用展开

只因写了一段爬虫,公司200多人被抓!

孤人 提交于 2019-11-28 16:35:53
“一个程序员写了个爬虫程序,整个公司200多人被端了。” “不可能吧!” 刚从朋友听到这个消息的时候,我有点不太相信,做为一名程序员来讲,谁还没有写过几段爬虫呢?只因写爬虫程序就被端有点夸张了吧。 朋友说,消息很确认并且已经进入审判阶段了。 01.对消息进一步确认 朋友认识几个律师朋友,和他们有一些业务来往,得知他们想尝试把业务扩展到程序员这个群体。那段时间我刚好离职也有时间,在朋友的安排下一起聊聊看看有没有合作的机会。 他们为什么想扩展人群到程序员这个行业呢?其实就是因为他们代理了这名程序员的官司,才发现很多程序员完全不懂法,直接说是法盲一点都不过分。 刚好我也很好奇程序员因爬虫被抓这个案子,看看到底是怎么回事,就和两名律师以及朋友坐到一起,深入交流后才知道整个事件的来龙去脉。 这名程序员在被警察逮捕后,警察审问期间 一直不承认自己触犯了法律 ,并且也完全没有意识到自己犯法了。进去之后总以为警察搞错了,过几天就会把自己放出来,结果也 错过了取保候审的机会 。 律师说,这名程序员的妈妈当时在他毕业的时候,就因程序员这个行业太辛苦不同意他做程序员,但他对这个行业一直都很感兴趣,坚持做了一名码农,没想到两年后出现了这个事情。 他们家里人都后悔死了,距离事发当日到现在已经过去了半年,当事者还被关在监狱中。不管这件事如何收尾,对这名程序员和他的家庭都是一个很大的打击。 以下内容根据

没有学历可以做程序员吗?

六眼飞鱼酱① 提交于 2019-11-28 16:35:40
最近在抖音上,有蛮多的朋友问我,能不能在没有学历的情况下,去报个培训班,2万来块钱,学编程, 比如某鸟,某内等,我没有在抖音上一一回答,今天把这个问题总结下,写成一篇博客来详细说明。 大家问的问题大致如下: 没有学历可以做程序员吗? 初中学历可以做程序员吗? 中专可以做程序员吗? 英语不好可以做程序员吗? 年纪大了可以学编程吗? ​​​​​​​ 我的回答是: 可以,只要你目的明确,有兴趣,就行。 行归行,但是如果不想付出,就想做程序员拿高薪,我劝你还是去找点别的事情做。不要浪费时间来学这个了。 很多人学这个的目的,其实无非就是想找个工资高的工作,改变下生活质量,走上人生巅峰。 就业问题: 低学历出路: 没有学历,可以去外包公司或者创业公司。 没有学历和有学历,先不说学历接受能力如何,从结果角度来说,在找工作的时候非常明显。 因为80%的公司,在招聘时候,是明确要求本科学历的,有些知名大企业明确要求第一学历是985学校的,比如某讯,某为。 没有学历,如果你能付出时间,精力把编程技术联练到炉火纯青,能独当一面,放心,你出来找工作,虽然去不了某讯,某为等 知名企业,但是可以去一些IT外包公司锻炼下,比如软通动力,中软国际等等类似的公司,他们对学历要求不会要求特别高, 还有部分小型创业公司,也不会对学历要求特别高,但是对技术要求特别高。 说到底,就是如果你 没那个金刚钻就别揽那个瓷器活。

程序员必知的七种并发编程模型

浪子不回头ぞ 提交于 2019-11-28 16:34:48
1.线程与锁 线程与锁模型有很多众所周知的不足,但仍是其他模型的技术基础,也是很多并发软件开发的首选。 2.函数式编程 函数式编程日渐重要的原因之一,是其对并发编程和并行编程提供了良好的支持。函数式编程消除了可变状态,所以从根本上是线程安全的,而且易于并行执行。 3.Clojure之道——分离标识与状态 编程语言Clojure是一种指令式编程和函数式编程的混搭方案,在两种编程方式上取得了微妙的平衡来发挥两者的优势。 4.actor actor模型是一种适用性很广的并发编程模型,适用于共享内存模型和分布式内存模型,也适合解决地理分布型问题,能提供强大的容错性。 5.通信顺序进程(Communicating Sequential Processes,CSP) 表面上看,CSP模型与actor模型很相似,两者都基于消息传递。不过CSP模型侧重于传递信息的通道,而actor模型侧重于通道两端的实体,使用CSP模型的代码会带有明显不同的风格。 6. 数据级并行 每个笔记本电脑里都藏着一台超级计算机——GPU。GPU利用了数据级并行,不仅可以快速进行图像处理,也可以用于更广阔的领域。如果要进行有限元分析、流体力学计算或其他的大量数字计算,GPU的性能将是不二选择。 7.Lambda架构 大数据时代的到来离不开并行——现在我们只需要增加计算资源,就能具有处理TB级数据的能力

2019年9月中国编程语言排行榜

眉间皱痕 提交于 2019-11-28 16:33:47
2019年9月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.54% 2 cpp 16.38% 3 c_sharp 12.79% 4 javascript 12.59% 5 python 7.68% 6 go 7.25% 7 php 4.52% 8 matlab 1.47% 9 lua 0.83% 10 swift 0.82% 11 perl 0.64% 12 ruby 0.32% 13 delphi 0.32% 14 kotlin 0.31% 15 typescript 0.22% 16 vba 0.11% 17 rust 0.10% 18 objective_c 0.08% 19 haskell 0.02% 20 visual_basic 0.01% 21 julia 0.00% 工资 排名 编程语言 平均工资 中位数 最低工资 最高工资 招聘人数 百分比 1 haskell 22159 19778 7500 45000 66 0.02% 2 rust 19868 16984 5000 50333 376 0.09% 3 julia 18875 21500 2500 30000 4 0.00% 4 lua 18011 16500 5000 35000

python线程互斥锁Lock(29)

自闭症网瘾萝莉.ら 提交于 2019-11-28 16:28:49
在前一篇文章 python线程创建和传参 中我们介绍了关于python线程的一些简单函数使用和线程的参数传递,使用多线程可以同时执行多个任务,提高开发效率,但是在实际开发中往往我们会碰到线程同步问题,假如有这样一个场景:对全局变量累加1000000次,为了提高效率,我们可以使用多线程完成,示例代码如下: # !usr/bin/env python # -*- coding:utf-8 _*- """ @Author:何以解忧 @Blog(个人博客地址): shuopython.com @WeChat Official Account(微信公众号):猿说python @Github:www.github.com @File:python_thread_lock.py @Time:2019/10/17 21:22 @Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累! """ # 导入线程threading模块 import threading # 声明全局变量 g_num = 0 def my_thread1(): # 声明全局变量 global g_num # 循环 1000000 次,每次累计加 1 for i in range(0,1000000): g_num = g_num + 1 def my_thread2(): # 声明全局变量

程序员起底大调查,学历专业经验哪个更重要?

梦想与她 提交于 2019-11-28 16:24:28
很多人可能对程序员有误解,恨不得认为程序员都是从娘胎里就开始学编程的,在本次调查中,学习或从初次接触编程算起,有20年或以上学习经历的程序员占17.2%,而很大一部分程序员仅学习了三至六年编程。 程序员都编了多少年代码? 编程是一个实践出真知的职业,从学习开始就是不断练习,不断修正的过程。值得注意的是,下表是对职业开发人员的年限统计,所以与上述学习经验比重略有出入。这张图表也反映出程序员似乎是个比较“年轻”的行业,四分之一的程序员拥有一至四年经验,相比较而言,拥有10年以上职业编程经验的人数较少。 就Web和移动开发人员而言,比其他行业的开发人员(如系统管理和嵌入式编程)拥有较少的职业编程经验。在所有开发人员中,软件行业是新人才的主要孵化器,但是经验较多的开发人员比例相对较低。例如,软件公司60%的移动开发人员具有不到五年的专业编码经验,而其他行业的移动开发人员则为45%。 在专业开发人员中,11.3%学习了一年编程便获得了一份工作。在全球范围内,南亚地区的程序员在开始职业生涯之前的平均编码年限最少,欧洲大陆的程序员经验最丰富。 程序员男女比例: 男性似乎一直是编程的主力军,但近年来,女性编程人员的比例也一直在增长,但长期来看,男程序员还是占大多数。 性别也和所从事的编程工作类别相关: 上图中虚线表示所有编程工作男女平均比,可以看出来,在数据科学家,移动和网络开发