浅谈第三方登陆
水面的涟漪虽然已经消散了,但是仍然会有人记得风曾经吹过。 人无完人,何须自谦?世界之大,几个圣贤?脚下之路,何必回迁? The furthest distance in the world is not between life and death. But when I stand in front of you. Yet you don’t know that I love you. 路:足各相汇,意行者殊,则前途相异。然行者固,前路亦有变,此乃人心之向也。前途不可知并非前途不可造。万人愿,动天于心诚;万人行,生途于脚下。 微信登陆 没有自己的账号体系,直接拉取微信用户信息进行网站登陆。 有自己的账号体系,授权成功后需要绑定自己的账号。 微信公众平台和微信开放平台分别对应移动端和PC端,通过这两个接口进行授权登陆拿到的openid是不一样的。这样导致的问题就是在手机端通过微信公众平台绑定的用户信息和PC端通过开放平台绑定的用户是互斥的。解决这个问题可以在微信开放平台中绑定微信公众号。
java 中的一些惯用法
鸟宿池边树,僧敲月下门。 java7中的try-resource语法语义自动关闭InputStream和JDBC Connection,就不需要在finally中close了。 java中的锁是如何实现的在java里锁是通过cas把当前线程id刷新到对象的头信息里,在获取锁时会去头信息里拿这个信息,如果没有则会cas刷新进去,刷新成功就获取到锁;刷新失败就表明有别的线程也在尝试刷新这个信息。 在操作系统层面有pv操作保证原子性,而pv操作也是利用cpu中原语指令,在获取锁时保证不会被别的指令打断(或被重排序)。 白名单问题 java中1/0抛出算术异常,而1/0.0结果为无穷大。 一家信用卡公司中的账号是成千上万的,我们将用户账号保存在一个文件中,这个文件就是白名单。认为给定一个账户,我们需要检查该账号是否在白名单中。一个程序可用往往是不够的,如果没有二分查找或者归并排序这样的高效算法解决此类问题是不可能的。 关于除法运算无论正负,a / b的商会向0取整。而余数满足这个公式:(a/b) * b + a % b == a。例如-14 / 3...
使用Bind搭建智能DNS
Bind是加州大学伯克利分校开发维护的开源、稳定的DNS服务。 www.baidu.com = www.baidu.com.最后的一个.表示根域,.com是一级域,baidu.com是二级域。 DNS解析记录分类常见的有A记录,CNAME,MX和NS,参见鸟哥的Linux私房菜。 Bind安装和配置A记录 下面的例子中,DNS服务器为192.168.1.128。 12345$ yum install -y bind bind-chroot bind-utils$ rpm -qa | grep bind$ rpm -ql bind | more # 查看具体安装了哪些内容$ service named start # 启动DNS$ cp /etc/named.conf /etc/named.conf.default # 备份配置文件 配置/etc/named.conf为如下: 12345678options { directory "/var/named";};zone "baidu.com"...
Linux 网络安全
用户和用户组用户组指的是具有相同系统权限的一组用户,配置文件位于/etc/group。该配置文件的格式为组名:组密码占位符:组编号:组内用户名列表。当组内只有一个用户且用户名和组名相同的时候可以省略组内的用户名列表,例如:mysql:x:501:。组号1~499为系统预留的组编号。 /etc/shadow存放用户组的密码信息,和/etc/group一一对应。分别是组名称:组密码:组管理者:组中用户名列表。当组密码为空、星号或者感叹号的时候可以认为组密码为空. /etc/passwd,存放用户信息。用户名:密码占位符:用户编号:用户组编号:用户注释信息:用户主目录:shell类型。/etc/shadow存放用户密码。 1234567891011121314151617$ groupadd sexy # 添加组$ groupmod -n market sexay # 组改名$ groupmod -g 668 market # 更改组id$ groupadd boss -g 666 # 创建用户组并同时指定gid$ groupdel market #...
Linux 服务管理
Crontab周期性任务 at可以一次性执行。service atd status,它可以使用黑名单和白名单控制,参见/etc/at.deny,at.allow。 12345$ at now+5 minutesat> echo hehe # ctrl + d保存退出$ atq # 查看at任务$ at -c 1 # 查看工作号执行的具体任务$ atrm 1 # 删除at任务 同理crontab也有访问控制文件cron.deny等。系统服务crond每分钟会从配置文件中刷新定时任务。 12$ crontab -l # 列出任务,-r 清空$ service crond status # 查看服务是否正常启动 crontab -e可以编辑计划任务。在最后追加 123456789101112# 每分钟输出系统时间到文件*/1 * * * * date >> /tmp/date.tmp# 每天21:30重启apache30 21 * * * service httpd restart# 每月1号、10号、22号4:45重启apache45 4 1,10,22...
Linux网络管理和权限配置
arp协议是网络层的协议,但是具体工作在数据链路层,将ip地址和mac地址对应,我们可以使用arp...
vim技巧
一些小技巧 =:一个常用的场景就是粘贴代码后格式乱了,使用v命令进入多选模式,选中几行,然后=。 vi abc.txt +:打开文件abc.txt并定位到最后一行。 vi abc.txt +3:打开abc.txt并定位到第3行(如果行号过大就会定位到最后一行和直接使用+一样)。 vi message-center/chatServer.js +/data,找出chatServer.js中所有的data,我们可以使用n(下一个)或者N(上一个)进行切换。 vi a.txt b.txt...
javascript正则表达式
使用场景:在当前目录下查找所有的TXT文件:find ./ -name *.txt。 一个比较好的在线正则表达式可视化网站可以将正则表达式图形化表示出来,我们也可以找到它在github上的地址将其安装到本地。还有一个比较酷的网站。 贪婪模式和非贪婪模式正则表达式默认是贪婪模式,也就是说:尽可能多地匹配。例如: 12var str = '123456789'str.replace(/\d{3,6}/,'X') // 'X789' 上面的正则可以匹配3,4,5,6个数字,但是会默认匹配6个数字。如果想要尽可能少匹配加上量词?即可: 1str.replace(/\d{3,6}?/,'X') // 'X456789' 分组匹配一个小写字母加上一个数字连续出现3次的场景: 12var str = 'a1b2c3d4'str.replace(/(\w\d){3}/,'X') //...
java NIO
jdk1.7中提供了Object.equals,Object.hashCode方法非常方便。 传统的socket分析12345678910111213141516171819202122232425262728293031323334353637public class BIOServer { public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(10086); System.out.println("Server started"); while (true){ Socket socket = serverSocket.accept(); // Blocking System.out.println("a new client connected"); ...
大话机器学习
...