Monthly Archives: August 2017

求朋友关系中的朋友圈数量

题目描述 给出10W条人和人之间的朋友关系,求出这些朋友关系中有多少个朋友圈(如A-B、B-C、D-E、E-F,这4对关系中存在两个朋友圈),并给出算法的时间复杂度。 解答 这道题实际上考察的是”并查集”这一数据结构. 对于这类问题, 看似并不复杂, 但数据量极大, 如果用正常的数据结构来描述的话, 往往空间上过大, 计算机无法承受, 即使在空间上勉强通过, 运行的时间复杂度也极高. 只能用并查集来描述 并查集的主要操作 初始化 把每个点所在的集合初始化为自身. 通常来说, 这个步骤在每次使用该数据结构时只需要执行一次, 无论何种方式实现, 时间复杂度均为O(n) 查找 查找元素所在的集合, 即根节点 合并 将两个元素所在的集合合并为一个集合. 通常来说, 在合并之前, 应先判断两个元素是否属于同一集合, 这可用上面的”查找”操作来实现. 因此, 对于题目中的朋友圈关系, A-B, B-C, D-E, E-F.我们的算法过程如下: start => (A)(B)(C)(D)(E)(F) A-B => … Continue reading

Posted in algorithms | Leave a comment

安装YouCompleteMe

首先你需要安装vim的vundle插件, 并要求vim版本高于7.3.584 首先需要在.vimrc中添加如下代码 Plugin ‘valloric/youcompleteme’ 然后进入vim, 在Normal模式中输入:PluginInstall进行下载 检查仓库的完整性 cd ~/.vim/bundle/youcompleteme git submodule update –init –recursive 下载安装最新版的 libclang sudo aptitude install llvm-3.9 clang-3.9 libclang-3.9-dev libboost-all-dev 编译构建ycm_core库 mkdir ~/.ycm_build cd ~/.ycm_build cmake -G “Unix Makefiles” -DUSE_SYSTEM_BOOST=ON -DEXTERNAL_LIBCLANG_PATH=/usr/lib/x86_64-linux-gnu/libclang-3.9.so . ~/.vim/bundle/youcompleteme/third_party/ycmd/cpp 然后开始编译ycm_core cmake –build … Continue reading

Posted in tools | Leave a comment

vimium快捷键

vimium介绍 vimium是一款chrome的扩展程序,通过vimium可以像vim一样高效快速地操作chrome浏览器,虽然chrome的快捷键也还不错,但是我们还是来看下vimium的功能吧 接下来就介绍几个我觉得比较实用的快捷键吧。 页面导航 j 向下细微滚动窗口,可以按住不放向下滚 k 向上细微滚动窗口,也可以按住不放向上滚 gg 滚动到页面顶部 G 滚动到页面底部 d 向下滚动半页 u 向上滚动半页 h 向左细微滚动 l 向右细微滚动 r 刷新当前页面 yy 复制当前页面地址到剪切板里 p 在当前页面打开剪切板里的页面地址 P 在新的标签页里打开剪切板的页面地址 gi 光标转移到页面的第一个文本输入框(对于使用搜索引擎会方便些) f 会对当前页面的各个链接设置标签,按f后再按对应的标签,就会在当前页打开该链接 F 会对当前页面的各个链接设置标签,按F后再按对应的标签,就会在新标签页中打开该链接 使用vomnibar vomnibar就是会在chrome正中间弹出一个输入框,我向其中输入信息就可以对历史记录,书签等进行检索 o 在当前页打开一个URL,书签或是历史记录 O 在新标签页打开一个URL,书签或是历史记录 … Continue reading

Posted in tools | Leave a comment

部署owncloud的经历

什么是owncloud? owncloud是一款用来创建属于自己的私有云服务的工具,支持文件预览、本地同步、链接分享以及版本控制的功能,而且有着丰富的客户端(Mac、Linux、Windows、Android、Web)方便使用,因此是个人搭建私有云的快捷工具。不过安全性欠佳,文件是直接存储在服务器上,没有经过加密,只要获得了服务器的管理权限便可以获取文件。 官方网站:http://owncloud.org/ 如何安装owncloud? 整个安装步骤相对来说还是很轻松的,我们只需要搭建好LAMP(Linux + Apache + MySQL/MariaDB/Percona + PHP)环境即可运行owncloud,我这里选取的服务器镜像为ubuntu 14.04 64位 LAMP环境配置 LAMP环境配置,可以参考:LAMP一键安装脚本。我们可以在登入服务器后直接运行如下命令安装LAMP环境 $ sudo apt-get -y install wget screen unzip $ wget –no-check-certificate -O lamp.zip https://github.com/teddysun/lamp/archive/master.zip $ unzip lamp.zip $ cd lamp-master $ chmod +x *.sh $ … Continue reading

Posted in tools | Leave a comment

osmocombb+c118进行GSM短信嗅探实验

0x01 实验环境准备 ubuntu 12.04.5 desktop i386 摩托罗拉 C118 – 淘宝价35.00元 FT232RL模块 – 淘宝价25.50元 GSM Sniffer 耳机音频插头转杜邦转接线 – 淘宝价4.00元 注意:这里的实验环境最好选择ubuntu 12.04.5 desktop i386,其他版本容易在编译OsmocomBB步骤时无法通过(不过也可能是我当时其他几步哪里有问题导致)。 这里我们需要用转接线将C118与FT232RL连接起来,再通过FT232RL的USB口插入到笔记本上完成连接。 因为这个实验是前段时间完成的,中间安装的步骤都没有截图下来,所以理解和操作起来可能会有点懵逼。这里可以推荐youtube上的一个视频,也可以跟着他的做,就是画质很渣,看看大致怎样一个流程就是了:c118-osmocombb-gsm sniffer-嗅探短信 0x02 依赖软件包的安装 sudo aptitude install libusb-0.1-4 libpcsclite1 libccid pcscd libtool shtool autoconf git-core pkg-config make … Continue reading

Posted in tools | Leave a comment

tmux配置及体验

为什么需要tmux 因为在ubuntu环境下常常需要打开多个终端,而使用Alt+Tab键切换时你会发现所有的gnome-terminal都被折叠在了一起,如果需要切换到某个特定的terminal,就需要按很多次tab键,稍有不慎切过去了,又得重新来过。用鼠标点击移来移去很烦,而用tab键时也会因为鼠标而切换失败。 terminal有一个标签页可以切换,使用Ctrl+Shift+T可以新建一个tab,而使用Ctrl+Shift+W则可以关闭当前tab页,使用Ctrl+PageDown切换到下一个tab页。其实使用起来也还方便。但也同样存在类似的缺陷。 于是我开始尝试使用ubuntu的一个终端分屏工具 tmux tmux安装及配置 安装tmux很方便,只需要一行命令即可完成安装 sudo aptitude install tmux tmux的快捷键都有一个前缀,一般默认是Ctrl+b,而且这里一个坑点就是所有的快捷组合键都是先按下Ctrl+b松开后再按其他键,这样才能生效。我一开始是同时全部按下,快捷键都无法使用,也是很郁闷。 在使用的时候我们可以将前缀设为Ctrl+a,这样手指就不会很难受。 #修改~/.tmux.conf文件添加我们的配置,该文件可能需要你新建 gedit ~/.tmux.conf 在~/.tmux.conf中如下编辑 set -g prefix C-a unbind C-b 第一行命令是将前缀设置为Ctrl+a,而第二行命令是将原先的前缀解绑 在之后我们需要进入一个tmux会话里,当然是需要你先新建的。 新建命令 tmux new -s session-name 进入这个终端后,先按Ctrl+b后输入”:”进入命令行模式,再敲入命令 source-file ~/.tmux.conf 就可以成功就前缀更新为Ctrl+a了。因为这里更换了前缀键,所以以下的基本命令也都是基于这个Ctrl+a敲下的。如果你没有更改你的前缀的话,在输入命令时就要注意仍然是Ctrl+b了。 出错的解决方案 我在刚刚安装好tmux后,尝试新建一个session,但是会出现错误提示,提示信息如下 sessions should be nested … Continue reading

Posted in tools | Leave a comment