开发经验

总结Django一些开发经验

南笙酒味 提交于 2019-12-02 06:22:59
先说一些最最基础的吧。 使用 virtualenv 隔离开发环境 使用 pip 管理项目依赖,主要就是一个小技巧,使用 pip freeze > requirements.txt 来保存依赖的模块和版本 使用 gitignore.io 这个网站提供的 .gitignore 文件管理代码库文件 打包和发布 项目的打包和发布用的 Docker,Django 项目的 Dockerfile 特别简单: 这一个 Dockerfile 模板可以通吃 80% 的 Django 项目了。 日志配置 既然用 Docker,就放弃了把日志写入文件,直接写到标准输出。 新版本的 uwsgi 已经可以把 webapp 的日志收集起来输出到标准输出里面了。如果需要收集、管理日志的话,就是用 Docker 日志收集工具,直接收集 Docker 容器的日志即可。 自动化测试 既然是纯后端项目,工程师完全可以通过自动化测试来检测自己的代码。Django 本身对测试提供了很好的支持,可以通过 sqlite 来搭建测试数据库,还有基于内存的缓存,做测试不会增加对其他系统的依赖。开发起来事半功倍。 除了要写自动化测试代码,还要能统计测试覆盖率。目前我们用的是 coverage.py 这个工具,说实话没有 node.js 的 istanbul 好用,输出的报告没有 Istanbul 详细和易读。不过用来检查 “死代码”

项目管理经验

冷暖自知 提交于 2019-12-02 00:41:23
如果你与软件行业有若干联系,但是还不知道Joel这个人以及他的博客,那么赶快拿起百度,然后尽可能多的了解他和他的思想,对你肯定有好处。这篇是他博客中的经典之作,收录在他的两本书中:《Joel on Software》和《Smart & Gets Things Done》,这两本书主要收录和整理了他的博客中的经典文章,有必要一看。 要翻译出原作者的味道真的很难,所以我们经常骂一些翻译过来的中文书籍太烂,特别是由那些不懂技术的人翻译的技术书籍。所以如果你是是程序开发人员,再次善意的提醒您:“学好英文”,这句话被很多人重复,也不多我一个了,当然听不听由你。 你有没有听说过 SEMA ?这是一个非常复杂的软件开发团队评价体系。等等!千万别去研究它!仅仅是理解它就将花掉你六年时间。所以我自己搞了一套软件开发团队评价体系,信不信由你,这套体系最大的优点就是只需三分钟就可掌握!你可以把省下的时间去读医学院了。 Joel 的12条测试问题 你们用了源代码管理软件吗? 你们是否一步就能实现从源代码到可发布的产品? 你们每天都把源代码管理系统的代码做一次生成操作吗? 你们有软件Bug管理系统吗? 你们在编写新代码前解决bug吗? 你们有没有一个时常更新的进度计划? 我的这套体系非常简洁,你只需对每个问题回答“是”或者“否”就可以了,你不需要去算什么每天写的代码行数或者平均bug数等等,回答“是

软件价格计算方法

醉酒当歌 提交于 2019-12-01 19:39:23
1.软件开发价格估算方法 软件开发价格与工作量、商务成本、国家税收和企业利润等项有关。为了便于计算,给出一个计算公式: 软件开发价格 = 开发工作量 × 开发费用/人·月 1.1开发工作量 软件开发工作量与估算工作量经验值、风险系数和复用系数等项有关: 软件开发工作量 = 估算工作量经验值 × 风险系数 × 复用系数 1.1.1估算工作量经验值(以A来表示) 软什开发工作量的计算,曾有人提出以源代码行或功能点来计算,这些方法实施起来均有不少难度。目前国际上仍旧按以往经验的方式加以计算,国内各软件企业也是采用经验的方式加以估算工作量。 为了更好地规范估算方法,建议可按照国家标准“GB/T 8566-2001软件生存周期过程”所规定的软件开发过程的各项活动来计算工作量。 工作量的计算是按一个开发工作人员在一个月内(日历中的月,即包括国家规定的节假日)能完成的工作量为单位,也就是通常所讲的“人·月”。 特别要提醒的是软件开发过程中既包括了通常所讲的软件开发,也应包括各类软件测试的活动。 1.1.2风险系数(以σ来表示) 估算工作量经验值亦会存在较大风险,造成软件危机的因素很多,这也是一个方面的因素。特别当软件企业对该信息工程项目的业务领域不熟悉或不太熟悉,而且用户又无法或不能完整明白地表达他们的真实的需求,从而造成软件企业需要不断地完善需求获取,修改设计等各项工作。因此: l ≤

从面试官角度观察到的程序员技能瓶颈,同时给出突破瓶颈的建议

我与影子孤独终老i 提交于 2019-12-01 09:43:53
我在做技术面试官的时候,面试对象大多数是初级开发和高级开发,偶尔也会面试架构师。我发现,IT人的工资固然和相关技术的使用年限有关,但如果候选人的技能无法跨越到更高层次的话,他们的收入也就会停留在当前级别,哪怕工资年限再多,也无法提升工资水平。 比如,我就面试过不少工作了5,6年的程序员,他们的技能也就停留在增删改查阶段,那么只能领到初级程序员的工资。更可悲的时,在面试过程中我发现他们甚至不知道上升的途径和方式,这样的话,可能当他们有10年经验时,或许还只是初级程序员。 对此本文将围绕着初级程序员,高级程序员和架构师这三个职位,说明下这些级别的技能瓶颈,并给出若干突破瓶颈的建议。 1 初级程序员的技能瓶颈与收入瓶颈 哪怕是非相关专业,从培训班出来的程序员,要找个工作也不难,更何况是计算机相关专业出身的学生。 在一般的公司里,对初级程序员的要求大多也是会增删改查,熟悉基本的业务,而且不少公司不会让他们干更高级的活。所以我在面试过程中,不少3年以内的初级程序员的水平和一些有5年经验的人差不多,这就进入了初级程序员的收入瓶颈。 比如Java方面,他们仅仅会用技能,比如集合,多线程,数据库等,也会在Spring框架下干活,SQL方面,仅会写基本的SQL语句,或许还会使用简单的索引等技能。但如果我问及底层代码,他们知道得很少,问及Spring等框架知识,他们只会告诉我如何配置

运维工作应该掌握哪些技能?

杀马特。学长 韩版系。学妹 提交于 2019-12-01 03:02:31
运维工作应该掌握哪些技能? 运维中关键技术点解剖:1 大量高并发网站的设计方案 ;2 高可靠、高可伸缩性网络架构设计;3 网站安全问题,如何避免被黑?4 南北互联问题,动态CDN解决方案;5 海量数据存储架构 一、什么是大型网站运维? 首先明确一下,全文所讲的”运维“是指:大型网站运维,与其它运维的区别还是蛮大的;然后我们再对大型网站与小型网站进行范围定义,此定义主要从运维复杂性角度考虑,如网站规范、知名度、服务器 量级、pv量等考虑,其它因素不是重点;因此,我们先定义服务器规模大于1000台,pv每天至少上亿(至少国内排名前10),如sina、baidu、 QQ, http:// 51.com 等等;其它小型网站可能没有真正意义上的运维工程师,这与网站规范不够和成本因素有关,更多的是集合网络、系统 、开发工作于一身的“复合性人才”,就如有些公司把一些合同采购都纳入了运维职责范围,还有如IDC网络规划也纳入运维职责。所以,非常重要一定需要明白:运维对其它关联工种必须非常了解熟悉:网络、系统、系统开发、存储,安全,DB等;我在这里所讲的运维工程师就是指专职运维工程师。 我们再来说说一般产品的“出生”流程: 1、首先公司管理层给出指导思想,PM定位市场需求(或copy成熟应用)进行调研、分析、最终给出详细设计。 2、架构师根据产品设计的需求,如pv大小预估、服务器规模

什么是DevOps

混江龙づ霸主 提交于 2019-11-29 19:14:26
什么是DevOps 2018/5/25 前言:aws 这份定义清晰明了,值得回顾。 DevOps 模式定义 DevOps 集文化理念、实践和工具于一身,可以提高组织高速交付应用程序和服务的能力,与使用传统软件开发和基础设施管理流程相比,能够帮助组织更快地发展和改进产品。这种速度使组织能够更好地服务其客户,并在市场上更高效地参与竞争。 DevOps 的工作原理 在 DevOps 模式下,开发团队和运营团队都不再是“孤立”的团队。有时,这两个团队会合为一个团队,他们的工程师会在应用程序的整个生命周期(从开发测试到部署再到运营)内相互协作,开发出一系列不限于单一职能的技能。 在一些 DevOps 模式下,质保和安全团队也会与开发和运营团队更紧密地结合在一起,贯穿应用程序的整个生命周期。当安全是所有 DevOps 团队成员的工作重心时,这有时被称为“DevSecOps”。 这些团队会使用实践经验自动执行之前手动操作的缓慢流程。他们使用能够帮助其快速可靠地操作和发展应用程序的技术体系和工具。这些工具还可以帮助工程师独立完成通常需要其他团队协作才能完成的任务(例如部署代码或预置基础设施),从而进一步提高团队的工作速度。 DevOps 的优势 速度 高速运转,让您可以更快速地针对客户进行创新、更好地适应不断变化的市场,同时更有效地推动业务成果。DevOps

前端面试题一套

主宰稳场 提交于 2019-11-29 08:38:32
一. css 40分 1. 什么是盒模型? 2. Doctype的几种类型? 3. 如何布局左不动右边自适应的两列布局? 3. 如何布局两列等高? 5. 如何布局右侧定宽,左侧或中间自适应? 6. 如何布局三列自适应? 7. gif,png,jpg的区别? 8. 什么是css sprite?优缺点? 10. 制作细线表格? 11. position:relative,absolute,fixed区别与联系? 12. 如何居中一个float:left的元素 13. Css在各浏览器下的兼容问题你通常是怎么来解决的,请分享你的经验; 二. Js 30分 1). 基础: 1. parseInt 与 parseFloat 的区别? 2. valueof 与 toString 的区别? 3. 全等与相等? 4. break 与 continue 的区别? 5. js的作用域? 6. Array 的 slice 与 splice 的区别? 8. 正则中test 与 match 的区别? 9. 如何在js中创建一个对象并继承他? 10. 什么是prototype ? 什么是原型链? 11. setTimeout 与 setInterval 的区别? 13. cssText? 14. offsetWidth, scrollLeft, scrollHeight? 15. IE的事件与w3c事件的区别

程序员必读的30本书籍

血红的双手。 提交于 2019-11-28 16:53:59
1. 《代码大全》(第二版) 作者: [美]史蒂夫·迈克康奈尔 第2版的《代码大全》是著名IT畅销书作者史蒂夫·迈克康奈尔11年前的经典著作的全新演绎:第2版不是第一版的简单修订增补,而是完全进行了重写;增加了很多与时俱进的内容。这也是一本完整的软件构建手册,涵盖了软件构建过程中的所有细节。它从软件质量和编程思想等方面论述了软件构建的各个问题,并详细论述了紧跟潮流的新技术、高屋建瓴的观点、通用的概念,还含有丰富而典型的程序示例。这本书中所论述的技术不仅填补了初级与高级编程技术之间的空白,而且也为程序员们提供了一个有关编程技巧的信息来源。这本书对经验丰富的程序员、技术带头人、自学的程序员及几乎不懂太多编程技巧的学生们都是大有裨益的。可以说,无论是什么背景的读者,阅读这本书都有助于在更短的时间内、更容易地写出更好的程序。 2. 《程序员修炼之道》 作者: Andrew Hunt /David Thomas 《程序员修炼之道》由一系列的独立的部分组成,涵盖的主题从个人责任、职业发展,直到用于使代码保持灵活、并且易于改编和复用的各种架构技术。利用许多富有娱乐性的奇闻轶事、有思想性的例子以及有趣的类比,全面阐释了软件开发的许多不同方面的最佳实践和重大陷阱。无论你是初学者,是有经验的程序员,还是软件项目经理,本书都适合你阅读。 3. 《计算机程序的构造和解释》 作者: Harold

Delphi开发能力自我评测

二次信任 提交于 2019-11-28 15:34:14
Delphi开发能力自我评测 日期:2008年11月23日 作者: 人气:3159 查看:[大字体 中字体 小字体] (注:以下内容都是作者个人的学习经验和体会,仅代表个人观点。针对Win32下的Delphi程序开发而言,部分内容或思想也可适用于其它工具或平台下的软件开发。) 在程序员的求职资料中,用得最泛滥的词可能是“熟悉”和“精通”了。评价一个程序员的综合能力并不容易,下面的文字试图以Delphi程序开发为例定义一种描述程序员开发能力的方法。 一、学习阶段划分。 根据我个人的经验,Delphi程序设计分为以下几个阶段: 1、 熟悉阶段。 这一阶段指从未接触过Delphi的人,刚开始学习到初步掌握Delphi的语法、可视化编程、面向对象编程的概念、Delphi IDE开发环境、基本代码编写、程序结构的过程。 熟悉阶段结束后,学习者应该可以编写简单的程序,同时对整个Delphi开发环境有一定的了解,但还不能从事开发工作。 根据学习者是否有编写其它语言代码的经验、是否接触过面向对象编程等因素,这一过程可能需要数天到数十天的时间。 2、 入门阶段。 在熟悉Delphi后,入门的标志是学习者可以有目的地利用Delphi强大的可视化开发环境、结合一些常规的代码编写技术,编制一些小型的程序,或是完成简单的数据库应用。同时,还应掌握基本的程序调试方法。 入门后,程序员可以从事简单的开发工作

腾讯十年Python开发经验写的Python入门笔记,是否对你有帮助?

时光总嘲笑我的痴心妄想 提交于 2019-11-28 08:41:16
启动python 从IDLE启动Python IDLE是一个Python Shell。Shell的意思是“外壳”,是一个通过 键入文本与程序交互的途径 (类似windows中的cmd。Visual Studio 也是一种Shell) >>> 是指Python准备好了,可以输入Python指令 alt+N 快速回到上一条语句(复制粘贴); alt+P 下一条 字符串 print(“hello,world”) #“内是字符串” 计算 print(5+3) 括号内没有"" + print(“i love”+“coding”)= i lovecoding * print(“you”*8)= youyouyouyouyouyouyouyou #字符串可以和数字相乘 注意! print(“you”+8) #字符串不可以和数字相加 课后练习 python 是什么类型的语言? 脚本语言 脚本语言(Scripting language)是电脑编程语言,因此也能让开发者藉以编写出让电脑听命行事的程序。以简单的方式快速完成某些复杂的事情通常是创造脚本语言的重要原则,基于这项原则,使得脚本语言通常比 C语言、C++语言 或 Java 之类的系统编程语言要简单容易。也让脚本语言另有一些属于脚本语言的特性: 语法和结构通常比较简单 学习和使用通常比较简单 通常以容易修改程序的