MySQL 5.6 5.7 组内排序的区别

MySQL 5.7 对比 5.6 有很多的变化。一个常见的需求:按条件分组后,取出每组中某字段最大值的那条记录。其实就是组内排序的问题,我的做法是:子查询先进行倒序排序,外层查询分组。 示例 +----+----+-------+ | id | no | name | +----+----+-------+ | 5 | 5 | Mike | | 4 | 4 | Herry | | 3 | 3 | wyett | | 2 | 2 | John | | 7 | 2 | John | | 1 | 1 | Mike | | 6 | 1 | John | | 8 | 1 | Mike | | 9 | 1 | Mike | +----+----+-------+ 要求:取出每人(按 name),最大 no 的记录。 ...

April 20, 2017 · 4 min · 765 words · Me

MySQL 管理用户与访问授权

MySQL 创建用户、修改密码、删除用户;查看、授予、撤销用户权限;对 MySQL 远程访问的新理解。 -- 创建用户 + 授权 GRANT ALL PRIVILEGES ON _._ TO 'tom'@'%' IDENTIFIED BY 'pwd123' WITH GRANT OPTION; -- 查询权限 SHOW GRANTS FOR 'tom'@'%'; -- 授权 GRANT SELECT ON `my_db`.* TO 'tom'@'%'; -- 撤权 REVOKE ALL PRIVILEGES ON `my_db`.* FROM 'tom'@'%'; REVOKE GRANT OPTION ON `my_db`.* from 'tom'@'%'; -- not necessary FLUSH PRIVILEGES; 管理用户 创建用户 CREATE USER 'username'@'host' IDENTIFIED BY 'password'; username:创建的用户名 host:该用户在哪个主机上可以登陆。如果是本地用户可用 localhost;如果想让该用户可以从任意远程主机登陆,可以使用通配符 % password:该用户的登陆密码。密码可以为空,如果为空则该用户可以不需要密码登陆服务器 例子: ...

April 11, 2017 · 2 min · 376 words · Me

Git 在工作目录之间使用 push 进行同步

Pushing to a non-bare repo is now possible (Git 2.3.0 February 2015). And it is possible when you are pushing the branch currently checked out at the remote repo! 现在已经是可以在俩个 non-bare 的仓库之间推送代码。 只需要再远程仓库配置: git config receive.denyCurrentBranch updateInstead 就可以直接 push 分支到远程,并更新工作区。此方法可以用于项目部署。 receive-pack: add another option for receive.denyCurrentBranch When synchronizing between working directories, it can be handy to update the current branch via ‘push’ rather than ‘pull’, e.g. when pushing a fix from inside a VM, or when pushing a fix made on a user’s machine (where the developer is not at liberty to install an ssh daemon let alone know the user’s password). ...

March 30, 2017 · 1 min · 184 words · Me

Git pull rebase 和 merge no-ff 保持提交线图整洁

git log 中的一个清晰的提交线图是很方便进行 code review 和代码回退 git pull --rebase 主要是为是将提交约线图平坦化,而 git merge --no-ff 则是刻意制造分叉 pull rebase perform a rebase after fetching 状况 Git 作为分布式版本控制系统,所有修改操作都是基于本地的,在团队协作过程中,假设你和你的同伴在本地中分别有各自的新提交,而你的同伴先于你 push 了代码到远程分支上,所以你必须先执行 git pull 来获取同伴的提交,然后才能 push 自己的提交到远程分支。 按照 Git 的默认策略,如果远程分支和本地分支之间的提交线图有分叉的话(即不是 fast-forwarded),Git 会执行一次 merge 操作,因此产生一次没意义的提交记录,从而造成了像上图那样的混乱。 解决 其实在 pull 操作的时候,使用 git pull --rebase 选项即可很好地解决上述问题。 加上 --rebase 参数的作用是,提交线图有分叉的话,Git 会 rebase 策略来代替默认的 merge 策略。 假设提交线图在执行 pull 前是这样的: A---B---C remotes/origin/master / D---E---F---G master 如果是执行 git pull 后,结果多出了 H 这个没必要的提交记录。提交线图会变成这样: ...

March 17, 2017 · 2 min · 231 words · Me

Git 修改提交历史

在使用 Git 时,我们经常会遇到修改本地提交记录的情况。比如:修改最近一次提交记,还比如:将多次小的 commit 合并成一个大的 commit。 这种做发有利也有弊,利在:review 代码时,可以按功能看,可以省去 review 一些前期写的无效的代码;弊是:一次提交修改过多,如果有问题,不利于调试。 具体情况具体分析,是解决问题的金句。 修改最近一次提交记录 修改提交说明 如果只想更改最近一次的提交说明,只需输入: git commit --amend 然后你就会进入文本编辑器,输入你想要的内容,保存并退出即可 改被提交的快照 如果你完成 commit 后又想修改被提交的快照,增加或者修改其中的文件。 先执行 git add 命令,将修改的文件添加到缓存区,然后运行 git commit -amend 命令,该命令会获取你当前的暂存区的内容一并提交到最后一次 commit 例如:新加了一个文件 new_file.cpp ,想要合并到最后一次提交,过程如下: git add new_file.cpp git commit -amend 也可以直接运行下面的命令,不过要小心,不要提交了多余的文件 git commit -a -amend 将文件从本次提交中移除 如果想把已经 commit 的文件从这次 commit 移除的话,运行命令: git reset [-soft] HEAD~1 # -soft可加可不加,默认就是soft选项 git checkout -filename # 要从本次提交移除的文件名 git commit -m "new commit" 修改多个提交记录 要修改历史中更早的提交,你必须采用更复杂的工具。Git 没有一个修改历史的工具,但是你可以使用 rebase 工具来衍合一系列的提交到它们原来所在的 HEAD 上。 ...

March 13, 2017 · 3 min · 531 words · Me

PHP empty 方法判断 0.0

在使用 empty(mixed $var) 时要考虑 $var 的 类型,尤其是在判断数据库查询后的字段。 bool empty(mixed $var) 以下的东西被认为是空 true 的: ""(空字符串) 0 (作为整数的 0) 0.0 (作为浮点数的 0) "0" (作为字符串的 0) NULL FALSE array() 一个空数组 $var 未初始化的变量 new stdClass() 不包含任何属性的对象 注意: string 的判断要非常注意,数据库查询后的字段常常为 string,应该进行正确的类型转换。 以下的东西被认为是非空 false 的: $var = true; $var = 1; $var = -1; $var = “0.0”; $var = “foo”; $var = array(0); $var = new stdClass(); $var->property = null; $str = '0.0'; echo empty($str); // false 很可能和预期是相反的 echo empty((float)$str); // true – EOF – ...

March 9, 2017 · 1 min · 79 words · Me

IMOOC HTML+CSS 基础课程笔记

【注意】内容不再维护。 HTML+CSS 基础课程-慕课网 2017 年一个心愿,认真学习前端,成为公司里最厉害前端工程师。Flag 立的还是很大的。 第 1 章 HTML 介绍 HTML 是网页内容的载体。内容就是网页制作者放在页面上想要让用户浏览的信息,可以包含文字、图片、视频等。 CSS 样式是表现。就像网页的外衣。比如,标题字体、颜色变化,或为标题加入背景图片、边框等。所有这些用来改变内容外观的东西称之为表现。 JavaScript 是用来实现网页上的特效效果。如:鼠标滑过弹出下拉菜单。或鼠标滑过表格的背景颜色改变。还有焦点新闻(新闻图片)的轮换。可以这么理解,有动画的,有交互的一般都是用 JavaScript 来实现的。 第 2 章 认识标签(第一部分) 常常会听到一个词,语义化。说的通俗点就是:明白每个标签的用途(在什么情况下使用此标签合理)。 比如,网页上的文章的标题就可以用标题标签,网页上的各个栏目的栏目名称也可以使用标题标签。文章中内容的段落就得放在段落标签中,在文章中有想强调的文本,就可以使用 em 标签表示强调等等。 语义化可以给我们带来什么样的好处呢? 更容易被搜索引擎收录。 更容易让屏幕阅读器读出网页内容。 1、在网页上要展示出来的页面内容一定要放在 body 标签中; 2、如果想在网页上显示文章,这时就需要 <p> 标签了,把文章的段落放到 <p> 标签; <p>段落文本</p> 3、标题标签一共有 6 个,h1、h2、h3、h4、h5、h6 分别为一级标题、二级标题、三级标题、四级标题、五级标题、六级标题。并且依据重要性递减。<h1> 是最高的等级: <hx>标题文本</hx> <!-- x为1-6 --> 4、在一段话中特别强调某几个文字,这时候就可以用到 <em> 或 <strong> 标签。在浏览器中 <em> 默认用斜体表示,<strong> 用粗体表示。两个标签相比,目前国内前端程序员更喜欢使用 <strong> 表示强调: <em>需要强调的文本</em> <strong>需要强调的文本</strong> 5、<span> 标签是没有语义的,它的作用就是为了设置单独的样式用的: <span>文本</span> 6、想引用某个作家的一句诗,这样会使你的文章更加出彩,那么 <q> 标签是你所需要的: <q>引用文本</q> 7、<blockquote> 的作用也是引用别人的文本。但它是对长文本的引用,如在文章中引入大段某知名作家的文字,这时需要这个标签。 ...

February 23, 2017 · 10 min · 2060 words · Me

回顾 2016

2016 肯定是很特别的一年。年初离开了老师的队伍,来北京找实习。年中和 318 告别,大学毕业了。年末换房学做饭,开始另种生活。对于 2017 更多了对自己的期待。 2016 是在保定的雾霾中开始。结束了大为,决定离开老师的队伍,来北京实习,这对我来说是一个不大不小的决定。老师带着,跟学长一起走到这里,这里有了很多宝贵的东西,有很多回忆,很多故事可以讲。选择离开,主要还是想看看在这之外的是什么样子。 朋友、老师、爸妈都为我的实习操过心,不过推荐的地方在各种奇怪的理由下都没有成。自己开始在拉勾上投简历,一次次来返在京石铁路上。面试一直是不顺的。完全没有想到对实习生有如此高的要求,很多技术问题正中下怀。心里是有落差的,在我当时的想法里,那些在工程中是用不易用到的,但也感到自己技术知识的浅薄。面试了俩三家后也发现了套路,回答不好的、答不上的问题,回去查查准备准备,下回就能用上。 没什么难度的大学毕业。大学里更多的收获是跟着老师、学长在课堂外搞事,是和宿舍的、好朋友在一起的时间。真的好幸运啊,遇到 318 的舍友们。没想到和你们每一个人都超级聊的来。大四的时候人就渐渐不齐,但只要宿舍在,不到最后毕业真的不知道要分别了。我们相互影响着成长,至少除去了我很多很 low 的思想。我们相互练着酒量、每天演着戏、日常说着骚话。 德育答辩上一个同学说:我常翘课、考试挂科,但我大学四年过的很坦荡,我会因为和舍友游戏上的一个好玩的套路高兴很久。我收获朋友。我没什么后悔的。 这很戳中我的泪点。没什么后悔的,也是对我大学的注脚。愿你们成家的幸福,工作的有成。 从上学到工作,过渡的很平稳。工作中有一些挑战,但总之是还应对的来。可没有什么出众的地方,我不想过的太平凡,愿有一技之长,独挡一面。我常说自己:菜啊、傻啊、什么的,我确实不想用这些来词来逃避问题,我想尽快的甩掉这些。我也愿自己可以更有底气和勇气说出,现在不能说出的话,愿更决绝的对大事小情做决定。 年末随着公司搬家,自己也搬了。炒菜做饭成了每天另一部分。也许才是真正生活二字的开始。 突然想到学长提的一个问题:你们有谁把技术当做以后安身立命的本事? 现在对于我来说,这问题的答案比任何时候都更加清晰。 最后,还是怀揣着 2014 末的敬请期待,让一切皆有可能,开始 2017。 —— 送给 木林木丶 – EOF –

December 31, 2016 · 1 min · 30 words · Me

【Core Java】读书笔记 Part 2

本文总结的是书中的:第 5 章 继承 前几章的总结在:ZYF.IM-【Core Java】读书笔记 Part1 5 继承 5.1 类、超类和子类 1、有些人认为 super 与 this 引用是类似的概念,实际上,这样比较并不太恰当。这是因为 super 不是一个对象的引用,不能将 super 赋予另一个对象变量,它只是一个指示编译器调用超类方法的特殊关键字。 2、使用 super 或 this 调用构造器的语句必须时子类构造器的第一条语句。也就是说 super 和 this 不能同时出现在一个构造器中。 3、this 关键字。 引用隐式参数 调用该类其他的构造器 4、super 关键字 调用超类的方法 调用超类的构造器 5、调用构造器的语句只能作为另一个构造器的第一条语句出现。 6、一个对象变量可以指示多种实际类型的现象被称为多态。在运行时能够自动的选择则调用哪个方法的现象称为动态绑定。 7、Manager[] managers = new Manager[10]; 将它转换成 Employee[] 数组是完全合法的: Employee[] staff = managers;// OK 毕竟如果manager[i]是一个 Manager,也一定是一个 Employee,然而,实际上,将会发生一些令人惊讶的事情。要切记 managers 和 staff 引用的时同一个数组。现在请看: staff[0] = new Employee("Harry Hacker", ..); 编译器竟然接纳了这个赋值操作。staff[0]与manager[0]引用的是同一个对象,似乎我们把一个普通雇员擅自归入了经理行列中了。这时一个种很忌讳发生的情形,当调用managers[0].setBonus(1000)的时候,将会导致调用一个不存在的实例域,今儿搅乱相邻存储空间的内容。 为了确保不发生这类错误,所有数组都要牢记创建它们的元素类型,并负责监督仅将类型兼容的引用存储到数组中。 ...

September 23, 2016 · 2 min · 284 words · Me

LeetCode Shell 解题集合

LeetCode Shell 的试题多为文本操作,195. Tenth Line、193. Valid Phone Numbers、192. Word Frequency、194. Transpose File 暂时只有 4 道题,就整合在这一起了 Shell 中文本处理的事情基本 awk sed grep sort uniq tail head 几个命令组合组合就搞定了 195. Tenth Line 大体意思 How would you print just the 10th line of a file? For example, assume that file.txt has the following content: Line 1 Line 2 Line 3 Line 4 Line 5 Line 6 Line 7 Line 8 Line 9 Line 10 Your script should output the tenth line, which is: ...

September 19, 2016 · 3 min · 574 words · Me