IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

开发者

共 800 篇文章

IT 2015-02-26 14:11:47 / 累计浏览 2,720

如何通过互联网出版一本小书

这篇讲的是作者如何将一篇“写一本书”的愿望清单落地,并分享其中关于工具、渠道与心态的完整实践经验。 工具上,他推荐技术作者使用GitBook,因为它支持Markdown、能一键生成多种电子书格式,并可拖拽调整章节。他也坦诚提到了早期版本在中文支持上遇到的小坑,建议可搭配其他编辑器使用。 分发渠道部分对比详细:自建页面如SelfStore流程简单但需自行推广;百度阅读自带编辑器且支持版权控制,但平台流量有限;多看、亚马逊等主流平台则需通过BookDNA等代理上架,作者指出这类代理虽能扩大覆盖面,但存在收益反馈滞后和版权授权的风险。 最重要的是心得:他发现2-3万字聚焦细分领域的“小书”同样有出版机会,这打破了必须靠篇幅“凑数”的传统观念。作者鼓励技术人员从经营系列博文开始,逐步积累,未来无论是自出版还是联系出版社,都会更为从容。这为许多想系统化整理知识但畏惧“出书”工程量的人,提供了一条清晰的轻量路径。

本机暂存
IT 2015-02-26 14:10:02 / 累计浏览 2,505

互联网公司和软件工程那些事

这篇从作者在新浪的一次通宵加班经历讲起,具体描绘了当年大型项目开发时,团队如何在高强度工作中依然面临延期困境。由此,他开始了对软件工程的长期思考。 作者的核心发现是,延期问题的根源往往在于需求定义的粗糙。在他后来负责新浪云计算项目时,通过将需求分解到技术实现级别,做到了以小时为单位的精准排期,将延期控制在极小范围内。这揭示了互联网时代需求与开发关系的本质变化。 在质量控制方面,文章分享了两个生动实践:一是为降低技术门槛而设计的LazyPHP框架,二是通过资源配额实现代码优化的新浪云平台策略。同时强调,单元测试、编码规则等硬性指标必须集成到发布系统中,形成自动化约束。 最终,作者提出了一个前瞻性观点:传统的“软件工程”概念已经过时。他主张未来会走向“产品工程”,即以产品为核心、以天为周期的全流程迭代,并认为大型技术团队将分化为平台支撑与业务实现两类角色。文章融合了个人实战经验与行业趋势洞察,对互联网时代的技术管理方式提出了独到反思。

本机暂存
IT 2015-02-20 22:23:05 / 累计浏览 3,762

野兽派游戏

这篇讲的是一个IT创业者从虚拟世界走进传统行业后,对“成功”与“生存”的重新思考。 作者从自己转行做摄影服务出发,发现传统行业环环相扣的链条远比专注一个点的IT复杂。为了突破行业瓶颈,他甚至被迫去“颠覆”印刷业。在应对创业焦虑和外部不确定性的过程中,他提出了“野兽派”的生活哲学:像野兽一样,把“保持活着”视为最根本的成功标准。 他将这种心态具体化:房子本质是居住空间,买或租只是形式;工作应追求满足感而非仅为了生存;无需被股票、学区房等社会设定的规则耗尽精力。这种回归本质的视角,帮他剥离了大多数不必要的恐惧与负担。 文章最终落脚于一个启发:当我们卸下社会灌输的复杂标准,用野兽般的简单逻辑看待生活,很多焦虑和抉择会变得清晰。生存本身就是一场可被我们掌握规则的游戏,而真正的挑战,在于找到能带来深层成就感的“游戏”。

本机暂存
IT 2015-02-14 14:03:34 / 累计浏览 9,109

一个大二学生有关如何成为一名软件工程师的疑问及答复

这篇文章记述了一位资深工程师对一位迷茫的大二学生的答复。学生困惑于课堂所学(如C和Java)与实际软件工程师岗位要求之间的差距,不知如何规划发展路径。 作者首先共情了这种校园学习与产业需求脱节的普遍感受,并指出“终身学习”对软件行业的必要性。他清晰地拆解了软件工程师的核心工作:一是开发,涵盖需求评审、文档编写、代码实现、测试与版本提交;二是维护,包括修复测试bug、解决现场问题及制作升级包。 基于此,作者总结了工程师需具备的能力:硬能力(专业基础、编码与文档能力)和软能力(分析解决问题、沟通、抗压等)。对于在校学生,他建议通过多动手编程、参与项目、社团活动和假期实习来有意识地培养这些能力,制定个人化的学习计划。 回复并未停留在说教,而是通过拆解职业全景,将“如何成为软件工程师”这个模糊问题,转化为具体、可行动的能力培养清单。希望这位同学的疑问,也能给其他迷茫中的读者带来一些方向感。

本机暂存
IT 2015-02-03 22:13:35 / 累计浏览 4,062

在回调和闭包中的内存泄漏

这篇讲的是事件编程中回调和闭包常见的内存泄漏陷阱。作者从自己遇到的实际问题出发,展示了 kraih 提供的一个经典案例:在闭包外声明的变量,被闭包内递归调用的子程序所引用,导致变量引用计数无法归零,内存就泄露了。 文章不仅指出了问题,还给出了具体的检测方法。比如使用 Devel::Cycle 模块可以直接找到循环引用,或者更简单粗暴地用压力测试(一个无限循环配合 ps 命令)观察内存占用(RSS)是否快速飙升。根因被归结为闭包无意中捕获了外部变量的引用。 对于修复,作者分享了两个经验:一是显式地将函数自身作为参数传递,避免它引用外部的同名变量;更推荐的方式则是将逻辑封装成类(例如用 Moo),让闭包通过 `$self` 来调用方法,这样既能清晰地管理状态,又能避免回调嵌套导致的复杂引用链。对于依赖 AnyEvent、Mojolicious 等框架进行异步编程的开发者,理解并避开这些坑至关重要。

本机暂存
IT 2015-02-03 21:34:49 / 累计浏览 4,161

保持高效与精力的一些方式

这篇讲的是作者被同事追问“为何能高效工作12小时”后,整理出的一套个人精力与效率管理方法。他并非谈论高深理论,而是从极其具体的日常细节切入:比如固定在7:50起床、严格按时吃饭,用日历明确每件事的“人、地、目标”。 文章最精彩的部分在于对“开会”的拆解——会前定目标,会中能站不坐、能手写不打字,讨论不清的暂放,明确的立即落实责任人与时限,严控会议不超过45分钟。这套流程像给会议装上了“效率阀门”。 他还分享了一些简单却容易被忽视的习惯:睡前用“脑内复盘”享受解决问题的快感,并梳理未解决的难题;用一个不妥协的闹钟战胜赖床;多和同事开玩笑,让自己常笑。 最后作者很实在地提到,别被不切实际的鸡汤绑架,多想想如何把手头的事做顺;得意时听听批评,失意时看看鼓励。整个分享没有宏大口号,全是可复用的具体动作,核心是建立节奏、保持实在。对于同样面对高强度多任务工作的人来说,这套从作息到心态的“土方法”或许比任何时间管理理论都来得直接有效。

本机暂存
IT 2015-01-27 22:32:54 / 累计浏览 3,545

Python文件操作函数简介

作者从Python与C语言的文件操作对比切入,展示了两者在函数层面的一一对应关系。文中列出了open、read、write、seek等关键函数,并指出Python在语法上更为简洁直观。 文章的核心价值在于其实用性。作者没有停留在理论对比,而是直接进入IDLE环境,用一份具体的TestFile.txt文件,逐步演示了每个函数的用法。从用不同模式打开文件,到读取全部或单行内容,再到写入字符串和利用seek进行精确定位,每个步骤都附有清晰的交互代码和结果。 这种“边学边练”的写法,让读者能立刻在本地环境中复现实验。对于刚接触文件处理的开发者而言,这无疑比纯理论讲解更友好,能帮助他们快速建立对Python文件I/O的直观认知并掌握基础操作。

本机暂存
IT 2015-01-25 21:42:37 / 累计浏览 2,143

谈谈选择

作者从自己的高中时期讲起,对物理和化学的热爱最终因高考分数与专业选择的现实考量,转向了新兴的软件工程专业。文章梳理了从高考填志愿、大学毕业考研还是工作,到城市与公司风格转换的一系列重要人生节点,并由此展开对“选择”的思考。 作者的核心观点是,专业选择在很大程度上决定了职业赛道,其长期影响远超第一份工作或学校背景,因为换行业比跳槽的代价大得多。他结合亲身经历强调,在职业早期主动接触多样性的环境和项目,短期未必立刻见效,但长远来看价值非凡,这比盲目追求成功学或宏观规划更为实际。 文中也坦诚地讨论了决策过程中的信息局限性,并以科普作家卢昌海从物理转向计算机为例,说明当事人做出的选择往往有其合理性。最终,作者将视角落回日常,认为培养良好的思维与工作习惯,是应对未来无数个大小选择的基础。

本机暂存
IT 2015-01-24 23:30:28 / 累计浏览 5,490

GitHub中的README.MD文件编写语法

这篇讲的是如何用Markdown语法快速上手编写GitHub项目的README文件。文章开篇点明了README采用Markdown格式的最大优势:语法简洁,学习成本低,因此被WordPress、Joomla等众多内容管理平台和博客系统广泛支持。 文章主体并非泛泛而谈,而是聚焦于编写README时最常用、最实用的语法。它详细演示了如何设置大、中、小各级标题,使用星号或下划线实现斜体与加粗。对于展示代码片段,介绍了通过制表符缩进形成单行或多行文本框的方法。此外,还讲解了用大于号实现层级引用,以及灵活创建无序和有序列表的方式。文末也触及了行内式和参考式超链接的基本写法。 对于想快速为项目添加一份清晰、美观说明文档的开发者而言,这篇文章提供了直接可用的语法速查和入门指引,能帮助新手在短时间内掌握README的核心编写技巧。

本机暂存
IT 2015-01-24 23:15:57 / 累计浏览 2,402

C++ 传参时传内置类型时用传值(pass by value)方式效率较高

这篇文章从《Effective C++》的经典条款出发,深入探讨了一个C++开发者常感困惑的问题:函数传参时,应该用传值(pass by value)还是传引用(pass by reference)?作者指出,这个选择并非一概而论,而是取决于参数的类型——文章特别对比了内置类型(如int、指针)与自定义类型之间的行为差异。 为了验证这一结论,文章提供了清晰的代码示例和关键的汇编代码对比。核心发现在于:对于int这类内置类型,传值(`int f(int i)`)编译生成的x86汇编指令更简洁,参数直接通过寄存器传递,效率最高;而传常量引用(`int g(const int &i)`)则多了一次内存间接访问的步骤,尽管微小但在极热路径上可能产生影响。文章也点明了反向情况:当面对存在构造与析构开销的自定义类型时,传引用才能避免不必要的复制成本。此外,STL中的迭代器与函数对象本质上是指针,因此遵循内置类型的规则。 作者通过这次代码级的验证,不仅重申了一个有效的实践准则,更通过底层视角加深了理解:效率的考量必须结合类型特性。这提醒我们,在追求代码“优雅”的同时,也不应忽视特定场景下符合硬件行为的朴素写法所带来的切实性能收益。

本机暂存
IT 2015-01-24 23:14:56 / 累计浏览 4,887

struct与class区别联系

这篇讲的是C和C++中`struct`这个看似相同的关键字,其实内核大不相同。作者开篇就指出了核心区别:C中的`struct`是“原生”的,仅仅用来将一组属性打包成一个整体,没有任何面向对象(OO)的特性。而C++中的`struct`则是在此基础上做了深度扩展,它完全兼容C的用法,但更重要的是具备了OO特性——事实上,C++中`class`能干的事情,`struct`几乎都能干,包括继承和多态。 文章通过一个直观的代码示例验证了这一点:如果在纯C环境下(例如用GCC的C模式编译),在`struct`内部直接定义成员函数会导致编译报错;但同样的代码在C++中则毫无问题。这生动地说明了“原生”与“扩展”的差异。 那么,在C++中`struct`和`class`到底还有何区别?唯一的、关键的不同在于默认的访问权限:`struct`默认是`public`,而`class`默认是`private`。这个细微差别决定了代码风格和设计意图。通常,我们用`struct`来封装纯数据的聚合体,而用`class`来定义那些需要隐藏实现细节、提供接口的抽象数据类型。这篇小文通过对比和代码解析,清晰地帮你厘清了这个C++程序员常会遇到的疑惑。

本机暂存
IT 2015-01-23 23:45:47 / 累计浏览 3,942

代码审查清单可消除更多的bug

这篇文章的核心主张是:在代码审查中引入并维护一份“检查清单”,能系统性地提升发现缺陷的效率,从而消除更多潜在的bug。 作者开篇就指出问题的普遍性:软件工程协会的研究表明,程序员常犯的错误集中在15-20种。因此,如果在审查时依赖纯粹的个人经验,这些常见问题就很容易被遗漏。清单的作用,正是将这些高频错误固化下来,确保每一次审查都能覆盖到这些关键点。 文章提供了一份经典的清单模板,涵盖了从“总体”(代码功能、可读性、规范、冗余)到“安全”(输入输出校验)、“文档”和“测试”等多个维度的具体检查项。它强调清单不必大而全,应聚焦于团队实际发生的常见问题。 更关键的是,清单并非一成不变。作者建议团队在实际审查中记录遇到的问题,以此作为数据来优化自己的清单,剔除不相关的项目,加入特有问题。通过这种集思广益和定期更新的方式,清单会越来越贴合团队实际。 最终,一个经过优化的、具体的清单,能帮助团队在审查中稳定地捕获更多瑕疵,避免审查质量因人而异,从而实质性地提升代码质量。

本机暂存
IT 2015-01-20 23:29:46 / 累计浏览 20,164

我的git笔记

这篇讲的是作者从 SVN 转向 Git 并深度使用后,沉淀下来的一份实用命令手册。作者从两年前通过《GotGitHub》入门 GitHub 讲起,分享了自己从最初使用 GitHub for Windows 图形客户端被自动换行符问题困扰,到后来通过学习《Git详解》系列文章转入命令行的进阶过程。 如今作者已在 GitHub 上开源了 60 多个项目,为了在这些项目间高效穿梭,也为了自己“用时能快速查阅”,他系统地梳理了 Git 的常用命令。文章按使用场景分类,涵盖了安装配置、新建与克隆仓库、本地文件增删改查、分支的创建合并与变基、远端操作、多源管理以及标签管理等方方面面。 特别值得一提的是,作者不仅列出了核心命令,还补充了像 `git revert` 和 `git stash` 这样实用但容易记混的操作细节,并在最后附上了包括《Pro Git》、《图解Git》在内的八份经典参考资料。整篇文章就像一个经验丰富的开发者在跟你分享他的“私人笔记”,对于需要快速回顾或查询 Git 命令的读者来说,是一份非常顺手的速查指南。

本机暂存
IT 2015-01-19 23:59:44 / 累计浏览 14,764

调试工具之GDB

这是一篇关于调试利器GDB的实用指南。不同于常见的C/C++调试教程,这篇文章特别展示了如何用GDB调试PHP脚本,视角相当独特。 文章从GDB的安装讲起,涵盖了yum、rpm包以及从源码编译这几种常见方式。核心部分围绕一个具体的PHP示例展开,详细演示了启动GDB、设置参数、执行脚本的完整流程。其中亮点是两种高级断点设置方法:可以通过“文件名:行号”精确定位,比如“basic_functions.c:4439”,直接跳到PHP内置函数`sleep`在内核C代码中的实现点;也可以仅用函数名“zif_sleep”来设置断点,这在没有源码行号时尤为方便。文章还介绍了通过`help`命令自助查询GDB的庞大指令集。 作者通过这个实例,清晰地展现了GDB强大的通用调试能力。它不仅是C程序的调试器,更是一个能深入任何用C语言编写(或内嵌C)的运行时环境的强大工具。对于需要调试PHP内核、扩展或性能问题的开发者来说,这篇文章提供了一个极具价值的实践起点。

本机暂存
IT 2015-01-19 23:56:48 / 累计浏览 21,745

关于创业

这篇是前腾讯员工离职创业一年半后的真实记录。作者从自己开发的PC应用因“店大欺客”被腾讯连续下线、收入断档讲起,详细复盘了寻找新方向的全过程。 他从一封封读者来信中敏锐地捕捉到“海外Android工具应用”的机会,并凭借技术优势,两个月量产了50多款应用,迅速实现盈利。然而,创业之路并非坦途。当应用重心转向国内安卓市场后,作者再次遭遇平台巨头的挤压——Google Play因其不熟悉政策封禁账号,360平台则在审核通过后,以“刷榜”和违规广告为由进行处罚,甚至开始强制使用自家广告联盟。 文章的核心,是作者作为开发者,与平台巨头合作时切身的无奈与观察。他揭示了小体量开发者在庞大生态中的脆弱地位:无论海外还是国内,平台规则的模糊与单方面变更,都可能让积累的成果瞬间归零。这段经历为所有考虑进入移动应用生态的创业者,提供了一份极具参考价值的避坑指南与现实注解。

本机暂存
IT 2015-01-05 23:32:25 / 累计浏览 2,363

如何构建优质代码

这篇讲的是如何编写出高质量、易维护的代码。作者从实际工程经验出发,总结了10条核心原则。 他开篇就强调了DRY(不要重复自己)的重要性,并举了单元测试中违反此原则会导致维护成本剧增的例子。文章还指出,写出短小的方法、采用能“望文生义”的命名规范,能让代码更易读和重用。 在设计层面,文章建议让每个类只承担“正确的”职责,并注重接口的稳定性而非实现细节。为了保障质量,作者大力推荐编写大量的单元测试,并以此为安全网,进行小步、持续的代码重构。 最后,他提到了一个颇具争议的观点:比起写糟糕的注释,不如花时间重构代码使其更清晰。同时,强调了代码审查机制对于发现错误和共享知识的价值,但要求审查者能力合格,并对代码负责。 这些原则共同指向一个目标:编写出更健康、更易于协作和演进的软件。

本机暂存
IT 2015-01-05 23:23:29 / 累计浏览 3,863

一个程序员的管理思考

这篇讲的是一位有两年管理经验的程序员,回顾了自己从带领小团队到推动30人团队时所经历的深刻转变与思考。作者认为,管理本质上是“管”结果与“理”过程的结合。随着团队规模扩大,管理者必须从早期身先士卒的“带领者”,转变为更多依靠机制和授权的“推动者”,甚至要达到“在与不在一个样”的境界。 文章的一个核心观点是将管理与技术架构进行类比。就像技术积累需要将解决方案抽象为框架和平台一样,管理也需要对具体问题进行抽象,形成可复制的规范、流程等“术”。更进一步,“术”的制定应由团队“道”层面的价值观来指导,例如作者团队基于“简单、直接、信任、效率”的价值观,推行了保障开发效率的会议规范。 作者也坦诚,实现让团队成员能站在自己角度思考问题的“双向同理心”是一条漫长之路。文中通过让开发轮流处理用户反馈来提升质量意识的实例,生动说明了如何将价值观落地为具体实践。对于正处于技术向管理转型期的读者而言,这些源自一线实践的观察与抽象思考,提供了非常具体的参照。

本机暂存
IT 2015-01-04 23:27:08 / 累计浏览 3,424

python数组使用说明

这篇文章系统梳理了Python中三种常用的序列类型:list、Tuple和Dictionary,并详细讲解了它们各自的定义方法、核心技巧与常用API。 文章首先厘清了三者的基本特性:list是动态链表,初始化后可以灵活增减元素;Tuple是固定长度的元组,一旦定义便不可更改;Dictionary则是基于键值对的哈希表,提供快速的数据检索能力。随后,作者分别深入展示了每种类型的具体用法。 对于list,文章重点演示了如何通过索引切片获取或删除多个元素,如何利用enumerate高效遍历,以及append、insert、pop等关键操作方法,还特别提示了列表复制时的引用与克隆区别。Tuple部分则简明介绍了其初始化、访问以及与列表的相互转换。Dictionary章节聚焦于其丰富的内置方法,如get提供安全的键值获取、keys/values/items用于遍历、update用于合并字典等,并说明了如何为同一个键赋值多个值。 这些内容的讲解都附带了清晰的代码示例,非常实用。文章最后帮助读者理解:当你需要动态调整集合内容时,list是首选;当需要确保数据不被意外修改时,可选Tuple;而当需要基于唯一标识快速查找数据时,Dictionary则最为高效。

本机暂存
IT 2015-01-04 23:02:00 / 累计浏览 7,322

树莓派(Raspberry Pi)使用小记

这篇讲的是一位硬件门外汉从零开始折腾树莓派(Model B+)的实战记录。作者从淘宝采购全套配件讲起,详细分享了在Mac和Windows双系统下烧录Raspbian镜像时遇到的卡点(比如读卡器识别问题),并给出了具体的解决方案。 文章的核心价值在于其“踩坑”后的经验提炼:作者强烈建议先组装好亚克力外壳再连接网线,以保证连接稳定;在配置无线网卡环节,他指出若执行常规的`ifup wlan0`命令无效,可以尝试用`sudo /etc/init.d/networking restart`重启网络服务,并附上了亲测有效的配置教程链接。 整个流程从SSH首次登录(默认用户名pi/raspberry)、运行`raspi-config`扩展分区与修改密码,到最终实现无线网络连接,步骤清晰,提供了路由器后台查IP、终端命令操作等具体截图。对于想低成本上手Linux硬件开发的爱好者,这些从自身实践中总结的细节和排障思路,能有效缩短点亮树莓派的摸索过程。

本机暂存
IT 2015-01-04 14:23:33 / 累计浏览 2,602

一个程序员眼中的价值

这篇文章记录了一位资深程序员从2007年到2014年的职业反思。作者从自己雅虎实习、百度工作、参与PHP开发等经历出发,探讨了他所理解的“价值”。 他分享了几个关键阶段:刚毕业时,从优先考虑学习到认识到基本生活保障的重要性;工作几年后,因赞誉而自满,后来才看清自己的技术短板;在开源社区中,接受受助者的感谢礼物让他体会到创造的价值。最突出的是在微博和PHP社区的贡献,例如将无线LAMP性能提升2.6倍、参与推动PHP7的性能飞跃,这些实际成果为他赢得了尊重。 作者的结论很实在:程序员的真正价值,在于你为公司和他人创造了多大的实际贡献。如果能做出有价值的贡献,相应的肯定会随之而来,或早或晚。相反,如果只盯着自己得到了什么,忽略了付出的价值,路会走得很辛苦。

本机暂存