ARTS

Wesley13
• 阅读 509

ARTS

ARTS

ARTS的初衷

Algorithm: 主要是为了编程训练和学习。

Review:主要是为了学习英文

Tip:主要是为了总结和归纳在日常工作中所遇到的知识点。学习至少一个技术技巧。在工作中遇到的问题,踩过的坑,学习的点滴知识。

Share:主要是为了建立影响力,能够输出价值观。分享一篇有观点和思考的技术文章

https://www.zhihu.com/question/301150832

一、Algorithm

Power of Two

Given an integer, write a function to determine if it is a power of two.

Example 1:

Input: 1
Output: true
Explanation: 20 = 1
Example 2:

Input: 16
Output: true
Explanation: 24 = 16
Example 3:

Input: 218
Output: false

class Solution { public boolean isPowerOfTwo(int n) { //位运算 return n>0 && (n & (n-1))==0; }``}

二、Review

1、DevOps是什么

DevOps文化的兴起是因为在早期许多开发者对于自己的程序是怎么跑在真实世界中所知有限,开发者要做的事情就是将程序打包好,然后扔给运维部门后,自己的工作周期就结束了,而运维部门会负责将程序部署到所有生产环境的机器上,同时也想尽各种办法和善用各种工具,确保这些程序持续正常地运作,即使运维部门完全不了解研发的程序背后实现细节

这样的工作模式很容易造成两个部门之间的对立,各自的部门都有自己的目标,而各自的目标和公司商业需求可能会不一致。DevOps的出现是为了带来一种新的软件开发文化,以降低开发与运维之间的鸿沟

然而,DevOps的本质并不是教导大家怎么做才会成功,而是订定一些基本原则让大家各自发挥,用程序设计的术语来说,DevOps比较像是一个“抽象类”或是“接口”,定义了这种文化该有什么样的行为,“实现”则是靠各个部门成员一起完成,只要符合规范,就可以说是DevOps文化的实践

SRE概念由Google公司提出,同时提出了更多关于如何用软体工程的方法和从运维的角度出发以保障系统稳定的规范。简单来说,SRE团队”实现”了DevOps这个”接口”。以下列出五点DevOps定义的”接口”以及SRE团队如何”实现”:

  • DevOps:减少组织之间的谷仓效应

  • SRE团队:和开发团队使用相同的工具和技术

  • DevOps:接受失败

  • SRE团队:视失败为开发周期中的一个元素,同时建立一套可以量化的指标去衡量失败

  • DevOps:逐渐改变

  • SRE团队:鼓励通过降低故障成本来达成快速交付的目的

  • DevOps:善用工具和自动化

  • SRE团队:鼓励团队把重复琐事自动化

  • DevOps:任何事都是可以被测量的

  • SRE团队:建立关于可用性、运行时间、停机时间的约束规范

2、SRE必知清单

  • 1)了解如何获取CPU、操作系统版本等系统信息(cat /proc/version,/proc/cpuinfo,uptime等)

  • 2)理解定时任务cron工作原理,学会设置”特定日期/时间/月”周期性cron任务

  • 3)了解各种shell之间的区别:sh,dash, bash, ash ,zsh ..

  • 4)了解shell配置文件的区别:〜/ .bashrc,.bash_profile,.environment

  • 5)了解如何设置和取消设置ENV变量。如何设置永久变量

  • 6)了解Vim及其配置(.vimrc)及其一些基本技巧

  • 7)理解Swap交换分区工作原理,内核参数swappiness的作用。(swapon -s,/proc/sys/vm/swappiness,sysctl vm.swappiness ..)

  • 8)掌握一门脚本语言,如Python,Perl

  • 9)掌握有用的命令,如进程监控命令(ps,top,htop,atop ..),系统性能命令(nmon,iostat,sar,vmstat ..)和网络故障排除和分析(nmap,tcpdump,ping,traceroute,airmon,airodump ..)

  • 10)了解ext4,ntfs,fat文件系统,了解磁盘阵列RAID原理、种类及性能优缺点对比

  • 11)了解系统上查看/设置网络配置的方法

  • 12)了解在具有不同子网的计算机上设置静态/动态IP地址

  • 13)学会分析和了解网络的工作原理,如tcpdump,Wireshark ..

  • 14)理解OSI模型和TCP/IP模型规范,TCP和UDP的区别

  • 15)学会设置防火墙iptables:设置规则,列表规则,路由流量,阻塞协议/端口,NAT转换..

  • 16)学会查看/设置/备份您的路由器设置

  • 17)理解DNS工作原理,了解如何设置DNS服务器(Bind,Unbound,PowerDNS,Dnsmasq ..),了解A、AAAA、CNAME、TXT的区别,理解递归和权威DNS的区别,学会排查DNS问题(nslookup,dig ..etc)

  • 18)理解当你在浏览器中输入www.liangsonghua.me然后回车会发生什么?学会从浏览器的缓存,本地DNS缓存,本地网络配置(主机文件),路由,DNS,网络,Web协议,缓存系统到Web服务器进行分析

  • 19)熟悉CDN提供商,如fastly,Akamai

  • 20)熟悉SSL/TLS的工作原理以及数字证书的工作原理

  • 21)了解SSH工作原理,以及调试它以及如何生成ssh密钥以及无密码登录到其他计算机的方法

  • 22)了解init系统

  • 23)学会设置Web服务器

  • 24)学会使用“awk,sed,sort,uniq”分析Nginx访问日志文件

  • 25)学会使用日志管理工具(rsyslog,logstash,fluentd,logwatch,awslogs ..)

  • 26)学会设置反向代理(Nginx ..)

  • 27)学会设置缓存服务器(Squid,Nginx,Varnish ..)

  • 28)学会设置负载均衡器(HAproxy,Nginx ..)

  • 29)了解L4/L7负载均衡器

  • 30)学会为微服务设置API网关(Ambassador,Kong,Traefik,Nginx ..)

  • 31)熟悉Systemd以及如何使用systemctl和journalctl等命令分析和管理服务

  • 32)熟悉OAuth和SAML或Auth0集成

  • 33)熟悉RESTful API,Webhooks,GraphQL,gRPC

  • 34)学习根据需要在不同类型的数据库之间进行选择:SQL,NoSQL,TSDB…,学习其备份策略,学习如何测试备分是否可靠

  • 35)阅读有关PaaS/Iaas/Saas/CaaS/FaaS/DaaS和serverless架构的信息

  • 36)了解如何使用至少一个配置管理和远程执行工具(Ansible,Puppet,SaltStack,Chef ..)。您的选择应基于以下标准:语法,性能,模板语言,推送与拉模型,性能,体系结构,与其他工具的集成,可伸缩性,可用性等等

  • 38)学会将Jenkins集成到CI/CD中

  • 39)学会设置Consul,用于服务发现

  • 40)熟悉可帮助您创建可分发和可移植开发环境的工具Docker容器,熟悉基本的Docker命令(logs,inspect,top,ps,rm),基本的仓库管理命令(push,pull),了解底层架构(cgroups,namespaces)运行原理

  • 41)研究容器编排工具:Docker Swarm,Kubernetes,并了解他们的组件及其工作原理

  • 42)熟悉Kafka消息引擎

  • 43)了解Redis分布式缓存,学习根据应用需求设置和调整Redis

  • 44)熟悉Hadoop,HBase,Zookeeper,Spark等大数据框架并搭建高可用集群

  • 45)了解应用程序的性质:CPU密集型,内存密集型,I/O密集型

  • 46)阅读有关无状态和有状态的应用程序设计

  • 47)了解微服务架构的优缺点,并开始构建类似的架构

  • 48)了解如何配置和使用持续集成和持续交付工具,如Jenkins,Travis CI,Buildbot,GoCd。将这些工具与其他工具(如构建工具,配置管理软件,Docker,云提供商的SDK ..等)集成

  • 49)学习分布式版本控制系统Git及其基本命令(pull,push,commit,clone,branch,merge,logs …等)。了解Git工作流程,了解Git高级用法,如回滚、代码审阅、向开源框架贡献代码等等

  • 50)熟悉内核版本的Bug以及如何修补它们

  • 51)了解如何生成校验和以验证任何文件的完整性

  • 52)了解如何实现零停机部署,了解回滚、自我修复、自动扩展策略

  • 53)熟悉API和服务:RESTfull,类似RESTful,API网关,Lambda函数,无服务器计算,SOA,SOAP,JMS,CRUD

  • 54)了解如何保护您的基础架构,网络和运行的应用程序

  • 55)了解ChatOps并尝试使用其中一个已知框架,如Hubot,Lita,Cog

  • 56)了解监控的方式和内容,了解如何配置和使用某些监控系统(Nagios,Zabix,Sensu,Prometheus..etc)

  • 57)了解DevOps词汇表

  • 58)尝试建立良好的开发实践和坚实的架构

  • 59)了解如何在生产级别进行扩展

  • 60)了解如何在生产服务器中实时调试和跟踪运行的应用程序

文章参考:
    https://cloud.google.com/blog/products/gcp/sre-vs-devops-competing-standards-or-close-friends?m=1

https://medium.com/faun/the-must-know-checklist-for-devops-site-reliability-engineers-update-8ba44dbc824

三、Tip

Arrays#asList容易踩的坑

我们习惯使用Arrays#asList将Array转成ArrayList,但是其实Arrays#asList返回的其实是java.util.ArrayList,它是Arrays的定长集合类,它实现了set、get、contains方法,但是没有实现add、remove方法,调用它的add、remove方法实际上会调用父类AbstractList的方法,但是没有具体实现,仅仅抛出UnsupportedOperationException异常。同时java.util.ArrayList参数为可变长泛型,当调用其size方法时得到的将会是泛型对象个数,也就是一。另外asList得到的ArrayList其实是引用赋值,也就是说当外部集合改变时,集合会同步变化,这些都是我们平时需要注意的细节,更多细节的技巧点击阅读[码出高效JAVA代码](http://www.liangsonghua.me/archives/174)

四、Share

学习分享:DDD领域驱动设计指导微服务实践

ARTS

ARTS

本文分享自微信公众号 - 松华说(songhuasay)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这