技术文章

概要设计

守給你的承諾、 提交于 2021-02-17 07:55:29
软件系统的开发是按阶段进行的,一般划分为以下阶段:可行性讨论;需求分析;系统设计(概要设计、详细设计);程序开发;编码,单元测试;系统测试;系统维护。 软件开发过程中要明确各阶段的工作目标、实现该目标所必需的工作内容以及达到的标准。只有在上一个阶段的工作完成后,才能开始下一阶段的工作。 1.可行性讨论 明确系统的目的、功能和要求,了解目前所具备的开发环境和条件,论证的内容有:① 在技术能力上是否可以支持;② 在经济上效益如何;③ 在法律上是否符合要求;④ 与部门、企业的经营和发展是否吻合;⑤ 系统投入运行后的维护有无保障。 可行性讨论的目的是判定软件系统的开发有无价值。分析和讨论的内容形成“系统开发计划书”,主要内容有: (1) 开发的目的及所期待的效果; (2) 系统的基本设想,涉及的业务对象和范围; (3) 开发进度表,开发组织结构; (4) 开发、运行的费用; (5) 预期的系统效益; (6) 开发过程中可能遇到的问题及注意事项。 2、系统需求分析 系统需求分析是软件系统开发中最重要的一个阶段,直接决定着系统的开发质量和成败,必须明确用户的要求和应用现场环境的特点,了解系统应具有哪些功能、数据的流程和数据之间的联系。需求分析应有用户参加,到使用现场进行调研学习,软件设计人员应虚心向技术人员和使用人员请教,共同讨论解决需求问题的方法,对调查结果进行分析,明确问题的所在

那个割肾换iPhone的男生,现在怎么样了?

我怕爱的太早我们不能终老 提交于 2021-02-17 07:55:08
点击蓝色“ 程序员书单 ”关注我哟 加个“ 星标 ”, 每天带你 看好文,读好书! 来自:网络 前几天iphone12发布,大家都纷纷都在调侃肾12。 但是,大家知道苹果手机为什么叫“肾机”吗? 1 Iphone==肾机? 9年前iPhone4s发布。 作为乔帮主生前最得意的一款产品,iPhone4s 在发布之初便受到了消费者的热烈追捧。 2011年,那真是苹果手机最高光的一年,人们为了购买苹果手机可以整夜在排队,甚至可以用一年的薪资来买一部手机。 那 时 的苹果手机也是真的能打,放眼望去完全没有一个可以看得上的对手,乔布斯重新定义了什么叫做智能手机。 当时的中国经济还不是那么好,对于年轻人来讲哪怕是攒了一年钱,也未必可以买的起一部苹果手机。 于是个别年轻人走向了极端,一个17岁叫做小王的年轻人,为了买最新款的 iphone 手机,毅然前往黑市卖掉了自己的一个肾。 (说实话,这张图片我看了都觉得疼) 这个事件被报道出来之后,从此人们开始对苹果手机叫做“肾机”。 2 他是怎么卖的呢? 那小王是如何将自己的肾卖掉的呢? 2011年,小王看到同龄的年轻人在用iphone,他自己也非常渴望获得一部iphone手机,但是他没有钱家里条件也并不好。 于是在网上寻找一些可以换钱的手段,有一天他在QQ群了解到一个卖肾的地下生意,只要卖掉一个肾可以获得一笔不错的收益。 黑中介对小王说

linux kali 的ifconfig命令

五迷三道 提交于 2021-02-17 07:54:35
ifconfig命令 1.ifconfig执行页面 1 root@localhost:/home/zys# ifconfig 2 lo: flags=73 < UP ,LOOPBACK,RUNNING > mtu 65536 3 inet 127.0.0.1 netmask 255.0.0.0 4 inet6 ::1 prefixlen 128 scopeid 0x10 < host > 5 loop txqueuelen 0 (Local Loopback) 6 RX packets 1398633 bytes 2195165994 (2.0 GiB) 7 RX errors 0 dropped 0 overruns 0 frame 0 8 TX packets 1398633 bytes 2195165994 (2.0 GiB) 9 TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 10 11 p2p0: flags=4099 < UP ,BROADCAST,MULTICAST > mtu 1500 12 ether 66:cc:2e:d1:56:c2 txqueuelen 1000 (Ethernet) 13 RX packets 0 bytes 0 (0.0 B) 14 RX errors 0 dropped 0

leetcode python 010

末鹿安然 提交于 2021-02-17 07:54:19
#实现正则表达式匹配并支持'.'和'*'。 #''匹配任何单个字符。 #'*'匹配前面元素的零个或多个。 #匹配应覆盖整个输入字符串(非部分)。 ##Some examples: ##isMatch("aa","a") → false ##isMatch("aa","aa") → true ##isMatch("aaa","aa") → false ##isMatch("aa", "a*") → true ##isMatch("aa", ".*") → true ##isMatch("ab", ".*") → true ##isMatch("aab", "c*a*b") → true def ismatch(s,re): l=[] for k in range(len(re)): if re[k]=='*': l.append(k) re=''.join(re.split('*')) for i in range(len(l)): l[i]=l[i]-i-1 print(re) print(l) flg=0 for i in range(len(s)): ## *退出 while flg in l and s[i]!=re[flg] and re[flg]!='.': flg+=1 if flg==len(re): return False,'re too short' if

OCP换题库了,052最新题库及答案整理-第8题

|▌冷眼眸甩不掉的悲伤 提交于 2021-02-17 07:53:43
8、Which two are true about the Fast Recovery Area (FRA)? A) It should be larger than the database. B) Space management In the FRA Is Influenced by the database backup retention policy. C) A database must be in ARCHIVELOG mode to use the FRA. D) It must reside on the same file system as the database data files. E) Only consistent backups can be stored in the FRA. Answer:AB 来源: oschina 链接: https://my.oschina.net/u/3902946/blog/1844046

进程和线程的区别

橙三吉。 提交于 2021-02-17 07:53:12
进程和线程的区别 一、进程和线程的关系 线程与进程的区别可以归纳为以下4点: 地址空间和其它资源(如打开文件):进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。 通信: 进程间通信IPC ,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要 进程同步 和互斥手段的辅助,以保证数据的一致性。 调度和切换:线程上下文切换比进程上下文切换要快得多。 在多线程操作系统中,进程不是一个可执行的实体。    通过漫画了解线程和进程 二、线程的特点 在多线程的操作系统中,通常是在一个进程中包括多个线程,每个线程都是作为利用CPU的基本单位,是花费最小开销的实体。线程具有以下属性。 轻型实体 线程中的实体基本上不拥有系统资源,只是有一点必不可少的、能保证独立运行的资源。 线程的实体包括程序、数据和TCB。线程是动态概念,它的动态特性由线程控制块TCB(Thread Control Block)描述,TCB用于指示被执行指令序列的程序计数器、保留局部变量、少数状态参数和返回地址等的一组寄存器和堆栈。 TCB包括以下信息: 线程状态。 当线程不运行时,被保存的现场资源。 一组执行堆栈。 存放每个线程的局部变量主存区。 访问同一个进程中的主存和其它资源。 独立调度和分派的基本单位 在多线程OS中,线程是能独立运行的基本单位,因而也是独立调度和分派的基本单位。由于线程很

Google是如何做Code Review的

爷,独闯天下 提交于 2021-02-17 07:47:04
我和几个小伙伴一起翻译了Google前一段时间放出来的 Google's Engineering Practices documentation ,翻译后的github仓库 https://github.com/xindoo/eng-practices-cn ,欢迎加star。目前只是翻译完了,因为译者水平有限,还需要审校。另外后续google肯定还会有新内容放出来,欢迎想参与贡献的小伙伴加入,也欢迎在 github 上加star。 这篇文章是 Google's Engineering Practices documentation 的第一章 Code Review实践指南 谷歌Code Review指南 , 包含两个子章节: 评审者指南 开发者指南 术语 部分文档中会用到一些谷歌内部的术语,特在此说明: CL : "changelist"的缩写,代表已经进入版本控制软件或者正在进行代码评审的变更。 其他组织经常称为"change"或者"patch"。 LGTM : "Looks Good to Me."的缩写,看起来不错,评审者批准CL时会这么说。 评审者指南 Code Review标准 Code Review的主要目的是始终保证随着时间的推移,谷歌代码越来越健康,所有Code Review的工具和流程也是针对于此设计的。 为了完成这点,我们不得不权衡利弊。 首先

Python带括号的计算器

天涯浪子 提交于 2021-02-17 07:44:45
带括号的计算器也是第一个自我感觉完成最好的 毕竟真的弄了一个多星期 虽然前期这路真的很难走 我会努力加油 将Python学好学踏实 参考了两位博主的文章 http://www.cnblogs.com/0zcl/p/5983236.html http://www.cnblogs.com/loyfee/p/5764926.html#3538071 大致过程就是 先将输入的数据转为列表 当中去除空字符 接着找出最里层括号 进行运算 再将结果放回列表 最后算出结果 import re #data = input( " 请输入算术: " ) def change_list(data): data =re.sub( " " , "" ,data)#将空格转为 "" # print(data) data_list = [] for i in data: data_list.append(i) num = 0 try : while 1 : if data_list[ 0 ] == " - " : data_list[ 0 ] = data_list[ 0 ] + data_list[ 1 ] data_list.pop( 1 ) if data_list[num].isnumeric(): if data_list[num+ 1 ].isnumeric(): data_list[num] =

使用 kubeadm 安装最新 Kubernetes 1.15 版本

荒凉一梦 提交于 2021-02-17 07:40:20
导读: kubeadm是Kubernetes官方提供的用于快速安装Kubernetes集群的工具,伴随Kubernetes每个版本的发布都会同步更新,kubeadm会对集群配置方面的一些实践做调整,通过实验kubeadm可以学习到Kubernetes官方在集群配置上一些新的最佳实践。 作者:青蛙小白 原文: https://blog.frognew.com/2019/07/kubeadm-install-kubernetes-1.15.html 最近发布的Kubernetes 1.15中,kubeadm对HA集群的配置已经达到beta可用,说明kubeadm距离生产环境中可用的距离越来越近了。 1.准备 1.1系统配置 在安装之前,需要先做如下准备。两台CentOS 7.6主机如下: cat /etc/hosts 192.168.99.11 node1 192.168.99.12 node2 如果各个主机启用了防火墙,需要开放Kubernetes各个组件所需要的端口,可以查看Installing kubeadm中的”Check required ports”一节。这里简单起见在各节点禁用防火墙: systemctl stop firewalld systemctl disable firewalld 禁用SELINUX: setenforce 0 vi /etc/selinux

1.9/1.11PuTTY远程连接和密钥认证&1.10/1.12使用xshell连接和密钥认证

混江龙づ霸主 提交于 2021-02-17 07:35:38
1.9 使用PuTTY远程连接Linux &1.11 putty密钥认证 PuTTY链接: 打开安装好的Putty 设置主机地址,ssh链接 输入用户名及密码,连接成功 PuTTY密钥认证: Putty gen点击Generate 生成密钥 点击Save private key保存私钥 mkdir /root/.ssh #根目录下新建一个.ssh的隐藏目录 ls -a /root/ vi /root/.ssh/authorized_keys #编辑时自动创建,复制公钥到此文件 chmod 700 /root/.ssh/ #给目录设置权限 chmod 600 /root/.ssh/authorized_keys #给文件设置权限 setenforce 0 #临时关闭,下次重启会开启 getenforce #获取selinux的状态,“Permissive”表示临时关闭成功 vi /etc/selinux/config #找到SELINUX=ENFORCING,改成SELINUX=disabled,永久关闭 systemctl stop firewalld #暂时关闭firewalld 重新打开一个PUTTY 选择刚定义好的名字 c 点击load 加载进来后返回session ,save一下,点击open,打开 打开后输入用户root 后提示变了,再输入密钥的密码