从七月初开始用md在github上写技术日志,每天一篇,提醒自己不能放松。
后来逐渐发现如果文件名上只有日期的话,会很不方便查阅,于是便想着将每篇日志的标题放到文件名上来,这样在没有网络的时候,我也可以随时在本地找到。
这样改的话工程量毕竟很大,于是今天试着用PHP对文件进行操作,统一更改文件名。
1 | <?php |
从七月初开始用md在github上写技术日志,每天一篇,提醒自己不能放松。
后来逐渐发现如果文件名上只有日期的话,会很不方便查阅,于是便想着将每篇日志的标题放到文件名上来,这样在没有网络的时候,我也可以随时在本地找到。
这样改的话工程量毕竟很大,于是今天试着用PHP对文件进行操作,统一更改文件名。
1 | <?php |
@keyframes
,animation
, transform
三样便可以搞定
1 | <!DOCTYPE html> |
Math.cos()
, Math.sin()
,这两个函数的参数都是弧度,所以可以用 Math.PI * 2/360
将角度转化成弧度。
1 | <!DOCTYPE html> |
这几天准备阿里巴巴的笔试,可以说已经是心力交瘁,自从阿里和蘑菇街的内推被刷掉之后,开始越来越怀疑起自己的能力来,虽然这点打击应该是微不足道的。毕竟校招在刚刚开始拉开帷幕,精彩的还在后头,内推不过,还有机会去秋招,这次秋招不过,还有明年的春招。但是明年的春招我可能等不起了,我迫不及待地需要一份工作,需要一份我向往的工作。
今天看书看到canvas部分,便用它来写了一个时钟,原理很简单,用context.arc(100, 100, 99, 0, Math.PI*2, false);
绘制圆形作为表盘,context.fillText(i, textX, textY);
绘制表盘上的数字,context.lineTo(secondsX, secondsY);
绘制秒针,时针和分针的原理与此相同。接着就是正弦和余弦函数的运用。
开代码:
1 | <!DOCTYPE html> |
通过 CSS3,我们能够创建动画,这可以在许多网页中取代动画图片、Flash 动画以及 JavaScript。
先来认识一下css3的animation
animation的简写animation: name duration timing-function delay iteration-count direction;
其次就是@keyframes
好了,接下来运用上述两个属性做一个可以旋转的齿轮
1 | <style> |
演示demo
当我们运用html元素”textarea”写一个文本输入框时,浏览器会自动生成以下样式
用鼠标拖动右下角的小三角就可以对文本框的大小进行重新设置,于是我们试着在一个div中实现与上述相似的功能
先看布局
1 | <style> |
用父元素div2代替“文本框”,用div1代替小三角,这里的定位,为后面的js实现方法打下了基础
JS的实现方法
1 | <script> |
将小三角移动的x轴和y轴长度反应到其父元素的宽高上面,便得到了这样的效果
布局并不麻烦,两个div,定宽高、背景颜色即可
演示demo
逆向思维:既然我们要检测div在运动过程中是否重合,那如果知道什么时候不重合,剩下的情况就是重合了,在这里,分析不重合的情况显然比分析重合的情况要容易
如图,当r1
1 | <script> |
position: static;
元素框正常生成,块级元素生成一个矩形框,作为文档流的一部分,行内元素则会创建一个或多个行框,置于其父元素中
position: relative;
元素框偏移某个距离,元素仍然保持位定位前的形状,它原本所占的空间仍然保留
position: absolute;
元素从文档流完全删除,相对于包含块定位,包含块可能是元素中的另一个元素或者初始包含块()。元素原先在正常文档流中所占的空间被关闭,且定位后的元素会生成一个块级框
position: fixed;
相当于包含块是视窗的position: absolute;
这里参考豆瓣克军大牛的一篇文章
1 | <style> |
1 | function getRequest() { |
有字符串在的地方就少不了正则表达式
1 | // 根据参数获取参数值 |
每个矩形都是由两条水平直线和两条竖直直线组成的,那么水平直线的取法有 32/(21) = 3,竖直线的取法有 54/(21) = 10,则矩形个数为30(不知道这里正方形算不算矩形……)
在ECMAScript有5种基本数据类型: Undefined/Null/Boolean/Number/String, 以及一种复杂数据类型Object。
1 | var str = new String("abcd"); |
例如:
1 | select * from t1 where col1 = (select col2 from t2); |
其中 select * from t1
, 称为Outer Query/Outer Statement
select col2 from t2
,称为 SubQuery
。
子查询有多个关键字或条件,如 distinct
, group by
, order by
, limit
, 函数
等
子查询的外层查询可以是 : select
, insert
, update
, set
或 do
。
语法结构 : operand comparison_operator subquery
子查询实例
求所有商品的平均价格
1 | select round(avg(goods_price), 2) from tdb_goods; |
列出所有商品价格在平均价格之上的商品
1 | select goods_id,goods_name,goods_price from tdb_goods |
用 SOME(任意一个),ANY(任意一个),ALL(所有的) 修饰比较运算符
= ANY
运算符 与IN
等效,!=ALL
或<>ALL
与NOT IN
等效;
如果子查询返回任何行,EXIST将返回TRUE,否则返回false;
在一个数据表的分类中,可能存在大量重复的数据,这时候可以奖建立两个数据表关联,提高查询效率。
实例
1 | 将查询结果写入数据表 |
多表的更新基本上与单表更新相似。
连接类型
1 | INNER JOIN(与JOIN,CROSS JOIN等价) 内连接, |
SQL语句实例
1 | create table tdb_goods_brands |
当两个表的字段名相同时,可以为两个表分别起一个别名,例如下面的g和b:
1 | update tdb_goods as g inner join tdb_goods_brands as b on g.brand_name = b.brand_name set g.brand_name = b.brand_id; |
1 | alter table tdb_goods change goods_cate cate_id smallint unsigned not null,change brand_name brand_id smallint unsigned not null; |
通常使用 ON 关键字来设定连接条件,使用WHERE关键字进行结果集记录的过滤。
内连接:显示左表及右表符合条件的记录(交集)。
SQL语句实例
1 | select goods_id,goods_name,cate_name from tdb_goods inner join tdb_goods_cates on tdb_goods.cate_id =tdb_goods_cates.cate_id; |
1 | select goods_id,goods_name,cate_name from tdb_goods left join tdb_goods_cates on tdb_goods.cate_id = tdb_goods_cates.cate_id; |
1 | select goods_id,goods_name,cate_name from tdb_goods right join tdb_goods_cates on tdb_goods.cate_id =tdb_goods_cates.cate_id; |
1 | select goods_id,goods_name,cate_name,brand_name,goods_price from tdb_goods as g |
1 | <style> |
1 | <body> |
return false
来解决掉很多浏览器默认事件,在这里就有一个很好的应用setCapture()
,IE中,假设id为div1一个元素设置了setCapture(),然后再绑定事件,比如一个点击事件,接下来,无论你点击哪里,被触发的都是div1元素的点击事件了,甚至你点击浏览器的地址栏,工具栏,都会触发div1的点击事件()。此时你的ie浏览器会像中毒一样,点击关闭按钮都是在触发div1的点击事件(),其他元素不管在div之上还是之下的,他们绑定的点击事件全部失效。setCapture
和releaseCapture
,当鼠标的div1上按下时,为div1 setCapture,这时所有的事件都集中到了div1身上,捕获所有事件,再也不会去选中其他的元素了,在鼠标抬起后,运用releaseCapture,不再捕获。1 | <!DOCTYPE html> |
1 | * 文件的字节数 |
根分区
swap分区(交换分区,内存2倍,不超过2GB)
推荐分区/boot (启动分区 200MB)
设置Linux的IP地址 ifconfig eth0 192.168.233.2
4.1.1 命令格式与目录处理命令ls
ls -a 可以看到隐藏文件(带有.)
ls -l 长格式显示
ls -lh 长格式人性化显示(自动转换文件大小的单位)
ls -ld /etc 查看指定目录的详细信息
ls-i 查看 inode 节点
文件类型: -普通文件 d目录 l软链接
r所属人 g所属组 o其他人
文件权限 r读 w写 x执行
4.1.2 目录处理命令
mkdir 创建目录
mkdir /tmp/zhongshan 可以同时创建多个目录
mkdir -p /tmp/zhongshan/liu 当/zhongshan 目录不存在的时候创建 /liu 目录
cd 目录名 change directory切换目录
cd .. 返回上一级目录
pwd print working directory 显示当前工作目录
rmdir remove empty directory 删除空目录
cp -rp [原文件或目录][目标目录] 复制过程中可以改文件名
-r 复制目录
-p 保留文件属性(修改时间等)
mv [原文件或目录][目标目录] 剪切文件、改名,move
rm -rf [文件或目录]
-r 删除目录
-f 强行执行( false )
ctrl+c 终止命令 , ctrl+l 清屏
4.1.3 文件处理命令
touch [文件名] 创建文件 文件名允许使用大多数字符,除了'/'
cat 显示文件内容
cat -n 显示行号
tac 文件倒着显示
more 显示长文件,使用空格或f翻页,(enter)换行,q退出
less 与more类似,显示长文件。按(page up)可向前翻页,按(^)可向上翻行。'/'+关键词可以搜索关键词,此时可以按'n'查找下一个高亮显示
head/tail -n 20 /etc/services 查看文件的前(后)20行,如果不指定行数,默认显示前10行
tail -f [文件名] 动态显示文件末尾的内容, ctrl+c 终止命令
4.1.4 链接命令
ln -s [原文件][目标文件] 创建软链接,软链接特征类似于Windows的快捷方式,它的权限不影响原文件的权限,软链接可以跨分区,可以针对目录使用
ln [原文件][目标文件] 创建硬链接,硬链接不能跨分区,两个文件可以同步更新,且他们的i节点相同,不可以针对目录使用
4.2.1 权限管理命令
chmod (change the permissions mode of file)
chmod [{ugoa}{+-=}{rwx}][文件名]
[421][文件名]
-R 递归修改,更改其子目录的权限
-------------------权限有继承关系----------------------------------------------
directory r:ls
w: touch/mkdir/rmdir/rm
x: cd (一般r和x 成对出现)
4.2.2 其他权限管理命令
chown (change file ownership)更改文件的所有者(只有root 可以改)
chgrp (change file group ownership) 更改文件的所属组(只有root 可以改)
umask -S 查看新建文件默认的权限(任何新建的文件都不具备x可执行)
umask 023 可以更改当前新建文件的默认权限
4.3.1 文件搜索命令
find [搜索范围][匹配条件]
find /etc -name init 在/etc 目录下查找文件init,精准的搜索
find /etc -name *init* 在/etc 目录下查找包含init的文件,模糊的搜索
find /etc -name init??? 匹配以 init 开头,后面有3个字符的文件
(ctrl+q解决secureCRT 假死问题)
find /etc -iname init??? 忽略文件名大小写
find / -size +n 搜索文件大小大于n 的文件(一个数据块是0.5kb)
find /home -user zhongshan 查找所有者为 zhongshan 的文件
find /home -group brothers 查找所属组为 brothers的文件
find /etc -cmin -(+)5 在/etc 在查找5分钟内(外)被修改过属性的文件和目录
-amin 访问时间access
-mmin 文件内容modify
-o --->or -a ---->and
find /etc -size +163840 -a -size -204800 (and)查找大于80M小于100M的文件
-o or或
-type根据文件类型查找 f文件 d目录 l软链接文件
find /etc -name inittab -exec ls -l {} \; 在/etc 下查找inittab文件并显示其详细信息
find /etc -name inittab -ok ls -l {} \; 在/etc 下查找inittab文件并显示其详细信息询问确认
find . -inum 130715 -exec rm {} \; 在当前目录下根据 i 节点找到文件并删除
4.4 帮助命令-帮助命令
man 原义为manual
man ls 查看ls命令的帮助信息
man services 查看配置文件的帮助信息
1 命令的帮助, 5 配置文件的帮助
man 5 passwd 查看passwd 配置文件的帮助
whatis ls 得到ls 命令的一个简短的信息
apropos services 查看配置文件的简短信息
touch --help 查看命令的选项
date 070222552015.00 更改系统时间
info 与man相似
help umask shell内置命令的详细信息(找不到命令所在位置的命令)
4.5 文件搜索命令-用户管理命令
useradd 用户名 添加用户(用户名不要太复杂)
passwd 用户名 修改用户名密码
who 查看在线登陆用户信息,tty为本地登陆,pts表示远程终端
w 得到更为详细的登陆信息
uptime 查看系统使用情况
4.6 文件搜索命令-压缩解压命令
压缩格式:.gz .zip(windows和linux兼容)
gzip 文件名 压缩文件,只能压缩文件,不可压缩目录,不保留原文件
gunzip 文件名 解压文件
tar -cvf Japan.tar Japan 将Japan目录打包成Japan.tar文件
tar -zcf Japan.tar.gz Japan 打包压缩一步完成
tar -zx(v)f Japan.tar.gz 解压命令
zip Japan.zip Japan 将Japan 压缩成Japan.zip
unzip Japan.zip 解压文件
bzip2 -k boduo 压缩文件且保留原文件
tar -cjf Japan.tar.bz2 Japan 打包压缩一步完成
tar -xjf Japan.tz2 解压缩
4.7 网络命令
write 用户名 给在线用户发信息 ctrl+D 保存结束
wall 给所有在线用户发信息
ping 选项 IP地址 -c指定发送次数 packet loss(丢包率)
ifconfig 查看当前网卡状态
mail [用户名] 查看发送电子邮件
mail 查看邮件, 序列号查看邮件内容, h查看列表, d+序列号删除邮件,q退出邮件系统
last 统计计算机所有的登录用户以及重启记录
lastlog 查看某特定用户上次登录的时间
lastlog -u 520 查看用户id为502的上次登录时间
traceroute www.lampbrother.com 显示数据包到主机的路径
netstat [选项] 显示网络相关信息
-t TCP协议
-u UDP协议
-l 监听
-r 路由
-n 显示IP地址和端口号
netstat -tlun 查询当前本机监听的端口
netstat -an 查询本机所有的网络连接
netstat -rn 查询本机路由表
setup 配置网络(永久生效)
service network restart 重启网络服务
mount -t iso9660 /dev/sr0 /mnt/cdrom/ 挂载光盘
umount /dev/sr0 卸载光盘
4.8 关机重启命令
shutdown -h now 现在关机
shutdown -r now 现在
shutdown -c 取消前一个关机命令
reboot 重 启
init 6 重启
runlevel 查询当前运行级别
logout 退出登录
5.1 Vim常用操作
vi filename 进入
按下ESC 进入命令模式
进入命令模式后
a 在光标所在字符后插入
A 在光标所在行行尾插入
i 在光标所在字符前插入
I 在光标所在行行首插入
o 在光标下插入新行
O 在光标上插入新行
:set nu 设置行号
:set nonu 取消行号
gg 到第一行
G 到最后一行
nG 到第n行
:n 到第n行
$ 移至行尾
0 移至行首
x 删除光标所在处的字符
n 删除光标所在处n个字符
dd 删除光标所在行, ndd删除n行
dG 删除光标所在行到文件末尾内容
D 删除光标所在处到文件末尾的内容
:n1,n2d 删除光标所在范围内行
yy 复制当前行
nyy 复制当前行以下n行
dd 剪切当前行
ndd 剪切当前行以下n行
p/P 粘贴在当前光标所在行下或行上
u 取消上一步操作
r 取代光标所在处字符
R 从光标所在处开始替换字符,按ESC结束
set ic 不区分大小写
set noic 不区分大小写
/string 指定搜索字符串
n 搜索指定字符串的下一个位置
:%s/old/new/g 全文搜索替换指定字符串
:%s/old/new/g 全文搜索替换指定字符串(询问确认)
:n1,n2s/old/new/g 在一定范围内搜索替换指定字符串
:w 保存修改
:w new_filename 另存为指定文件
:wq 保存退出
ZZ 快捷键,保存修改并退出
:q! 不保存修改退出
:wq! 保存修改并退出(文件所有者以及root可使用)
5.2 Vim使用技巧
:r 文件名 导入文件的内容
:r !命令 导入命令执行结果
定义快捷键
map 快捷键 触发命令
:map ^p(ctrl+v+p) I#<ESC> ctrl+p 设置快捷键跳到行首添加#
:map ^B 0x 跳到行首删除第一个字符
连续行注释
:n1,n2s/^/#/g
:n1,n2s/^#//g 去掉行首的#
:n1,n2s/^/\/\//g 替换时转义
:ab zhongshan zhongshanshanshanshan
/home/username/.vimrc 配置相关快捷键(永久生效)
6.1 软件包管理
软件包分类:源码包(脚本安装包)和二进制包(RPM包、系统默认包)