找到第一份实习工作,正在努力中。。。
创业公司,做棋牌游戏,应聘前知道要用c++,从图书馆借了两本书。看了一下,基本还是语法和注意问题:书名《你必须知道的222个C++语言问题》《C++应用程序性能优化》。感觉《C++应用程序性能优化》这本书讲的要好很多。面试时,没问技术问题,看我对计算机比较感兴趣,就留下了。
开始主要将官方主页重写了。用的php,框架是别人拼凑的我用他的代码完成工作,有时候放不开手脚,不敢改。一是自己不保证改了这里,对先前写好的代码没有影响。二是嫌太麻烦。我想还不如我重写,或换个框架。
学到的东西还是很多的,以前生活中的小事(比如随手的帮助),脑子中有却不行动。现在受韩哥(在学校时是学生会的)影响这些事也敢做了。只是自己自由学习的时间比较少了,博客更新也出不来,很多事我一放下基本就拿不起来了。
今晚有点累,小小总结一下,顺便想在关于那,写写自己的计算机史。假期里接了一个小活,时间又不多了,虽然其中也有小偷懒。
Read more...
javascript提示是否删除
非常简单实用的方法,收藏了。这几天写的东西没用jquery,但是有些功能还是想从简,比如这个提示是否删除。最简单的方法还是只是弹个提示框,于是找到这个方法。
JavaScript弹出确认消息框判断是否删除,删除前提示用户是否删除,点是删除,点否返回。
Read more...
删除
用法:onClick="return confirm('是否删除此条记录?')"
onClick在点击时(这里是指点击这条超链接)触发,confirm会返回“是”(true)或者“否”(false),返回“否”就不产生跳转。
原来这个js中return可以控制超链接是否跳转啊,神奇,嘿嘿,忒神奇了~
golang中strings包学习第二篇
func Join(a []string, sep string) string
,连接字符串,以sep作为分隔符
例子:
s := []string{"foo", "bar", "baz"}
fmt.Println(strings.Join(s, ", "))
输出:
foo, bar, baz
,源代码分析
1.判断a的长度,0时,返回空字符串,长度为1时,返回a[0].
2.否则,在变量n中保存将要生产字符串的长度。计算方法len(a)-1个sep的长度 + 数组a中字符串长度和。
3.创建一个长度为n的byte数组。将数据复制到数组中,copy()将返回复制元素的个数,用bp来记录复制的位置。最后转成string返回。
func Split(s, sep string) []string
,分割字符串,sep为空字串时,与上一篇讲到的一样,相当于每个字符之间的间隔。s中没有sep,返回值里只有一个元素s。
例子:
fmt.Printf("%q\n", strings.Split("a,b,c", ","))
fmt.Printf("%q\n", strings.Split("a man a plan a canal panama", "a "))
fmt.Printf("%q\n", strings.Split(" xyz ", ""))
fmt.Printf("%q\n", strings.Split("", "Bernardo O'Higgins"))
输出:
["a" "b" "c"]
["" "man " "plan " "canal panama"]
[" " "x" "y" "z" " "]
[""]
,源代码return genSplit(s, sep, 0, -1)
看看func genSplit(s, sep string, sepSave, n int) []string。
func genSplit(s, sep string, sepSave, n int) []string
,有几个函数都用到这个函数,通用分割字符串的函数。
n 是返回分割的个数,-1时,返回所有。
sepSave是被分割的位置在sep所在位置的偏移,被用于SplitAfter和SplitAfterN这些函数,使用len(sep)作为sepsave可以返回sep最后一个字符前面的字串作为一个分割。
1.n为0时,返回nil。
2.sep为空字串,return explode(s, n),
3.当n<0时,应该返回所有,n为Count(s, sep) + 1,表示长度。
4.定义几个变量,c是用于比较是否和sep相等,都是先比较第一个字符。相等再看字符串长度为一,则找到;不为一,比较整个sep。a是被返回的数组,na是在数组中存储的位置。
东西零碎 utf8包的内容,写下来的目的是使自己是真正的明白,而不是一看知道是这么回事,但是不想为什么要这样写。现在感觉自己用来学习的时间很少,珍惜一下。
golang中strings包学习
打算把golang的常用包都看一遍,分析一下包的代码,觉得从中会学到golang的编程方法^_^。
Read more...
func Index(s, sep string) int
返回s中第一次出现sep的位置,如果没有返回-1.
例子:
代码:
fmt.Println(strings.Index("chicken", "ken"))
fmt.Println(strings.Index("chicken", "dmr"))
输出:
4
-1
看源码中index的实现方法,
1.取得sep的长度。如果长度为零,返回0。否则取sep第一个字符。
2.如果长度为1,for循环比较s[i]和sep[0],相等,返回i。都不相等,返回-1。
3.如果长度大于1,for循环比较(先比较s[i]和sep[0],不相等就i++,再比较s[i:i+n] == sep。)成立返回i,否则返回-1。比较的上限是i+n。
相关函数:
func Contains(s, substr string) bool
如果substr在s中,返回true。
代码:
fmt.Println(strings.Contains("seafood", "foo"))
fmt.Println(strings.Contains("seafood", "bar"))
fmt.Println(strings.Contains("seafood", ""))
fmt.Println(strings.Contains("", ""))
输出:
true
false
true
true
源代码中用index函数实现,return Index(s, substr) >= 0。
func LastIndex(s, sep string) int
,返回在s中最后一次出现sep的位置,不存在返回-1。
例子就过了,源代码分析,与index()相似,但是判断的时候是从s的后边向前判断。
func Count(s, sep string) int
,统计sep在s中出现的次数,非重叠的,比如s=“eeee”,sep="ee",结果返回2.
例子:
fmt.Println(strings.Count("cheese", "e"))
fmt.Println(strings.Count("five", "")) // before & after each rune
结果:
3
5
,我对第二个例子不理解,在群里问了一番,开始回答的我没明白。后来第二个给我回答我才明白:这里“”字符串指的就是字符串中每个字符之间的空字符串T_T,函数返回了s中有几个这样的空字符串。后面的英文注释直接看不懂T_T,悲催。现在看应该是每个字符的前面加后面。。。
源代码中“”时,返回utf8.RuneCountInString(s) + 1,这里不用len,我测试了一下对于一个中文len返回的长度是3,这里不符,所以用utf8.RuneCountInString。utf8.RuneCountInString是使用range来遍历的字符串,与len计数不同,一个中文长度为1。
但是在接下来遍历s和sep都是用的len(),也就是说比如
fmt.Println(strings.Count("我的我的", "\x88"))你会得到结果2,这是因为
”我的“会被\xe6\x88\x91\xe7\x9a\x84遍历,你将从中找到\x88。
fmt.Println(strings.Count("five", ""))
然后还是分两种情况,len(sep)=1和大于1两种情况。
bootstrap和1kbgrid结合使用
真心不懂css,以前写点小东西,不是扒就是用的bootstrap。现在要我自己写一个支持ie6的界面,有点慌。
bootstrap是只支持ie7+,虽然有写ie6的hack,可能是我用的不好,效果不喜欢。
自己大体测试了一下,ie6不支持bootstrap中的布局方面和组件那些导航什么的。
http://twitter.github.com/bootstrap
现在bootstrap网站提供自己制定功能,可以选择自己使用的css功能,我只用了Base CSS和Alerts,再有需要就重新添加导出一份。网站布局的设定我就找了一个1kbgrid,http://www.1kbgrid.com/。很方便,很小。配合使用写了三个页面感觉很不错。
css设计也是一门艺术,但是第一次学时可能教材不好,安不下心来感觉很乱。以后就不再想学了。
Read more...
golang的Panic和Recover
在看《build web application with golang》地址:https://github.com/astaxie/build-web-application-with-golang
看到Panic和Recover这一节,对Panic和Recover有了了解。
Go没有例如像Java那样的异常机制:不能抛出一个异常。作为代替,它使用了panic和recover机制。一定要记得,这应当作为最后的手段被使用,你的代码中应当没有,或者很少的令人恐慌的东西。这是个强大的工具,明智的使用它。那么,应该如何使用它。
Panic
Read more...
是一个内建函数,可以中断原有的控制流程,进入一个令人恐慌的流程中。当函数F调用panic,函数F的执行被中断,但是F中的延迟函数会正常执 行,然后F返回到调用它的地方。在调用的地方,F的行为就像调用了panic。这一过程继续向上,直到发生panic的goroutine中所有调用的函 数返回,此时程序退出。恐慌可以直接调用panic产生。也可以由运行时错误产生,例如访问越界的数组。Recover
是一个内建的函数,可以让进入令人恐慌的流程中的goroutine恢复过来。Recover仅在延迟函数中有效。在正常的执行过程中,调用 recover会返回nil,并且没有其他任何效果。如果当前的goroutine 陷入恐慌,调用recover可以捕获到panic的输入值,并且恢复正常的执行。最容易理解就是给个例子,文章里有例子:
package main
import(
"fmt"
//"os"
)
var user = ""
func inita() {
defer func(){
fmt.Print("defer##\n")
}()
if user == "" {
fmt.Print("@@@before panic\n")
panic("no value for user\n")
fmt.Print("!!after panic\n")
}
}
func throwsPanic (f func()) (b bool){
defer func(){
if x:= recover(); x != nil{
fmt.Print(x)
b = true
}
}()
f()
fmt.Print("after the func run")
return
}
func main(){
throwsPanic(inita)
}
执行结果:
D:\go>go run b.go
@@@before panic
defer##
no value for user
如上面所说的:
panic在user=""时,打断了函数的执行,fmt.Print("!!after panic\n")没有执行。
但函数中的延迟函数会正常执行,打印了 ”defer##“。然后返回到调用该函数的地方,继续上面的过程。
直到执行完所有函数的defer,退出程序。
Recover可以捕获到panic的值,上面的打印“no value for user”。并且恢复正常的执行。
wamp搭建环境不能ip访问的解决办法
apache在本机上访问正常,但是用ip访问为403禁止访问!
apache配置文件修改:
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs/2.2/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride all
#
# Controls who can get stuff from this server.
#
# onlineoffline tag - don't remove
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
Allow from 127.0.0.1修改为Allow from all,没有查文档,搜索解决。
Read more...
PHP5 PDO使用
在wamp下的开发环境,查找资料有两种方法。使用query,使用prepare。看的代码是第二种,网上说第二种效率高,并且安全。
总结使用方法:
Read more...
$sth = $dbh->prepare('update db set zh_CN= :str where SN=:SN');
$sth->bindParam(':str',$str,PDO::PARAM_STR,12);
$sth->bindParam(':SN',$SN);
$sth->execute();
$sth->lastInsertId();
$sth->closeCursor();
源代码使用bindValue(),lastInsertId()返回id。
centos安装初体验,搭建apache-php-mysql
安装时没有安装桌面环境。
1.查看centos系统版本:命令lbs_release -a
2.mysql配置。
mysql从安装光盘中选择安装的。版本是5.0.77
修改/etc/my.cnf文件
default-character-set=utf8
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
default-character-set=utf8 增加
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysql] 增加
default-character-set=utf8 增加
没有密码登录时使用命令:mysql -u root
启动mysql服务:/etc/rc.d/init.d/mysqld start
设置密码
/usr/bin/mysqladmin -u root password '123456'
3.安装Apahce
# yum -y install httpd php php-mysql
安装php的扩展
#yum -y install php-gd php-xml php-mbstring php-ldap php-pear php-xmlrpc
安装apache扩展
#yum -y install httpd-manual mod_ssl mod_perl mod_auth_mysql
chkconfig httpd on [设置apache为自启动]
service httpd start [启动 httpd 服务]
apache配置出来的默认站点目录为/var/www/html/
4.测试
# vi /var/www/html/info.php
<?php
phpinfo();
?>
命令行下输入:firefox,打开浏览器。输入http://127.0.0.1,可以显示欢迎界面,加上info.php,可以显示php的环境信息。
Read more...
pdb调试python程序
以前在windows下一直用的idel带的功能调试python程序,在linux下没调试过。(很多时候只是print)就从网上查找一下~
方法:python -m pdb a.py
a.py是python文件。
(Pdb)模式下的常用命令:
q
退出debug
h 即help,打印所有可以命令
h w
打印命令 w 的含意
n
执行当前行直到到达下一行或直到它返回
s
执行当前行,一有可能就停止(比如当前行有一个函数调用)。它和n(next)的区别是当前行中有函数调用时s(step)会停止当前行的执行而去调用那个函数,而n不会停止,直到计算完成这一行(到达下一行)。
b(reak) [[filename:]lineno | function[, condition]]
设置断点,可以是行号或函数。如 b 10, b foo, b foo,n == 5,最后在函数foo()入口处设置一个断点,但仅当n的值是5时才有效。当b命令无参数时,打印所有断点。
tb(reak) [[filename:]lineno | function[, condition]]
临时断点,只hit一次。
disable [bpnumber [bpnumber ...]]
使指点行的断点(们)失效
enable [bpnumber [bpnumber ...]]
使指定行上的断点(们)有效
c
继续执行程序,直到遇到下一个断点
w
即where,打印当前执行点的位置
l [first, [,last]]
输出当前行附近的源码
p expression
执行一个表达式当打印其值。
a(rgs)
打印当前函数的参数及其值
<直接回车>
重复执行上次的命令
并遇到pdb不认识的命令时,会将它当成python表达式执行。如果你想执行的表达时,最前面加上 ! 字符,比如 !n == 5
多个debug命令可以写在一行上,中间用两个分号分隔,如 s;;s。
Read more...