forecho 的独立博客

把生命浪费在美好的事物上

Git 初使用

2013年10月11日

  • Mac 安装 Git,软件下载地址:https://git-scm.com/book/en/v2/Getting-Started-Installing-Git

  • 第一个要配置的是你个人的用户名称和电子邮件地址。这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录:

1
2
$ git config --global user.name "forecho"
$ git config --global user.email caizhenghai@gmail.com
  • 建立 SSH key 可以让你在你的电脑和 Git @ OSC 之间建立安全的加密连接。
1
$ ssh-keygen -t rsa -C "caizhenghai@gmail.com"
1
$ cat ~/.ssh/id_rsa.pub
  • Clone 项目
1
$ git clone https://github.com/iiYii/getyii.git
  • 复制文件到这个目录下,然后跟踪新的文件:
1
2
3
$ git add .    # 跟踪所有改动过的文件
$ git add -u    # 只加修改过的文件, 新增的文件不加入.
$ git add -i     # 进入互动模式
  • 提交变更:
1
2
$ git commit -m "xxxx"
$ git commit -a -m 'xxxx'

commit和commit -a的区别: commit -a相当于: 第一步:自动地add所有改动的代码,使得所有的开发代码都列于index file中 第二步:自动地删除那些在index file中但不在工作树中的文件 第三步:执行commit命令来提交 ​

  • 推送到服务器上:
1
$ git push
  • 恢复单个文件
1
$ git checkout -- hello.rb

远程服务器覆盖当前的改动:

1
$ git checkout -f
  • 添加被忽略的文件以及文件夹
1
$ git add -f 文件路径
  • 服务器更新本地
1
$ git pull
  • git如何查看某一个文件的详细提交记录
1
$ git log -p filename
  • 配置常用别名
1
2
3
4
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
  • 使用 vim 作为默认编辑器
1
git config --global core.editor "vim"
  • 忽略 new mode old mode 修改
1
git config core.filemode false

整理一下我经历的PHP面试题

2013年10月08日

1、用css、html编写一个两列布局的网页,右侧固定宽度200px,左侧自适应。(答案如下,IE下没测试,Chrome下正常)

<!DOCTYPE html>
<html>
<head>
	<meta http-equiv="content-type" content="text/html; charset=utf-8" />
	<title></title>
</head>
<style type="text/css">
div{
	height: 200px;
}
#left{
	float: left;
	width: 100%;
	margin-left: -210px;
}
#content{
	margin-left: 210px;
	border: 1px solid #ccc;
}
#right{
	float: right;
	width: 200px;
	border: 1px solid #ccc;
}

</style>
<body>
<div id="left">
	<div id="content">
		我在左边 可以自动适应
	</div>
</div>

<div id="right">
	我在右边 固定宽度200px
</div>

</body>
</html>

2、简单描述mysql中,索引,主键,唯一索引,联合索引的区别,对数据库的性能有什么影响(从读写两方面)

索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。 普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。普通索引允许被索引的数据列包含重复的值。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。也就是说,唯一索引可以保证数据记录的唯一性。 主键,是一种特殊的唯一索引,在一张表中只能定义一个主键索引,主键用于唯一标识一条记录,使用关键字PRIMARYKEY来创建。 索引可以覆盖多个数据列,如像INDEX(columnA,columnB)索引,这就是联合索引。索引可以极大的提高数据的查询速度,但是会降低插入、删除、更新表的速度,因为在执行这些写操作时,还要操作索引文件。

3、JS 表单弹出对话框函数是 ?获得输入焦点函数是 ?

弹出对话框函数:alert(), prompt(), confirm() 获得输入焦点函数: focus()

4、JS 的转向函数是?怎么引入一个外部 JS 文件?

转向使用 window.location.href=”” 引入外部 js 使用

5、include 和 require 都能把另外一个文件包含到当前文件中 ,他们有什么区别? Include 和 include_once 又有什么区别?

二者区别只有一个,那就是对包含文件的需求程度, include就是包含,如果被包含的 文件不存在的话,那么则会提示一个错误,但是程序会继续执行下去。而 require 意思是需要,如果被包含文件不存在或者无法打开的时候,则会提示错误, 并且会终止程序的执行。这两种结构除了在如何处理失败之外完全一样 。once 的意思是一次,那么 include_once 和 require_once 表示只包含一次,避免重复包含。

6、echo(),print(),print_r()的区别?

echo 是一个语言结构,输出一个或多个字符串; print() 实际上不是一个函数(它是一个语言结构),因此你可以不必使用圆括号来括起 它的参数列表 ,它输出一个字符串 ; print_r () 是一个函数,打印变量的信息,基本类型,数组,对象。

7、用 PHP 打印出前一天的时间格式是 2006-5-10 22:21:21。

<?php echo date("Y-m-d H:i:s", time()-3600*24); ?>
<?php echo date("Y-m-d H:i:s", strtotime("-1 days")); ?>

8、求两个日期的差数,例如 2009-3-1 ~ 2009-4-4 的日期差数?

<?php echo (strtotime("2009-4-4")-strtotime("2009-3-1"))/3600*24;?>

9、用 PHP 写出显示客户端 IP 与服务器 IP 的代码。

客户端 IP:$_SERVER[“REMOTE_ADDR”] 服务器端 IP:$_SERVER[“SERVER_ADDR”]

10、sql 语句应该考虑哪些安全性?

防止 Sql 注入,对特殊字符进行转义、过滤或者使用预编译的 sql 语句绑定变量。 最小权限原则,特别是不要用 root 账户,为不同的类型的动作或者组建使用不同的账户。当 sql 运行出错时,不要把数据库返回的错误信息全部显示给用户 ,以防止泄露服务器和数据库相关信息。

11、MYSQL 取得当前时间的函数是?,格式化日期的函数是?

current_time() 用于取得当前时间 date_format(datetime, format)用于格式化日期,如:select date_format(now(),’%Y%m%d’);

12、请简述项目中优化 sql 语句执行效率的方法,从哪些方面,sql 语句性能如何分析?

1) 尽量选择较小的列 2) 将where中用的比较频繁的字段建立索引 3) select子句中避免使用‘*’ 4) 避免在索引列上使用计算 、not in 和<>等操作 5) 当只需要一行数据的时候使用 limit 1 6) 保证单表数据不超过 200W,适时分割表。 针对查询较慢的语句,可以使用explain 来分析该语句具体的执行情况。

13、简述在 MySQL 数据库中 MyISAM 和 InnoDB 的区别?

区别主要有以下几个: 构成上,MyISAM 的表在磁盘中有三个文件组成,分别是表定义文件( .frm)、数据文 件(.MYD)、索引文件(.MYI),而 InnoDB 的表由表定义文件(.frm)、表空间数据和日志文 件组成。 安全方面, MyISAM 强调的是性能,其 查询 效率较高,但不支持事务和外键等安全性 方面的功能,而 InnoDB 支持事务和外键等高级功能 ,查询效率稍低。 对锁的支持,MyISAM 支持表锁,而 InnoDB 支持行锁。

读《打造Facebook》

2013年10月07日

这本书应该是我从云南回来的时候开始看的,也是我花的最短时间看完的一本书。用Kindle看完的,废话说完了,下面进入主题。

作者是曾经的Facebook的中国工程师,他加入Facebook那会儿,Facebook

300人都不到。那么这本书就是从他的视角带着我们去了解Facebook的一些内部情况。之前就很想读《Facebook效应》,但是被搁置了,所以这本书是我读的第一本关于Facebook的书。

Facebook的CEO - 马克 扎克伯格一直把Google当作自己的偶像。所以跟Google一样,Facebook也是一家以工程师为驱动的公司,在公司里面工程师同样会有很大的话语权,同样会有很高的薪水。Google有「20%时间做自己感兴趣的项目」的企业文化,那么Facebook的企业文化就是「黑客文化」,并且每年的F8大会之后都会有编程马拉松。

Facebook的招人要求很高,他们只招一流的人才。跟乔布斯是一样的,只有跟一流的人才做事你才会打造出一流的事情。并且Facebook非常的注重寻找人才这块业务,如果一个一流的人才没有到你的公司来上班,他很有可能就回去你的竞争对手公司上班去了。

通过Facebook的面试之后会有6周的「新兵训练营」,主要是让你去了解公司的一些情况,在这期间你还要是找到自己感兴趣的小组,选择自己的职位。如果你上班满一年之后感觉自己的岗位以及自己做的事很无聊,没有挑战的时候,你还可以参与公司的「Hack-A-Month计划」,说白了就是换组工作,只不过你首先要先去别的小组试工作一个月,一个月之后,双方小组满意之后,可以申请换组,这个计划的前提是你的技术足够牛。

在Facebook上班你需要有跟公司同样的价值观,大家都是为了Facebook整体着想,不能只为自己的小组着想。大家的劲都往一处使,想想在这样一个公司上班,是多么幸福的一件事。在Facebook绝大多数关于公司的情况都是透明的,因为扎克伯格希望大家都知道自己做事的一些情况,在一个什么样的公司以及公司每天的一些变化,同时有个规定就是这些内部的消息必须不能向外部泄露出去。

在Facebook有个很重要的观点是:不要去追求完美。不要想着一次去把事情做完美,完成比追求完美更重要。当然这个前提就是你这个完成之后的产品也不能太差了。iPhone追求完美是因为它是硬件产品,更新换代很不方便,但每一代iPhone都不是最完美的,不然怎么会有新一代的iPhone呢?但是作为web开发的Facebook就不同了,web开发有个很大的优势,就是产品在服务端,产品升级换代非常的方便,所以刚开始做产品的时候不需要去追求完美,我们做完一个版本然后做大量的数据分析、数据调查。根据反馈设计新的功能。

Facebook的更新都是灰度发布的,可以设定属性,根据熟悉更新部分,然后根据反馈可以快速的应变。

Comments

Rui Chopper: 以工程师 为驱动的公司,在国内很少见,几乎没有。。。哎

ForEcho: 其实是有的,只不过可能是小公司,名气没那么大。可能氛围也不会有Facebook和Google的那么好。

这次旅行的收获

2013年10月07日

龙哥说的好:「出来的玩的,要么是失恋的,要么是失业的,要么就是跟风」,我怎么感觉我三个都沾点边呢? 这次出来玩,给出了很多第一次:

  • 第一次逃票,有点刺激,但是后来发觉一点都不好玩。
  • 第一次搭车,搭车倒是穷游的好办法,你想想我坐车从大理去泸沽湖一趟就80呢,来回搭车我能省好多钱。并且搭车是一个很好的体验,你永远不知道谁会搭你,然后你们将会发生什么样的故事。感觉挺好玩的。
  • 第一次住青旅,青旅大部分都是上下铺床位房,比较便宜,大家都是出来玩的,然后在里面住能遇到很多小伙伴,如果你们的线路一致,很容易的就能组队结伴。有的青旅男女混住有的是分开住。最吸引我的是青旅文化,大家一起玩,在院子里面聊天。彼此分享着自己的故事。发现住青旅的大家很容易就能搭讪上,很简单的一句「hello」,然后你们就可以聊上了。

第二站:云南

2013年09月26日

我的线路是:深圳->昆明->大理->双廊->大理->丽江->泸沽湖->丽江->昆明->深圳(本来计划要去香格里拉的,但由于时间问题,没去成,留给下次再去吧。)

 一、到昆明

一切都来得及,就怕你不做

2013年09月04日

最近一直在忙着技术方面的事,文章都是一些技术问题。看在今天是我步入23岁第一天的日子上,我决定写一篇最近的总结。

最近两个月游戏基本上都没玩了,一心想着学多点技术,有时候看看Ruby、Python、Go、iOS开发以及mongoDB。不满足现在的PHP技术,一心渴望学到更多,但是刚开始去学一门技术真的是很难的,正所谓万事开头难,但是我觉得只要坚持下来了,过一阵子你一定会有收获的,至于这个时间是多长,收获有多少那完全看你努力的程度了。有时候你需要问问自己:「我真的努力了吗?」

这个就像我刚开始学Yii框架的时候,最开始头都摸不着,但是还是坚持下来了,看视频教程,写代码,然后用Yii开发项目,还好公司的项目是用Yii开发的,这样学起来更快,但是虽然称不上是高手,但是基本问题都能自己解决了。解决问题的方式也是一门学问,我现在一般都是用Google搜索资料,如果没有找到资料的话,我就把问题的关键词换成英文的,这个时候你会发现,另一扇大门向你敞开了,你唯一要做的就是把英语学好,能看懂别人用英文写的解决方法,目前我英语水平只是一般般,我准备通过自己翻译一本Yii英文教材来提升自己的英文水平,也顺便再巩固一下Yii。

有时候Ruby文档看烦了换着看Python文档,有时候去看Go文档,有时候去看看一些其他非编程类的书。Kindle买的确实很划算,有时候出门我都愿意背着Kindle,哪怕我只是看了半个小时的书,我都觉得值了。今年唯一一本用Kindle看完的书是《把时间当作朋友》,和我看的《拆掉思维里的墙》一样,都是教你如何管理自己以及如何开启心智的书。很不错的一本书,这本书其实的宗旨就是『所有学习上的成功,都只靠两件事:策略和坚持,而坚持本身就应该是最重要的策略之一』。难以坚持下去的事情,基本都是因为没有迫切的欲望和激情。最近我连周末睡懒觉的习惯都改了,觉得睡懒觉真是太浪费时间了,但是中午小睡半个小时还是值得的。《暗时间》看了大概60%了。最近越来越喜欢独立思考了,很喜欢独立思考的乐趣,我要争取做一个特立独行的人。最近看的《我给你讲过笑话,你可别哭》就是独立思考出来的文章,觉得有独立思考能力很有意思。

《暗时间》也是一本很有意思的书,并且是一个同行写的,交我们如何去管理自己的时间,还有一个专门的群组,氛围非常的好。上面的一篇文章《为什么你应该(从现在开始就)写博客》真的让人很受用。不应该觉得没人看你的博客就不写博客了,不为别人之为自己写博客,不要觉得文笔差了就不写,好的文笔都是慢慢写出来了,写的多了,文笔就好了。『人生中天大的真谛,都不敌一句「我乐意」来得实在,因为你是为自己真实地活着,你为自己设定的价值才是人生最大的真谛。』

发现最近越来越喜欢电影这个东西了,每周末我都会找时间去看几部电影,感觉非常的享受。并且这段时间一直在想办法提示自己的能力,为了以后能赚到更多的钱,去享受物质带来的美好生活,我现在必须很努力,而这个努力不应该只是说说而已。

记得有次面试,面试官问我「你有着什么梦想?你为了实现这个梦想做了什么计划?」。其实第一个问题,我以前早就考虑过了,我的梦想就是在26岁的时候要做一款百万个用户的产品并且成为一个架构师。但是第二个问题让我愣了一下,然后就敷衍过去了。事后我才发觉,我一直只是把自己的梦想挂嘴边,但是从来没有考虑过要去实现这个梦想要去付出怎样的代价,甚至都不清楚,实现这个梦想我要去做些什么?一直想着时间还早,但是现在我已经23年了,离梦想只有3年了,我却连实现这个梦想需要做些什么都不知道,太可笑了。

幸运的是我领悟得不算晚,我现在努力还来得及。就怕你不做。

感谢那些瞧不起我的人,是他们让我有了很大的动力。

个人有个缺点,喜欢逛空间,喜欢刷微博,知乎,V2EX。这可能都是在武汉上班太安逸了留下不好的习惯。以后一定要把握这个时间,尽量去减少这个不必要时间,正确的时间做正确的事。最近心情比较沉闷,好久没出去玩了,打算去云南旅游去,换一下心情。

最近一直在用Linux和Mac系统,感觉离开Windows

少了很多的烦恼。Mac还是最好的系统。

这篇文章我写的比较乱,是想到什么就写什么的,你可以简单的理解为意识流风格。

Comments

zaker: 写的蛮好的啊

ForEcho: 多谢赏识。话说你这个名字叫zaker是什么意思?这个App确实还不错。

zaker: 恩恩之前比较喜欢这个APP,zaker这个名字还蛮有意思的,所以就取了这个名字,话说在武汉毕业的?

zaker: 武汉交通职业学院的啊,我们学校在你们学校附近好像

ForEcho: 是的啊,你们学校叫什么?

zaker: 华师,现在在哪里工作啊?

ForEcho: 话说华师不是在广埠屯吗?我们学校在黄家湖大学城。我今年来的深圳。

zaker: 哦哦我记错了,在哪里工作啊?招人不啊?

ForEcho: 你也是PHPer?这边工作还是比武汉多的。

zaker: 之前做java现在在做php,新手~~~~

乔巴瑞: “难以坚持下去的事情,基本都是因为没有迫切的欲望和激情”我很喜欢这句话,看了这篇文字,感觉受益匪浅啊,真心该好好思考最近的生活状态了。。。

ForEcho: 就应该每过一段时间给自己打一针「精神鸦片」。

Mac强大的Homebrew - No Module Named PyQt4报错

2013年09月01日

安装了这个东西之后可以帮助你非常的省事的安装其他应用程序。官网链接。 其实还有一个MacPorts,跟这个Homebrew类似的功能,但是我更喜欢Homebrew的简洁。(这两个貌似不兼容,最好不要同时安装。) 一条brew install pyqt命令就可以安装完PyQt4的插件了。我就是用brew install mongondb安装的mongonDB。 这样安装完PyQt之后然后简单写了第一个程序,代码如下:

import sys
from PyQt4 import QtGui

app = QtGui.QApplication(sys.argv)

widget = QtGui.QWidget()
widget.resize(250, 150)
widget.setWindowTitle('simple')
widget.show()

sys.exit(app.exec_())

运行的时候报错:No module named PyQt4 但是明明我已经安装好了,通过搜索发现是PATH路径的问题。 解决方法是:vim .bash_profile 打开这个文件,然后添加下面代码:

export PATH=/usr/local/bin:$PATH
export PATH=/usr/local/share/python:$PATH

OK,再运行前面的程序,正常弹出一个窗口,说明你成功了。 如果不确定自己的Python路径,可以用type python命令查看。   参考链接: https://github.com/mxcl/homebrew/issues/6176  https://github.com/mxcl/homebrew/issues/10324

PyCharm的SyntaxError:invalid Syntax错误处理

2013年08月30日

首先我这个代码是没有问题的,直接用终端python xxx.py运行是没有问题的。 但是我下载最先版本的PyCharm,然后导入项目,用它自带的Run运行后就报错SyntaxError:invalid syntax 然后我就去搜索,后来发现是Python版本的问题。我的Linux下有两个版本的Python,一个是2.7版的一个是3.3版本的。安装PyCharm的时候调用的是3.3版本的。 Python2.7打印格式是:

print 'a' #中间有空格
print ('a') #也支持这种方式

Python3不支持这种方式打印,只支持:

print('a') #必须有括号

因为print在python3中已经是一个函数而不是一条命令了 问题找到了,现在我们需要改PyCharm调用的Python版本,打开 File -> Settings -> Python In­ter­cepter -> Python In­ter­cepters ,然后在右侧点+添加你需要的版本即可。 现在重新运行程序,OK,正确打印,问题解决。

Comments

baocaixiong: 此文略无意义…

Code School 学习 Objective-C第一课笔记

2013年08月30日

学习地址是:http://tryobjectivec.codeschool.com/ 感觉非常有趣的体验,并且还能学习一下英文,英文单词都是比较简单的,我基本上都能看懂。 下面记录一下第一节课的笔记:

  • 申明数据类型都有NS字母开头。
  • 变量名称都有*符号开头。
  • 变量的值都有@符号开头。
  • 申明一个数组之后不能直接追加值。如果需要改变这个数组,需要重新赋值,可以参照12行代码。
  • 申明数组类型用[]符号,但是申明一个字典类型用的是{}符号。

Navicat for MySQL 11 Linux 破解方法

2013年08月28日

安装:解压后即可用。目录下的start_navicat文件为可执行文件。 破解:(找过好几个注册码都不能用,注册码生成器都是Windows平台的,Linux下不行) -—第一次执行start_navicat时,会在用户主目录下生成一个名为.navicat的隐藏文件夹。 -—把此文件夹删除后(删除文件夹命令是rm -rf .navicat),下次启动navicat 会重新生成此文件夹,30天试用期会按新的时间开始计算。