程序员

什么是API

倖福魔咒の 提交于 2019-12-17 01:19:02
阅读编程资料时经常会看到API这个名词,网上各种高大上的解释估计放倒了一批初学者。初学者看到下面这一段话可能就有点头痛了。 API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。——百度百科 这篇文章我们就来通俗易懂地解释下什么叫做 API,你只需要花费1分钟时间。 从文件操作开始谈API。 以C语言为例,我们使用fopen()函数可以打开一个文件,感觉非常简单。文件保存在硬盘上,要经过复杂的处理才能显示,这些细节对我们来说是透明的,由操作系统完成。也就是说,我们调用fopen()函数来通知操作系统,让操作系统打开一个文件。 那么,我们如何告诉操作系统打开文件呢? 看似简单的操作到底层都非常复杂,打开文件首先要扫描硬盘,找到文件的位置,然后从文件中读取一部分数据,将数据放进I/O缓冲区,放进内存;这些数据都是0、1序列,还要对照ASCII表或Unicode表”翻译“成字符,再在显示器上显示出来。这个过程如果要让程序员来完成,那简直是噩梦! 怎么办呢?操作系统想了一个很好的办法,它预先把这些复杂的操作写在一个函数里面,编译成一个组件(一般是动态链接库),随操作系统一起发布,并配上说明文档

干掉你程序中的僵尸代码

谁说我不能喝 提交于 2019-12-17 00:35:03
几乎所有我接触过的代码库里都四散着很多小段的,甚至大片大片的被注释掉的代码。这就是僵尸代码。 为什么称它们为僵尸代码?你知道,僵尸不并不是真的死的。就像恐怕电影里告诉我们的,尽管僵尸看起来是死人,但它们仍有能力四处出没袭击我们。相同的道理,僵尸代码也是处于不生不死之间…它们在伺机搞砸我们的工作。注释掉的代码还活着,它们就存在我们的代码库中。程序员在维护和重构代码时会和它们遭遇,通常是滚动屏幕时和它们擦肩而过,或是在进行关键词搜索时和它们撞个满怀。但这些代码也确实是死的,因为它们在软件产品中并不执行。因此,这些僵尸就应该被烧掉,立刻。 僵尸代码不死之躯 我认为,有两个原因导致了僵尸代码的肆虐:懒和害怕风险。懒程序员对代码有收藏癖。他们缺乏确信的勇气和清楚的认识去删除无用的代码,于是他们就把它们隐藏在注释里,期望有朝一日它们能复活来再次祸害人。代码需要经常的、有计划的删除,因为优秀的程序员都知道:代码就是债务。越少越好。当然,被注释掉的代码仍然是代码。 烂程序员也许会争辩说,他们注释掉这些代码是为了“万一”以后有人会需要它们。事实上,这好心反而是害了大家。这实际上说的是害怕风险,缺乏对版本控制系统作用的信任。有版本控制系统在,删除的代码永远不会真正的死掉。它们被埋到棺材里但却活着。所以,注释代码的方法没有多大实际效用。 对于程序来说,注释掉的代码跟删掉的代码一样,不起任何作用

怎样才能算是在技术上活跃的小公司

时光怂恿深爱的人放手 提交于 2019-12-16 20:46:23
  今天和小伙伴们聊了一个晚上,也得益于最近经常面试。所以对怎样判定一家小公司在技术上是有活跃的公司,有了一些自己的领悟。   作为一个程序员,不管在什么样的环境中,一定要认清自己的本质,不断的提高自己的技术才是你的核心价值(打算走技术路线的)。你不学习新的技术,过几年就会被淘汰。所以不管在什么情况下,我们都要寻找机会和途径学习新的技术。   小公司的特点,崇尚快速迭代,快速应对市场变化。从技术的角度来讲,就是任务繁重,重复性、简单性工作居多。   我们不要奢望小公司能成立一个专门的技术团队,一心一意的培养团队。现实是,小公司连一次培训也不会搞的。但是万事总有相对,相对来说,什么样的小公司,才能称得上是技术活跃的呢?   首先,我们分析一下,在什么状态下,我们技术进步的最快。在我们遇到问题时,这个问题可能有千万种解决方法,但是刚好你先前想过类似的问题,或者在论坛或者博客上看过问题解决的方法。这个过程,你会感觉时间流逝的很快,并且心情非常的愉悦,并且最后你还会分享出你在这个问题中获得的经验,以后还是一个炫耀的资本。(消耗时间)   再有,可能你的这个解决问题的方式,需要你的几个同事配合,或者跨部门配合。那么就困难了,如果你一个人可以解决的,那么还可以偷偷的自己玩一下。但这个情况下,你也许要说服你的同事帮你。更糟糕的事,这件事可能会惊动你的主管。然后等你说的口干舌燥以后,主管的态度是

软件设计的哲学:前言

戏子无情 提交于 2019-12-16 16:38:52
01 前言 80多年来,人们一直在为计算机编写程序,但令人惊讶的是,关于如何设计这些程序或什么是好程序的讨论却少之又少。关于软件开发过程(如敏捷开发)和开发工具(如调试器、版本控制系统和测试覆盖工具),已经有了相当多的讨论。还广泛分析了编程技术,如面向对象编程和函数式编程,以及 设计模式 和算法。所有这些讨论都是有价值的,但是软件设计的核心问题在很大程度上仍然没有触及。David Parnas的经典论文“关于将系统分解成模块的标准”发表于1971年,但是在随后的45年里,软件设计的技术水平并没有超过这篇论文。 计算机科学中最基本的问题是问题分解:如何把一个复杂的问题分解成可以独立解决的几个部分。问题分解是 程序员 每天都要面对的核心设计任务 ,然而,除了这里描述的工作,我还没有在任何一所大学里找到一个以问题分解为中心主题的类。我们教循环和面向对象编程,但不教软件设计。 此外,程序员之间在质量和生产力方面存在巨大差异,但是我们很少尝试去理解是什么让最好的程序员变得更好,或者在我们的课堂上教授这些技能。我曾与一些我认为是优秀的程序员的人交谈过,但是他们中的大多数人都很难清楚地表达出那些给他们带来优势的特定技术。许多人认为软件设计技能是一种天生的天赋,是不能被教授的。然而,有相当多的科学证据表明,在许多领域的杰出表现更多地与高质量的实践有关,而不是天生的能力(例如,杰夫•科尔文高估了才能

想进大厂拿月薪3W的Java程序员,技术面试不应该是你的拦路虎

坚强是说给别人听的谎言 提交于 2019-12-16 15:51:05
这是传说中程序员的一天: 8:00 闹铃第N遍响起,木然起床; 9:00 地铁里各种气味交织,拼命把手机端到脸前; 10:00 嚼着公司楼下的煎饼,开始敲敲敲敲敲代码 12:00 随着外卖小哥的到来,开启午间娱乐时光,组队王者,排位吃鸡,偶尔也窝个觉…… 14:00 睁眼继续,回邮件,敲代码 16:00 PM来撕需求 18:00 被leader叫去,催进度 19:00 饿了,订餐,或者等着公司的加班餐 21:00 撸完最后一行代码后,点上一支烟,等着bug来袭 23:00 到家,改bug到深夜夜夜夜,洗洗睡吧 看到这段文字有多少人感同身受?我中招了,浑浑噩噩的往复,默默看着理想老去,难道这是当初走上“攻城狮”道路时想要的生活? 行业内竞争越来越激烈,我们先来看看招聘需求的结构性变化: Java的招聘总量在减少,但 中高端职位 数量 从未减少 ,甚至还有 增加 的趋势,这说明行业变得成熟起来,但对我们Java同学们来讲,却不得不面对越来越严峻的挑战: 不进则退的危机越发明显 。 看看我们都遇到了什么: 好不容易得到了阿里P6/P7的面试机会,当被面试官问到JVM相关问题时,好看的面试官同学一张嘴: 在讨论技术方案时: 这时候,你是缺少相关经验而毫无头绪,只能毫无存在感得听着,还是有着清晰的思路,娓娓道来,你愿意做哪个? 当我们遇到挑战Java高薪躲不过的坎时,很多人都难逃被暴虐的命运

你可以把编程当做一项托付终身的职业

落爺英雄遲暮 提交于 2019-12-16 14:54:38
编程的意义是什么,我又为什么要编程呢?这是一个不时会浮现在我脑海中的问题,它来得并不频繁,但每次却都伴随着对自己职业生涯或人生目标的质疑而产生,令我感到些许困惑和不安。而在这十几年的职业生涯中,我也似乎总能在每个阶段为自己找到一个继续热爱编程的理由,直到它已无法解答再一次疑惑的产生。就这样一次又一次的循环往复,我似乎渐渐理解了编程的意义…… 编程是一项技能 回想大学毕业刚成为一名程序员时,自己对技术是如此狂热,我不断地购买各类技术书籍,几乎所有的业余时间也都被用来钻研技术,提高自己的编程能力。我也因此很快成了同一批入职新人中,编码效率和质量最突出的一个。而在那段时间里所做的技术积累,也成了我日后工作的坚实基础,编程作为一项技能已经深深地嵌入到了我的身体里。 即使到了今天,我仍非常怀念那段心无旁骛,一心钻研技术的日子。我为能在工作中写出的每一行优秀代码而兴奋,更为每一天能在技术上取得的点滴进步而喜悦,一切都是那么单纯,编程的意义对于那时的我来说就在于技术本身。 编程是去解决问题 “能力越大,责任也越大”,这句电影“蜘蛛侠”中的经典台词同样适用于程序员的职业生涯。随着技术能力的提升以及工作中获得的认可,我的职位也由原来的初级程序员变为了资深开发工程师,以及后来的架构师。相应的,除了编程之外,我工作中的很大一部分时间需要用来与用户进行沟通,并分析他们提出的需求

Python高级应用程序设计任务

僤鯓⒐⒋嵵緔 提交于 2019-12-16 12:34:00
一、主题式网络爬虫设计方案(15分) 1.主题式网络爬虫名称 58招聘网站爬虫 2.主题式网络爬虫爬取的内容与数据特征分析 爬取58同城上面发布的职位信息,分析不同地区薪资水平等。 3.主题式网络爬虫设计方案概述(包括实现思路与技术难点) 通过分析爬取58招聘当中不同城市的同一种职位信息,以程序员为例,通过分析其网页特征来使用python代码切换不同的城市页面,再通过BeautifulSoup库获取其网页标签内的内容来爬取我们所需要的程序员职位数据,之后保存进csv表格内,再通过提取出不同城市程序员的薪水当中的最大值进行绘制柱状图。 技术难点:58招聘的内容较多,在分析其网页结构可能会比普通的求职网站要来得复杂一些,并且注意识别其中一些广告内容。 二、主题页面的结构特征分析(15分) 1.主题页面的结构特征 58招聘网站中的城市与网页地址中的头两个字母有关,通过使用不同的城市中文拼音简写来实现切换不同的城市页面 顶部是搜索栏,之后是筛选器,而之后就是职位列表了 2.Htmls页面解析 查看查看内部标签可以看出职位信息被写在id为list_con的无序列表里的列表项目<li>标签内,且class都是job_item clearfix。 3.节点(标签)查找方法与遍历方法 (必要时画出节点树结构 ) 通过遍历所有的class为job_item clearfix的li标签

几款主流的 Python IDE

社会主义新天地 提交于 2019-12-16 04:22:46
选自:GoogleAIblog 转自:机器之心 作者:魔王 本文介绍了多个 Python IDE,并评价其优缺点。读者可以参考此文列举的 Python IDE 列表,选择适合自己的编辑器。 写 Python 代码最好的方式莫过于使用集成开发环境(IDE)了。它们不仅能使你的工作更加简单、更具逻辑性,还能够提升编程体验和效率。 每个人都知道这一点。而问题在于,如何从众多选项中选择最好的 Python 开发环境。初级开发者往往面临这个问题。 本文将概述最受程序员欢迎的 Python IDE,以及其他值得考虑的选项。在此之前,我们先来看看 IDE 是什么。 什么是 IDE?IDE 有什么用? IDE 是开发者创建程序时使用的软件包。它通过简单的用户界面集成多个高度关联的组件,从而最大化程序员的生产效率。本质上,IDE 是一种改进代码创建、测试和 debug 流程的工具,它使这些工作更加简单。 IDE 使用的工具包括: 文本编辑器 编译器和/或解释器 装配自动化工具(assembly automation tool) 调试器(debugger) 有一个与 IDE 相似的术语——代码编辑器(code editor)。我们先来探讨二者的异同。 什么是代码编辑器? 代码编辑器是一个能够突出显示语法和安排代码版式的文本编辑器。高级代码编辑器可以开发和修改代码。 IDE 和代码编辑器的显著特征

年底了,整理了一份程序员面试必看的文章合集

情到浓时终转凉″ 提交于 2019-12-15 23:47:25
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 本系列文章整合了本号发表和转载过的,有关技术招聘干货、笔试面试经验和技巧、简历、招聘等方面的精品文章,希望对想要找工作,以及正在找工作的你,能够有所帮助。 原创面试干货文章 校招季到来,你可能需要这一份求职作战计划! 记一次面试腾讯的奇葩经历 阿里巴巴实习生招聘 不完全指南 如何修改个人简历?一些过来人的经验 应聘腾讯,面试官和我聊了一个小时的人生 看过太多大厂面试题,其实考的无非是这 3 点能力 简历上的项目经历怎么写 ?这 3 条原则不可忽视 ! 改了 3 年的技术简历,终于能让面试官看顺眼了 当面试官说 “你还有什么问题想问的” ,你该如何回答? 百度面试两板斧:手写算法问基础 技术面试干货文章 应届生求职面试真的有那么难吗 面试想拿20K,HR说你只值14K,该怎样回答? 不用找了,Java 的面试就问这些! 从面试官甄别项目经验的角度,说说如何在简历中写项目经验(Java后端方向) 面试题:如何设计一个权限系统? leetcode 刷500道题,笔试/面试稳吗? 6 年 Java 老兵 BAT 面试心经 面试了 N 个候选人后,我总结出这份 Java 面试准备技巧! 经验分享:五轮面试,阿里offer到手!!! 从面试官的角度谈"面试" 一位资深Java的阿里系公司实战面试经验,套路还是面试官的多