今天在地铁上刷脉脉的时候,发现脉脉热点第一的话题就是这个,看了下面的各种评论,我有些认同,有些不认同,各种思维在我的脑海中不停的碰撞,所以我决定写下这篇文章来总结我的观点。
下面我从下面几点进行讨论。
学历首先我们来思考一下
学历是什么?
学历是我们从哪所学校毕业的证明,是我们入职公司所必须要的一个东西。
学历可以证明什么?
我认为学历是你过去在上学阶段的重要成果,可以证明你在过去的二十几年里,学习能力非常出色,理解能力很到位,从而可以在优秀的学校毕业。
那么问题来了,学历低或者甚至没有学历的同学,是否所有的人都是智商不行?是否所有的人都是学习能力不行?是否所有的人理解能力都很差,高学历就可以学会,而低学历却需要两三遍。
不是的,事实上,只是从概率来说,是从好学校毕业的学生整体素质比其他学校的高而已,仅此而已。
企业首先要思考的是,企业招聘人员的目的在哪里?毫无疑问,肯定是要帮助企业成长的人才。那么什么才算是人才那?在社会普遍认知来说,在学历高的人群中,优秀的人才相对来说概率更大。事实上也确实是如此,那么企业是否要把高学历作为招聘人才时候的唯一标准那?
这个当然不对,因为这样的话, ...
文章摘要自己在md文件中随意一处加入
1<!-- more -->
就可以将这个语句之上的作为摘要了
题目给定一个红包总金额和分红包的人数,输出每个人随机抢到的红包数量。
要求:
每个人都要抢到红包,并且金额随机。
每个人抢到的金额数不小于1
每个人抢到的金额数不超过总金额的30%
例如总金额100,人数10,输出【19 20 15 1 25 14 2 2 1 1】
思路
首先是这个人数必须要大于等于4,否则直接都不满足第三个条件
new 一个数组,让这个数据的每个数据都等于1
new一个随机数在1到30之间
代码12345678910111213141516171819202122232425262728293031323334353637383940414243444546 public static void main(String[] args) { int total=0; int count=50000; for (int i = 0; i < count; i++) { int packet = getPacket(100, 10); tota ...
部署方案滚动发布这是最常见的部署模式,一般就是说你一个服务/系统都会部署在多台机器上,部署的时候,要不然是手动依次部署,最low 的比如就是每台服务器上放一个tomcat,每台机器依次停布机 tomcat,然后把新的代码放进去,再重新启动tomcat,各个机器逐渐重启,这就是最low的的滚动发布
手动部署
备份原来的代码
将新的代码部署上去
自动化部署一些自动化工具可以帮助我们自动化部署到机器上,比如Jenkins,它会从你指定的git仓库中拉取相应的代码,然后部署到指定的机器上
无论是手动部署,还是自动化部署,都需要考虑如果部署失败,如何进行版本回退
那么如何来看是否部署成功那?
人工的话,就是去各个机器上看对应的日志就可以
使用jenkins的话,也会有日志打印,部署失败,会有相应提示
灰度发布灰度发布,指的就是说,不要上线就滚动全部发布到所有机器,一般就是会部署在比如1台机器上,采用新版本,然后切比如10%的流量过去,观察那10%的流量在1台机器上运行-段时间,比如运行个几天时间,观察日志、异常、数据,是否一切正常,如果验证发现全部正常,那么此时就可以全量发布 ...
学习链接
链接2 官方地址
git在线练习网站
原理
常用命令特殊符号^一个^代表往前一个commit
比如git rebase HEAD^ ,就是当前的commit往前一个commit
git rebase HEAD^^ ,就是当前的commit往前两个commit
~~5 就是当前的commit往前五个
HEADhead就是指向当前的commit
pullgit pull 将数据从远程仓库拉取到本地仓库
pull的实质是先把代码从远程仓库拉取下来,然后merge
pushgit push 将本地仓库的数据推送到远程仓库中
branch123456#branch 就是分支的意思#当前分支切换到a分支git branch a #f是强制的意思,强制将master强制指向head的父节点git branch -f master HEAD~1
commitgit commit —amend会在分支上真的提交,是一个新的commit,而不是将刚才的commit替换掉,不会操作原commit
只有最新的commit出错才可以amend,其他的要用rebase
checkou ...
sql语句
database12345678#显示所有数据库show databases;#切换数据库use 数据库名;#DDL 数据定义语言,DDL语言是隐性提交的,不能rollbackcreate#DML 数据操纵语言insert update delete
select123select 字段 from 表名select * from 表名 #查询所有docker exec -it mysql bash #进入到docker的mysql中
delete1DELETE FROM 表名称 WHERE 列名称 = 值
删除delete1update tableName set key1=value1,key2=value2 where
delete不建议在生产上删除大规模数据,因为这会导致数据库性能下降。
原因是 使用delete删除数据会形成一个大事务,非常影响数据库的服务
如果使用delete误删除数据了,可以通过Flashback工具来进行恢复
Flashback 恢复数据的原理,是修改 binlog 的内容,拿回原库重放。而能够使用这个方案的前提是, ...
基础认识
二叉树二叉树,顾名思义就是一个结点有两个分叉就是二叉树
创建一个二叉树
12345678910public static class BinaryTreeNode { private int data; //节点的具体数据 private BinaryTreeNode leftChirld; //左孩子 private BinaryTreeNode rightChirld; //右孩子 private BinaryTreeNode(int x) { data=x; }}
满二叉树所有结点(除了叶子结点外)都有左节点和右节点
完全二叉树假设完全二叉树高度为k,则完全二叉树需要符合以下两点: 1)所有叶子节点都出现在k层或k-1层,并且从1~k-1层必须达到最大节点数。 2)第k层可以是不满的,但是第k层的所有节点必须集中在最左边。
平衡二叉树二叉搜索树红黑树
根节点是【黑色】
每个节点要么是【黑色】要么是【红色】
每个【红色】节点的两个子节点一定都是【黑色】
每个叶子节点(NIL) ...
主从架构
其实就是一个master服务器和一个slave服务器
master服务器主要负责平常的读和写,而slave就是要同步master的数据
同步原理
从库上有个io线程与主库进行tcp连接
这个io线程请求主库将binlog传输给自己,主库上有个io dump线程,负责通过这个tcp连接把binglog日志传输给从库的io线程
从库的io线程会把读取到的binlog日志写入到自己的本地的中转(relaylog)日志中
从库中另外一个sql线程会读取relay日志里的内容,进行日志重做,把所有主库执行过的增删改查,在从库上执行一遍,做到数据和主库的数据一致
从库可以设置为只读(readonly)模式
有时候一些运营类的查询语句会被放到备库上去查,设置为只读可以防止误操作;
防止切换逻辑有 bug,比如切换过程中出现双写,造成主备不一致;
可以用 readonly 状态,来判断节点的角色。
你可能会问,我把备库设置成只读了,还怎么跟主库保持同步更新呢?
因为 readonly 设置对超级 (super) 权限用户是无效的,而用于同步更新的线程,就拥有超级权限。
建议lo ...
Explain
模样
使用1explain select * from user
possible_keys所有的可能使用的索引
key实际使用的索引
select_typesimply 单表或者多表连接查询
primary 主查询
subquery 子查询
union_result 根据union去重
depend subquery 内层的子查询
depend union 内层的union
derived 根据临时表执行的查询
materialized 物化为临时表,就是生成一个临时表存储到磁盘上
id一个select对应一个id,如果是多个select就会对应多个id
keys_len索引的长度
extrausing index直接在二级索引中查到结果,不需要回表
using index condition
using where
没有用到索引
除了用到了索引,还用到了其他没有索引的字段
using firesort没有用到索引,会基于内存或者磁盘进行排序,大部分情况下都是基于内存进行排序的,性能非常差
using temporary使用了临时表进行操作
us ...