Tech

A collection of 18 posts
Translate

软件工程笔记-翻译

Photo by NESA by Makers [https://unsplash.com/@nesabymakers?utm_source=medium&utm_medium=referral] on Unsplash [https://unsplash.com/?utm_source=medium&utm_medium=referral]前言: 整体浏览收藏夹的发现了这篇来自Google的François Chollet关于软件工程的一些心得,读完感觉甚是戳中当下开发和管理过程中的很多痛处,翻译一下,仅供参考。 原文链接[需破窗]: https://medium.com/s/story/notes-to-myself-on-software-engineering-c890f16f4e4d 开发阶段 1. 代码并不仅仅是可以执行。代码也是一种跨团队沟通的方式,一种给别人描述如何解决问题的方式。方便阅读的代码不算是好,因为它本身就是编写代码最基础的部分,它涉及到清晰的代码结构、见名知义的变量名、对于复杂代码逻辑的插入注释。
9 min read
Java

唯一ID生成算法

前言 唯一ID在互联网大厂的业务线中广泛使用,比如订单号、数据库主键、IM消息序号、交易流水号等等,这些ID的共同特点是唯一标记某一个业务记录或者消息、部分ID自增、全局有序或者局部有序。 UUID作为是一种全局唯一的方案是可供使用的选择之一,但在实际操作中大家一般使用的很少,几个原因: 1. 16个字节128位占用太多的存储空间不适合用来作为主键; 2. UUID的版本1基于MAC地址和时间戳,可保证全局唯一,但容易被硬件追踪; 3. 后续版本使用伪随机数、SHA1又没有前向兼容,用在特定业务的一定范围内使用没有问题,但作为分布式系统的唯一ID不适合。 所以就有了各个互联网大厂分享的各自业务中实现唯一ID的不同算法和系统部署方案,唯一ID算法主要核心聚焦在以下几点: * ID位数 * ID算法原理 * 全局唯一 * 全局(局部)趋势有序 * 时钟回拨问题 * 外部系统依赖 技术实现汇总 从大厂分享的技术实现汇总如下: 厂牌技术方案ID位数全局唯一有序时钟回拨外部系统依赖TwitterSnowFlake64全局唯一局部有序block waitMongoDB
3 min read
Tech

Golang依赖包管理知多少(4)-v2与后续版本

前言 成功的项目随着逐步成熟以及新功能的加入,过去的特性和设计方案可能不能满足需求。开发者可能想整合一下他们所学的知识比如移除废弃函数、重命名参数或者分割复杂的包为多个可维护模块。这些变更都需要下游用户付出努力来迁移他们的代码来适配新的API,所以他们不会没有认真权衡过收益和成本而做出变更的。 对于一些还在实验中的项目,比如主版本为v0的项目,用户会预期到偶尔的重大变更。对于已经发布为稳定版本的项目,比如主版本为v1或者更高版本的项目,重大的变更需要在一个大版本上进行。这篇文章主要介绍了大版本策略、如果创建并发布一个新的大版本以及如何维护一个module的多个主版本。 * 主版本与module path * 主版本策略 * 发布v2及后续版本 主版本与module path modules模式规范了一个重要的原则,导入兼容性原则: 如果一个老版本的包和一个新版本的包使用相同的导入path,那么新版本的包必须向后兼容老版本的包。 一个新的大版本的包不会向后兼容之前的版本。这就意味着一个新的大版本module必须有一个不同于历史版本的module path。从v2版本开始,
7 min read
Golang

Golang依赖包管理知多少(3)-发布一个module

前言 这篇文章将讨论如何编写并发布可被其他module依赖引用的一个module。 注意:这篇主要涉及开发配置直至v1版本,如果你对v2版本迭代感兴趣,可以参考v2版本与版本迭代 [https://www.nitrohsu.com/v2-go-modules]。 本文默认使用Git作为例子, 但是Mercurial、Bazaar等其他版本管理工具也是支持的。 * 项目配置 * 版本与module * v0-初始版本、非稳定版本 * v1-第一个稳定版本 项目配置 本文需要你有一个已经存在的项目作为例子,所以我们以认识Go modules [https://www.nitrohsu.com/golang-modules.html] 文章结尾的文件为例子: > $ cat go.mod module example.com/hello ​ go 1.12​ require rsc.io/quote/v3 v3.1.0 ​ $ cat go.
8 min read
Golang

Golang依赖包管理知多少

前言 本文内容结合自己的理解,对Golang官方博客针对Golang新版本modules包管理系统的文章翻译。 使用Go modules Go从1.11和1.12已经初步支持modules,新版Go包依赖管理系统通过显性的版本依赖使得更加易于维护。这篇文章主要介绍了在开始使用Golang modules时的一些基本操作。 一个module是许多Go Pakcage的集合,在它的根目录有一个go.mod文件。go.mod文件中定义这个module的module路径,也定义了需要导入的module路径、外部依赖,这些都是modules成功构建所必须的。每一个外部依赖都有一个module路径和版本号组成。 从Go 1.11开始,如果当前目录或者它的父级目录中有go.mod文件并且此目录不在$GOPATH/src 下面,go命令就会开启对modules的支持(如果在$GOPATH/src目录下,为了保持兼容即便存在go.mod文件go命令还会使用原有的GOPATH模式)。从Go 1.13开始module模式就会默认启用了。 下面就开始介绍在使用module模式开发Go代码过程中的几个步
12 min read
Golang

Golang依赖包管理知多少(2)-迁移工程到modules模式

前言 在golang工程中可以使用多种依赖管理策略,像dep、glide这种Vendoring工具非常的流行,但是它们又各自为政并不能很好的兼容。很多项目把工程文件放在GOPATH目录下存储为一个Git仓库,其他人通过 go get命令依赖存放在GOPATH中最新版本的代码。 Go modules系统在Go1.11时发布,它通过go命令提供了一个官方的依赖管理解决方案。这篇文章主要讲述了迁移原有工程到modules的一些工具和技术。 注意:如果你的工程已经标记为v2.0.0或者更高版本,在增加go.mod文件时需要更新工程中的module path。我们将会在后面的文章中解释如何做才能在v2或者更高版本时不让你的用户糟心。 * 原工程中使用了依赖管理工具 * 使用一个依赖管理器 * 不使用依赖管理器 * 在modules模式下的测试用例 * 发布一个版本 * 导入和规范module path [import_module] 原工程中使用了依赖管理工具 为了转换一个使用依赖管理工具的工程,需要执行以下命令: > $ git clone https://github.
10 min read
Tech

Java动态代理类的生成和调用

Java的动态代理在开发中都有大量的使用,如Spring框架,Android的HTTP开发框架Retrofit,本文主要关注动态代理编写使用背后的代理类是如何的生成以及与代理对象的调用是如何实现的,以Retrofit这个框架中动态代理的使用为例子进行分析。 在Retrofit中,某类的API接口大多定义在一个Service接口类中,某一个API接口则被声明为Service接口类的一个方法,通过方法的注解、参数来描述具体API参数等信息。在调用某个API接口时,Retrofit实例调用create()创建Service接口类的实例对象来完成调用,具体源代码如下: public T create(final Class service) { // 必须是接口,并且不允许是继承来的接口 Utils.validateServiceInterface(service); //是否预加载 if (validateEagerly) { eagerlyValidateMethods(service); } //动态代理的核心代码 return (T) Proxy.newProxyIn
10 min read
Python

Python 网页解析笔记(一)

语言版本:Python 2.7 函数库:urllib2、chardet、BeautifulSoup 示例代码如下: import urllib2 import chardet from bs4 import BeautifulSoup ​ data = urllib2.urlopen('http://www.nitrohsu.com').read() encodeStr = chardet.detect(a)['encoding'] soup=BeautifulSoup(data,from_encoding=encodeStr) ​ print soup.prettify -------------------------------------------------------------------------------- chardet是一个自动检测网页编码的函数,调用detect会返回一个字典: {'confidence': 0.99, 'encoding': 'utf-8'} confidence是检测的正确率,encoding是网页编码的代码 ---
1 min read
Tech

开发人员应该如何发问

前几天一直在测试豆瓣登录,其间出现了很多的问题,不免会直接与做OAuth2.0认证的开发人员沟通,也看到不少在豆瓣开发小组里面提的问题。在看到一条问 LZ问题的帖子 [http://www.douban.com/group/topic/31698654/] 时,勾起了我对这个问题的思考:我们开发人员到底应该怎么发问才能让回答者侃侃而谈又能答而所问? ====================原文没有写完,今天突然看到这篇文章,转来也算是同感吧~ 原文 [http://www.cnblogs.com/chijianqiang/archive/2012/09/24/question.html] 由于一直从事技术和平台产品方面的工作,我们部门经常会收到公司内外同事和同仁的问题邮件,有些好的问题能让你发现自己技术上的缺陷、产品的bug或提升的空间,去思考、回答和解决这样的问题真是一件让人愉悦,充满挑战和成就感的事情。但是非常遗憾的是,这样的好问题却是凤毛麟角。我经常会被一些莫名其妙的问题搞的啼笑皆非,比如: 程序运行过程中突然内存溢出,该如何解决?如何配置JVM的虚拟机参数?程序部署到L
4 min read
Tech

现场支持总结

从4月份断断续续的开始做农村信用社堡垒机的系统上线和支持服务,到现在为止参与的地市也近有4家,身份也从一个专业软件开发人员转为现场支持人员,虽然做的不是很情愿但这其中也收获了不少东西。 堡垒机这个产品是公司从齐治科技引进的代理产品,从技术角度来说公司现场支持人员的产品了解仅限于一台测试机和几份文档,比较好的一点就是我还跟着厂家支持人员在某地市学习了一次,但对于公司的其他人员来说,这就是一个空白,什么情况都不了解,所以这次到地级市的某农信社,同事就一直很迷茫。从平常我们装一个系统就会明白,即便是相同的设备、相同的软件系统,当放到不同的环境下也会产生不同的结果。从目前的4个地级市来说,均出现了不同的问题,所以这就是促使我们反思到底才能做好代理商的现场支持。 1、非硬件资源申请:提出网络布线请求、IP地址分配、机柜位置分配、随时负责人等资源。 在A地市时,在系统上架和初始化操作已经完成的情况下,网络部门却又提出更改IP地址,导致我们将双机热备重新做了一遍,折腾了大概几个小时。这算是其中没有沟通好的一个小案例,还有厂家迅速给予支持,完美迁移了IP地址。 2、熟悉机房环境 :每个行业和每
4 min read
Google

Google App Engine 使用总结

从3月份到今天,搭建在GAE上的网站在一步步走向平稳,没有大肆宣传,当前访问量不是很高,所以一直是在免费限额的范围当中。在开发过程中,走了不少弯路,也遇见了不少新问题。 配额介绍: 1)Instanced Hour免费限额为28IH(Instanced Hour),每Web页按350KB计,平均加载此页面需要耗费掉0.001IH,28/0.001=28000,在单次访问、不考虑缓存的情况下基本等于2.8w页/人/次.如果是内容博客等结构单一的网站基本上能够满足要求。 2)Database StoreDatabase是开发过程中首先碰到限额天花板的一项,最突出的是Database Small Operation,它的统计数据来自于GQL(Google开发的一套类SQL的数据库操作语句)中基于Key的查询,比如SELECT key FROM Person,这种语句都会统计到Small Operation中。这种查询在程序中使用频率不是很高,大部分情况下会采用 SELECT * FROM Person。对于在数据库中以Blob类型存储大量图片的web应用来说可能会是一场灾难,因为图片的
3 min read
Cloud

云数据服务的弄潮儿

原文链接 [http://gigaom.com/cloud/cloud-databases-101-who-builds-em-and-what-they-do/] 作者:Derrick Harris 还记得只能选择两三家云计算数据服务的时候吗?事实上,伴随着云计算的发展,在这几大云平台上已经迅速地构建了很多云数据服务。本文介绍一些主流并且当前运行良好的云数据服务(注:我们这里讨论管理型的数据服务而不是那些还需要专人来管理和维护的数据库实例)。虽然本文作了深入的分析,但难免有疏漏,欢迎指出纰漏之处。 SQL服务 Amazon关系型数据服务 是最先发布也是最完善的云数据服务之一。与大多数AWS服务一样,它提供了AWS服务接口,兼容其他绝大多数的AWS服务。在此之前它仅提供基于AWS主机的MySQL数据服务,现在它也为用户提供SQL Server和Oracle数据服务。 Clustrix数据即服务: 数据库供应商Clustrix在周二也加入云服务的行列。它的数据服务运行在Rackspace云平台上,为用户带来了设备的高效性、单租户发布的公平性。其中,在旗舰产品中加入了对MySQL
7 min read
Tech

Google还是Baidu

两篇文章,两个焦点。 《IT界青年才俊:8幅图片揭示谷歌未来》 http://www.leiphone.com/12716-keats-new-features-presage-the-future-google.html 《百度炮轰Google搜索不创新 拟全力进攻云搜索》 http://www.leiphone.com/12716-keats-google-hasnt-innovated-in-search-recently.html 这两篇文章如果单独来看,可能只有惊叹和冗杂科技新闻的一点小事儿。 但是恰好百度的副总裁王梦秋给我们一个机会去回答这个问题。 在第二篇文章中,王梦秋指责说最近Google不作为,没有专心做好搜索引擎。回顾Google和Baidu的创立,业界流言李彦宏当时关于信息检索的论文要早与拉里佩奇、谢尔盖布林的PageRank的论文,这家公司的创始人都是技术出身,都拥有较深厚的学术功底,但是其领导下的企业---Google在改变世界,Baidu在改变中国。 Google现在在做什么,相信第一篇文章已经给了我们一个很明晰的答案。这8幅图片里面确实看不
4 min read
Translate

OMAP5 特点和优势

OMAP 5 平台处于从内容消费级转变到未来计算级的移动设备阶段。 OMAP5 支持内容创建、编辑,也支持高级的用户体验-3D游戏、手势识别、实景增强的应用。 作为Cotrex-A15开发上的高级合作伙伴,与ARM紧密合作让OMAP 5 成为市场上第一个使用ARM Cotrex-A15架构的片上系统(SoC)。 带来可变的移动体验领先的移动操作系统支持,用户真实环境下的集成测试优化的电源管理技术,更长久的电池寿命内集成的WiLink 单芯片连接,支持GPS、WiFi、蓝牙、FM预留调制解调器接口软件更加容易地连接任意额外的调制解调器 特点优势 28纳米制程、低功耗工艺高水平的处理器性能、最低的功耗基于对称多处理(SMP)的智能多核架构,包含两个提供SMP的ARM Cotrex-A15核心,两个低功耗控制、实时控制的Cortex-M4核心更强的移动处理性能相比上一代2-3倍的性能提升更快的用户展示同时更少的功耗针对特殊处理过程仅保持必要核心活动的可扩展性通过Hypervisor支持的虚拟化技术带来高效的性能、多操作系统的支持IVA 3 高清多媒体加速支持高清1080p60编码解码
2 min read
Tech

看腾讯微博、说说、个性签名三大产品

微博现在在中国算是最火热的互联网产品,从新浪的迅速成型到平台开发再到腾讯的1亿微博用户,随后的搜狐等纷纷跟进,这一切都证明着一个国外复制的神话。 试推想一下,倘若国外不能诞生Twitter这款产品国内会不会诞生同类的产品呢?答案是:在正确的用户引导和体验下完全有可能。 以腾讯为例,短消息平台本身就存在,QQ空间的说说这应用是在2010年才更改了此名称,疑为微博让路。从产品的功能来说与微博极为相似,限定的输入字数,允许转发,允许评论。这些都与围脖的功能一致。但是腾讯并没有将其作为一个单独的产品开发,只作为空间的一个应用来对待,当然虽然随后加入了添加视频链接和图片功能延伸了它的功能特性,但是依然没有走出简单应用的手掌心。腾讯拥有业界所称的最强大的用户体验,但是为什么就没有将这一简单的应用化为Twitter呢? 首先,本身作为空间的应用模块,在初始阶段就为它的功能和定位做下辅笔,其次腾讯拥有强大的用户群既是好处也有风险,在庞大的用户群下,对产品的定位转变是要付出极大的代价,腾讯本身就没有挑战与此的意味。这都证明了说说只能沦为一个空间应用。 腾讯微博与其说是对国外的模仿不如说是对国内新
3 min read