程序员

【CSAPP笔记】10. 代码优化

谁说我不能喝 提交于 2020-04-06 05:48:09
写程序的主要目标是使它在所有可能的情况下都能正确运行(bug free),一个运行得很快但有 bug 的程序是毫无用处的。在 bug free 的基础上,程序员必须写出清晰简洁的代码,这样做是为了今后检查代码或修改代码时,其他人能够读懂和理解代码。另一方面,让程序运行得更快也是一个很重要的考虑因素。不过,程序获得最大加速比的时候,是它第一次运行起来的时候。 在提到优化程序性能时(Code optimization),我们往往会想到算法与数据结构中的一个概念——复杂度。事实上,除了算法复杂度之外,仍然有许多的代码书写小细节可以改进性能表现。不过,编写高效的程序,第一个考虑的还是选择一组合适的算法与数据结构,因为算法复杂度影响还是相当大的,而且通常比其他常量因素更重要。第二点,我们必须写出编译器能够有效优化以转换成高效可执行代码的源代码。对于第二点,理解程序是如何被编译和执行、理解处理器和存储器系统是如何运作的、理解编译器优化的局限性是很重要的。在程序开发过程中,程序员必须在实现和维护程序的简单性与它的运行速度之间做出权衡,也就是在尽量不破坏程序的模块化和通用性的前提下,做到对代码性能的优化。 即使是最好的编译器也受到 妨碍优化的因素 (optimization blocker)的阻碍,程序员必须编写容易优化的代码,来 帮助 编译器(很让人眼界一新的观点)。研究程序的汇编代码

现在加入Web前端学习还有市场吗?自己是否适合学习前端

拥有回忆 提交于 2020-04-06 05:28:28
现在市场上对于初级前端并不友好,直接可以这么说,一个实习前端,初级前端,你去面试,竞争力是非常非常大的!不要以为你学好了三剑客,你就可以拿个什么5.6千,甚至7.8千,尤其是即将毕竟的计算机学生,千万不要抱着这种侥幸的心里,多去逛逛,外面的世界很大,也很残酷! 市场是非常需要前端工程师的,但是,是中高级的前端工程师,所以就算入了前端的门,也需要不断的提升自己,无论你是学院派,还是培训派,还是自学派,都应该具有强烈的学习意识! 目前入门前端的人群分类 1、计算机相关专业出身 系统走过计算机的理论基础,比如计算机组成原理、操作系统原理、计算机网络、算法数据结构、设计模式,至少用过两门以上编程语言(强类型+弱类型)。 优点:理论、架构方面扎实,有整体计算机思维,内功不错,外功学起来比较快。 缺点:部分人对前端相关细节技术不扎实,不过花时间能很快搞定。 2、非计算机出身自学(也包括计算机专业没好好学的) 理论基础薄弱,后来因个人兴趣或者职业需求,自学前端开发技能。 优点:自学能力比较强,能够根据自己的兴趣规划学习内容。 缺点:部分人对前端没有整体的学习框架不成体系,部分人计算机没有整体思维,建议系统梳理下前端知识体系结构,该补的还是要补起来。 总结入门前端时的一些困境: 1、因一些基础算法、数据结构理论不扎实导致一些编程思维难于理解。 2、计算机体系结构、操作系统理论

黑马程序员_java总结_反射

半腔热情 提交于 2020-04-06 03:56:03
----------- android培训 、 java培训 、java学习型技术博客、期待与您交流! ------------ 现在总结反射机制,个人感觉反射在JAVA中是相当重要的.我让为的反射:在java中执行一个 程序之前会先把其编译成class文件,而反射就是在运行时把已有的class文件进行反编 译的并在这个过程中,把类中的所有元素转换成JAVA中的类的一个过程,因为一个Class 文件就相当于一个类,那么反射就是以类为单位进行操作的了.对于反射的内容包括以下 几点: 1.类的字节码(Class) 2.反射时的构造方法. 3.反射时的普通方法. 4.反射时的成员变量. 1.类的字节码(Class) 要想实现反射,在JAVA中就必须借助与Class类,它是反射的基础.每一个类在编译时 都会被编译成.class 文件.而在运行时,JVM会把这些要用到的文件加载到内存中, 这时这些文件就是以一段段的字节码的形式表示的,而这些字节码也被java封装成了 一个对象,这个对象就是Class,而java中 实现反射就是以一个Class为单位操作的, 所以要实现反射就必须先有这么一个对象了.要想得到Class类的实例有三种方式: 1.类名.class;如: Class clazz = String.class; 2.调用Class类的静态方式forName方法,它有几个重载形式

从C++到C++/CLI

落花浮王杯 提交于 2020-04-06 02:40:22
  刘未鹏(pongba) /文      看起来只是在C++后面多写了一个“/CLI”,然而其意义却远不止于此,google的c++.moderated版上为此还发起了数星期的讨论,在国内大部分人对C++/CLI还不是很了解的情况下,google上面已然硝烟四起...   就像我们作出其它任何选择一样,在选择之前最重要的是先要清楚为什么作出这样或那样的选择——C++/CLI到底提供了哪些优势?为什么我们(标准C++程序员)要选择C++/CLI而不是C#?我们能够得到什么?CLI平台会不会束缚C++的能力?   这些都是来自标准C++社区的疑问。从google上面的讨论看来,更多来自标准C++社区的程序员担心的是C++/CLI会不会约束标准C++的能力,或者改变标准C++发展的方向,也有一部分人对C++/CLI的能力持怀疑态度。另外一些人则是询问C++/CLI能够带来什么。   这些被提出的问题在google上面一一得到了答案。好消息是:情况比乐观的人所想象的或许还要更好一些——   世界改变了吗?   对于谙于标准C++的程序员来说,最为关心的还是:在C++/CLI中,世界还是他们熟悉的那个世界吗?在标准C++的世界里,他们手里的各种魔棒——操作符重载|模板|多继承(语言),STL|Boost|ACE(库)——还能挥舞出五彩缤纷的火焰吗?是不是标准C++到了

面试刷题27:程序员如何防护java界的新冠肺炎?

醉酒当歌 提交于 2020-04-06 01:16:21
背景 安全是软件设计的第二个非功能性需求,一般是当软件出现安全问题的时候才会得到重视。 最明显的比如 数据库用户信息和密码泄漏等; 数据加解密技术 单向加密 md5+salt值, 这个是软件设计中使用的比较多的。 但是要预防彩虹表的解密,在加密前校验密码的规则,符合安全等级。 对称加密 编程中用的比较多的是RSA加密,即增加一个秘钥。可以通过秘钥进行加解密。 效率比较高。安全性也比较高,但是要预防秘钥的泄漏。 非对称加密 即使用证书,公私钥对,一般是使用公钥解密,私钥加密; 比如数字证书,对外发的文件,通过私钥加密,拿到公钥可以解密,也可以确定文件的可靠性。 HTTPS: 是一种综合利用非对称和对称加密的协议。 首次建立连接使用 私钥生成一个秘钥,客户端拿到证书之后,使用它对传输内容进行加密,服务端使用秘钥进行解密。兼顾了效率和安全。 http攻击和防护 SQL注入 在参数中加入非法的sql,直接传递到数据库执行,达成攻击目的。 预防方法:使用PrepareStatement XSS 即把攻击脚本当成数据保存在服务端,其它用户使用该数据的时候,会转换成攻击脚本,泄漏用户信息等。 预防方法:增加请求过滤;设置web防火墙; 小结 实际工作中如何保证软件系统的安全: 增加代码层面的请求过滤; 及时更新各种软件和组件的版本,修复安全漏洞; 对数据进行加密

每个程序员应阅读的最具影响力的单一书籍是什么? [关闭]

余生长醉 提交于 2020-04-06 01:06:41
问题: If you could go back in time and tell yourself to read a specific book at the beginning of your career as a developer, which book would it be? 如果你可以回到过去并告诉自己在开始时作为开发人员阅读一本特定的书,那本书会是哪本书? I expect this list to be varied and to cover a wide range of things. 我希望这个列表可以变化,涵盖范围广泛。 To search: Use the search box in the upper-right corner. 要搜索: 使用右上角的搜索框。 To search the answers of the current question, use inquestion:this . 要搜索当前问题的答案,请使用 inquestion:this 。 For example: 例如: inquestion:this "Code Complete" 解决方案: 参考一: https://stackoom.com/question/Rb/每个程序员应阅读的最具影响力的单一书籍是什么-关闭 参考二: https://oldbug.net/q

一个程序员说。

喜欢而已 提交于 2020-04-05 21:43:22
作者:star 终于完成了自己的一个App开发作品,这是一个真正意义上通过跨平台技术完成的纯原生体验App产品。回顾一下整个过程,把我个人的学习历程分享出来,希望能对大家有所帮助。谨以此文,献给像我一样“在路上”创业的小伙伴们,也献给一路上帮助我成长的那个名为“And”的技术大神! 相信每个人都能感受到,这几年移动技术的高速发展和App开发的强劲需求,这些因素交织在一起造成了应用开发人才供求的严重不平。这让那些做IOS和Android的程序员工资水平,像打了鸡血一样翻倍的往上涨,相比之下也让普通Web开发者者望尘莫及。曾经很不幸,小编本人就是众多web开发程序员中的一猿,而且自认是深受传统Java的跨平台思想教育的一个资深愤青。几年来,我怀揣着“一次编码,处处运行”的梦想一路追下来,试图要另辟蹊径杀入到移动开发圈里去。从5年前学习phoneGap开始,我花了大量时间去研究和尝试,用过Xamarin, NativeScript, React Native,Appcan, Apicloud等移动开发产品,我没有放过每一个跨平台移动开发平台,不断坚持亲自去尝试和体验。对于技术上敢吃螃蟹的先行者,我难免也要为之付出一些代价:跨平台技术确实在不断改进,可伴随着发展“坑”也是越来越大。这些让人又爱又恨的产品,让我不断享受着那种“带你装b带你飞带你冲进垃圾堆”的感觉。经过痛苦的学习和实践经历之后

免费的编程中文书籍索引

可紊 提交于 2020-04-05 16:49:05
国外程序员在 stackoverflow 推荐的程序员必读书籍, 中文版 。 stackoverflow 上的程序员应该阅读的非编程类书籍有哪些? 中文版 github 上的一个流行的编程书籍索引 中文版 语言无关类 操作系统 智能系统 分布式系统 编译原理 函数式概念 计算机图形学 WEB服务器 版本控制 编辑器 NoSQL PostgreSQL MySQL 管理和监控 项目相关 设计模式 Web 大数据 编程艺术 其它 语言相关类 Android APP AWK C/C++ C# Clojure CSS/HTML Dart Elixir Erlang Fortran Go Groovy Haskell iOS Java JavaScript LaTeX LISP Lua OCaml Perl PHP Prolog Python R Ruby Rust Scala Shell Swift 读书笔记及其它 测试相关 置顶 [笔记]前端工程师的入门与进阶 💯 [全文]如何正确的学习 Node.js 💯 操作系统 开源世界旅行手册 鸟哥的Linux私房菜 The Linux Command Line (中英文版) Linux 设备驱动 (第三版) 深入分析Linux内核源码 UNIX TOOLBOX Docker中文指南 Docker —— 从入门到实践 Docker入门实战

从程序员到产品经理再到自己创业的心路历程

我们两清 提交于 2020-04-04 20:31:09
  从08年出来工作到现在,已经在IT圈摸爬滚打有将近10年;博客园从当时在北京工作偶然间接触,到后面跳槽、转型做产品经理再到现如今创业开公司,都一直跟博客园有不可割舍的联系。这应该源于骨子里还是偏技术,或者说“程序员”应该算是身上无法磨灭的标签。   看过“ 从程序员到产品经理再到自己创业的心路历程 ”这篇博客的朋友,应该都比较清楚我之前的经历;在这里,我就不再叙述,只是现在再想想当初创业的冲动,也并不觉得是个错误的决定,虽然说现在公司发展仍处在起步阶段,也时常为没业务而发愁,甚至有时会感觉很累、连上班时一半的开心都很难找寻,但创业是我必须要迈出的一步,要不然会很不甘心。 这个社会很现实、也很浮躁,特别是身处的互联网圈,各种一夜暴富的事都无法躲避的被知晓,在没有足够胆量的情况下,想沉下心来做事儿,有时需要比较痛苦的内心挣扎去抵挡这些诱惑。   每个人都有自己所处的平衡,也在努力寻找自己的平衡;就像我有时会想:我这么辛苦去拼是为了什么呢?朝九晚五上个班不是挺好吗,无非就是钱挣得少点儿;再看做保安的邻居,月工资不到3千,去年买了车,生活过的也挺不错,至少看上去比我生活质量要好很多。说到平衡,我越来越明白和认识到一个道理: 为人谦虚、低调是为了不打破别人(身边的朋友、同事或亲戚...)的平衡,也是保持自身的平衡,而不是简简单单说是一种美德。 比如:你月收入8k

工作6年,私藏的25个,调优工具/技术网站,我贡献出来了

假如想象 提交于 2020-04-04 18:31:40
工作6年,私藏的25个,调优工具/技术网站,我贡献出来了 对于程序员来说,不停的学习新技术,是我们一直要做的事情,平时不积累,等到金三银四,金九银十的跳槽季节,身边的朋友,一个个的拿着高薪跳槽,自己只能眼巴巴的看着,后悔平时没有积累学习。 其实很多程序员最头疼的事情,就是找学习资料或面试题,我这里,就给大家推荐一些,我赞了6年的优质技术网站,都是我精心挑选的,涵盖:4个算法网站,7个调优排错工具网站,4个问答社区,4个教程网站,4个代码协作平台,都是大家学习IT路上的好帮手,对技术提升有很大帮助,而且都是里免费的! 算法网站 LeetCode https://leetcode.com https://leetcode-cn.com LeetCode: 被称为刷题神器,里面有很编程算法面试的海量题目,可以在线编译运行,难度比较高。如果自己能都做出来,对面试大公司很有帮助。建议一次只针对一种题型进行训练,如数组、链表、二叉树、回溯、动态规划,这样效果会更好。 LintCode https://www.lintcode.com LintCode: 汇集了各大公司的算法面试题,有阶梯式训练题库,帮你选好应该刷的题目,特别适合小白和懒人。评测数独特快,支持中文在线题库,不需要你处理输入和输出,方便了很多,测试速度也很快。 VisuAlgo https://visualgo.net/zh