去年的朋友圈就是这样:
立志看50本书,年底紧赶慢赶,看完了44本:

昨天面试了360公司,从一面到hr面,一天之内全部过来,这里只总结问题,技术题的答案会在我的GitHub上的项目上更新
这两天在看Linux内核设计与实现,看完了,以思维导图的方式总结一下,这也是我第一次尝试以思维导图来总结,先试试效果
实际上,整个内核是一个整体,很难具体的去划分那些属于那些模块,而且这些模块里面都是相互缠绕的,很难解释清楚,我就粗略的按照书里面的内容,再按照自己的总结,划分这样一些模块

今天在没事读读书社的群里,看到有人发了习惯的力量的思维导图,才知道原来那样的图是拿思维导图软件画出来,长知识了,赶紧自己也整一个
上网百度了一下,思维导图软件好多,本来想用minimanger的,结果这个软件是付费的,而且死活破解不了,没办法,只好卸载之后选择了mindmaster软件,刚试了一下,还挺好用,以后总结就靠它了
]]>前几天在另外一台电脑上更新了自己的项目,并且已经推送到远程仓库,但是,今天在另外的一台电脑上需要推送到远程仓库时,从远程抓取数据后,打开当前文件,依旧是自己之前存在本机的。
1 | git fetch origin master |
第一条命令是从远程仓库抓取数据到本地,但是默认是没有合并的
第二条命令是对比当前master分支和origin/master分支的不同,也就是对比远程仓库的数据和本地仓库的不同
第三条命令是合并远程分支到本地分支
1 | git pull origin master |
不用手动合并,所以,这个命令实际上并不安全,不建议
git 刚开始学,所以好些东西只是简单的看过了,但是在实际中完全不是一回事,边用边学吧
]]>在本地git向远程GitHub仓库提交代码时,需要在GitHub网页上添加上本地SSH密匙,本篇博文来说明这个过程
第一步,打开本地的ssh文件,如果没有本地ssh文件,可以自己新建,步骤看我的两篇博文:
在Ubuntu下生成SSH文件
在Windows下生成SSH文件
按照里面的目录打开id_rsa.pub文件,这个是公匙,还有另外一个文件id_rsa存储的私匙,打开公匙文件id_rsa.pub文件,复制里面的所有内容
第二步,打开GitHub网页,登录,这些步骤不再赘述
第三步,登录之后的页面显示如下,可能有些地方不一样,点击右上角的头像,然后点击setting选项,如下:
第四步,在左边栏选择SSH和GPG选项,如图
第五步,点击添加新的SSH密匙,如下
第六步,将复制好的公匙,填到网页上,确认添加即可
完成。接下来就可以在Git上部署代码,然后提交了
这些事很久之前做的,最近忙里偷闲,总结下
]]>刚开始学习Git的时候,我们还是习惯在Windows下玩Git,那么Git的Windows版本完全可以符合你的要求,安装不再赘述看大佬的博文,安装好之后,还需要配置ssh文件来向远程仓库提供密匙,这样才能将本地的代码提交到远程仓库,所以这里说下怎么在Windows下生成.ssh文件
第一步:打开git bash,在终端输入如下命令:1
cd ~/.ssh/
如果提示 “ No such file or directory”,你可以手动的创建一个 .ssh文件夹即可,步骤如下:
首先,用如下命令配置全局的name和email,这里是的你github的user name和user email:1
2git config --global user.name "你的GitHub用户名"
git config --global user.email "你的GitHub邮箱"
接下来,用如下命令生成.ssh文件1
ssh-keygen -t rsa -C “你的GitHub邮箱”
输入之后,连续按三个enter就可以了,实际的意义和Ubuntu下差不多,具体参考我的这篇博文
之后,就可以复制公匙到GitHub上了,具体我们下一篇博文再说
最近时间紧张,就这么零零散散写一写吧。
]]>在Ubuntu下使用git对GitHub上的远程仓库进行操作时,需要响应的ssh密匙验证,但是我们的电脑上,包括虚拟机上一般来说都不会提供.ssh文件,这个时候就需要我们手动去生成一个.ssh密匙文件。
第一步:打开终端,在终端输入如下命令:1
ssh-keygen -t rsa -C “your email”
参数-C后面修改成你的邮箱就可以了
运行上述命令后,会产生下面的输出:1
2Generating public/private rsa key pair.
Enter file in which to save the key (/home/xinu/.ssh/id_rsa):
括号里面是默认的密匙保存路径,可以修改,直接按enter的话,表示按照默认路径保存;
直接按enter之后,会产生下面的输出:1
Enter passphrase (empty for no passphrase):
这里表示输入密码,记得密码要足够长,我的第一次输入密码太短了,所以导致失败了,也可以直接enter,表示密码为空;
之后会产生如下提示:1
Enter same passphrase again:
这是要求你再次确认密码,保持和上次输入一致即可。
到这里,密匙已经产生,它会告诉你密匙的保存路径以及指纹
密匙产生之后,就可以直接复制到GitHub上就可以了,具体看我的后面的博客吧
]]>以前刚开始接触Linux,用的是发行版Ubuntu,但是Ubuntu有个很坑爹的问题,那就是没有root用户,你去设置里面添加,死活都不行,试了很多方法,包括修改/etc/passwd下的UID等方法,但是都很麻烦,无意中翻到一个帖子,才找到一个好用的方法,赶紧记录下来,不然又忘记了
首先,在终端输入下面命令1
sudo passwd -u root
响应如下
接下来,在终端输入如下命令:1
sudo passwd root
响应如下
输入你要设置的密码,不过要注意的是,Linux下你在输入密码的时候,他是不会显示出来的,所以放心大胆的往进去输入就可以了,再次确认
接下来,你确认设置root密码是否成功
首次输入如下命令,切换到root用户1
su root
这是个切换用户命令,如果输入root密码后,你的终端输入由美元符号$变成井号#那就说明你已经切换到root用户了
效果如下
完美完成,当然还有其他方法暂时拥有root权限,在这里就先不讨论了,Linux真的是个迷,小技巧太多,以后慢慢学习
]]>最近在写一台高并发服务器的程序,所以需要两台电脑都运行相应的程序,一台电脑即当客户端,又当服务器时,在用webbench进行压力测试的时候,会出现问题,所以需要在另外一台电脑上也安装虚拟机
具体的步骤不多说,网上很多博客写的都很好,我就是按照那些步骤来的,唯一可能没指出的地方就是在虚拟机上安装系统的时候,因为分辨率的问题,安装步骤的有些地方会显示不全,所以,在安装之前一定记得要把调整好分辨率,使之全屏,这样再开始。
首先推荐一篇ProGit学习指南,讲的非常明白,而且字数少,很实用,之前看了看那个什么Git权威指南,还有配套的视频,说实话,不推荐大家去学习,这个非常好。推荐给大家
git init—-初始化git,每次新建一个项目之后,我们都必须在对应的项目文件夹内执行该命令
git add 文件名/目录—–添加修改过的文件或者目录到本地仓库静态暂存区
git status —-查看当前暂存区状态,是否有需要提交的文件
git commit -m”备注”—–将暂存区的文件提交到本地仓库
git clone —-将远程仓库的内容克隆到本地,然后就可以在本地进行开发了
git rm —-移除文件,从工作目录中删除文件,这样就不会出现在未跟踪文件清单中了
git log —–查看提交历史,会列出所有的更新
git log -p -2—-其中-p参数表示显示每次提交的内容差异,-2表示显示最近的两次更新
git log –pretty=oneline —-相当于简约的显示模式
git commit –amend —–撤销刚才最新的提交
git reset HEAD 文件名 ——将提交到暂存区的文件撤销回来
git checkout –
git remote -v ——-查看当前的远程库
git remote add
git fetch [remote-name] —–从远程库抓取数据
git push [remote-name] [branch-name] ——-将本地仓库branch分支推送到远程库
git remote show [remote-name] ——-查看远程库的信息
git remote rm [remote-name] —–删除远程库
git remote rename [old-remote-name] [new-remote-name]——修改远程库名字
git tag—-显示目前工作目录中所有的标签
git tag -a
git tag
git checkout [branch-name]—–切换到指定分支
git checkout -b [branch-name]——新建该分支并切换到该分支
git merge [branch-name] ———合并该分支到当前分支
git branch -d [branch-name] —–删除该分支
git branch ——显示当前工作目录中的所有分支
git branch–merged——查看那些分支已经被并入当前分支
git branch –no-merged——-查看那些尚未合并的分支
git rebase [branch-name]——-衍合分支
git stash—-储藏当前工作状态
git stash list —–查看储藏列表
git stash apply stash@{2} —-切换到储藏2继续工作
git stach pop —–取消当前储藏
最近在学习Git,后面可能会写一篇关于Git学习的博客,这篇主要讲发起项目的过程。最近在找工作,正好也在学Git,就想着把前辈们总结下来的面试问题分享给大家,最后想到了直接在GitHub上发起项目的方法,这样时间久,而且不用担心那天总结的文档忽然不见了,所以就有了这个想法,学完Git,开始着手实践,下面是一些过程。
第一步:在GitHub上新建仓库,这个很简单,不多说
第二步:在本机上新建一个文件夹,用于存储本地的代码
第三步:在git bash下进入上一步新建的文件夹
第四步:使用git clone Git@github.com/PirateSnow/TechInterExpe.git命令把远程仓库的代码克隆到本地文件夹
第五步:执行git init命令,执行之后,可以看到,在本地文件夹,多了一个.git文件夹,说明初始化成功
第六步:现在可以对项目文件进行修改了,我的项目目前还是空的,只有一个README.md文件,所以我新建专业面试问题.md文件,以后所有的专业面试问题都会在这上面更新
第七步:使用git add 专业面试问题.md命令添加到静态暂存区
第八步:使用git commit -m”备注信息” 提交到本地代码库
第九步:使用git push origin master命令提交到远程代码库
这一步如果提示你使用https://github.com/PirateSnow/TechInterExpe进行push,那么执行下面的步骤
(1)git remote add temp1 https://github.com/PirateSnow/TechInterExpe进行push
(2)git remote rm origin
(3)git remote rename temp1 origin
这样就可以了,有什么问题欢迎大家咨询
现在只是把基本框架搭起来,以后按照这个步骤更新就可以了,欢迎大家参与共享
]]>今天去参加了浦发银行的面试,啊~累死了,从中午一点开始面试,一直到下午六点才面试完,这会儿刚回到实验室,把一些东西写下来,免得自己忘记
浦发银行的流程主要是综面–>在线编程–>技术面,因为人数不同,所以有些人的面试流程不一样,不过都是三个环节都是必须要走完的。
我先进行的是在线编程,三道题,总共五十分钟,时间特别紧,主要是浦发银行用的那个系统特别坑,光熟悉人家的答题系统就花了十分钟,支持本地IDE,但是是Dev C++,平时用的也不多
三道题,分别是:
第一道题,判断一个数是不是素数,很简单,最暴力的方法从2~N,一个一个数的就那么试就可以了。
第二道题,输出1900~2000之间所有的闰年,也很简单,暴力方法就可以,能被4整除且不能被100整除,或者能被400整除,也很简单。
第三道题,密码解密的,说白了就是字符变换,A–>Z,B–>Y,C–>X,…a–>z,b–>y,c–>x,…只有字母才变,其他字符不变化,如果是第i个字母,那么就变成第26-i+1个字母
这些题目都很简单,但就是时间不够,对人家的系统不太熟悉,前面浪费了很多时间,所以最后一题写出来,但是没时间调试了
总共三个面试官,面对面就这么问你。
这个技术面试真的可怕,就问了一点点专业知识,其他都是真的扯淡,待我详细说来
第一个问题,为啥你这个照片看起来比你本人白很多?我说人家给我P成那个样子了,不是我故意的。。。
第二个问题,看了我的简历,你那个机器人比赛有什么意义,然后我就说了比赛的背景
第三个问题,我看你本科是那里那里,是不是保研?之类的
高潮来了,我之前参加了华为的比赛,然后拿了名次,就问我华为比赛,突然画风一转,我们昨天也面试了一个,叫什么什么,然后我说那是我队长,然后就开始问,你和队长相比,你有什么优势?你队长的开发能力怎么样?我当时的心里想的是,我靠!!!这是要干么?然后我把队长一通夸,当然,这个时候你就要说自己在一些小地方不如他,这些地方看起来是缺点,但是实际上从另一个角度讲是优点的那种。然后又问我实验室另一个小伙伴开发能力怎么样,然后又是这么回答的,然后现在开始把我们三个拉到一块开始比,你们三个成绩呢?你们三个的开发能力?我。。。
问完这个,开始问我写的简历上说是熟悉Linux操作系统,所以问我shell命令,第一个我忘记了,第二个是查看进程状态,第三个是查看CPU利用率;
下面是我们的对话:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15最左边的面试官:你还有个哥是吧?
我:嗯
最左边的面试官:这个工作单位是上海王品牛排,这是个品牌么?全国连锁?
我:对啊,可有名了,满大街的广告
最左边的面试官:我怎么没听说过。
中间的面试官:嗯,是有这个一个牌子,还挺贵
我:。。。。
中间的面试官:你哥这个是职业么?
我:嗯
中间面试官: 你哥专业学的就是西餐?
我:嗯
中间面试官:学的就是西餐?
我:嗯,还是在咱陕西学的
中间面试官: 啥学校?
我: 陕西旅游烹饪学院
对话终于结束了,可以换个话题了,太可怕了。差不多就这些了
这一轮也是三个面试官,然后六个人一组,也是这么面对面交流。
综合面试主要是两个场景,第一个是给你一段话,然后给你两分钟,你可以根据材料的内容,来一段演讲,限时三分钟,
我的题目是关于中国人的山寨货,模仿是一种学习,你的看法?
两分钟后,面试官说可以开始了,因为没有人立即举手,所以我就举手了,大概随便说了一些,提出自己的观点就差不多了,然后大家开始轮流发言,基本大家都会有发言的机会,但是我觉得这个环节,主要是你的发言要有调理,观点重复不重要,但是条理一定要清楚。
第二个环节是面试官根据你的演讲,进行提问,其实也没问什么,主要是中间的面试官提问,听说话语气像是个领导之类的下面是一些记得对话1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21面试官:5号同学,你为啥没有项目经历
5号同学:因为我之前是学经济的,后来跨专业考到计算机,所以没有
面试官:4号同学,我看你写了很多计算机能力,你的这些计算机能力在你的实际项目中时怎么用的?
4号同学:首先,我的比赛要求我在一分钟内程序跑完,但是我第一个版本的程序跑完需要15分钟,我的算法肯定不能变,
那么我就需要优化数据结构,让他的运行时间变短,还有如此种种
面试官:那你这些比赛的代码量?
4号同学:大概500行,其他的比赛很长
面试官:3号同学,你总结下自己的特长
3号同学:我的学习能力特别强,团结同学之类的(这不是原话,大概意思是这样)
面试官:6号同学,你总结下自己的特长
6号同学:~~~~(内容和3号差不多)
面试官:7号同学,你的经历为啥断了一层?
7号同学:我之前本科毕业工作了四年去读研,其中有段工作时间太短,所以我没写,出现了断层
面试官:你主要做过什么项目?
7号同学:我印象最深的一次是,XXXXX
面试官:主要用的是什么语言?
7号同学:Java
面试官:1号同学,你说下你的项目经历
1号同学:XXX是我的实验室的项目,XXXX是我的业余爱好,我用的XX模型,主要是Java语言写的
面试官:3号同学,你的项目经历
3号同学:我主要是学习XXXX,我到目前为止,写了XXXX专利,还有一篇文章在写
差不多就问了这么多,然后我们这组综合面试就结束了,感觉这些人不是很在乎你的技术有多厉害,第一是你的表达能力,还有就是面试官很不专业,不是科班出身,所以这个时候有项目的可以随便吹就可以了。不知道面试结果咋样,反正就这样了。加油~
]]>小Q有X首长度为A的不同的歌和Y首长度为B的不同的歌,现在小Q想用这些歌组成一个总长度正好为K的歌单,每首歌最多只能在歌单中出现一次,在不考虑歌单内歌曲的先后顺序的情况下,请问有多少种组成歌单的方法。
每个输入包含一个测试用例。
每个测试用例的第一行包含一个整数,表示歌单的总长度K(1<=K<=1000)。
接下来的一行包含四个正整数,分别表示歌的第一种长度,A(A<=10)和数量X(X<=100)以及歌的第二种长度B(B<=10)和数量Y(Y<=100)。保证A不等于B。
输出一个整数,表示组成歌单的方法取模。因为答案可能会很大,输出对1000000007取模的结果。
1 | 5 |
1 | 9 |
假设a首A长度的歌曲和b首B长度的歌曲组成歌单,那么应该满足下列方程1
2
3a*A+b*B=K
a<=X;
b<=Y;
那么,只需要对a和b进行排列组合就可以,输出只需要对这个结果取模即可。
1 | #include<iostream> |
这是我的代码,因为我是事后写的,不一定能通过所有的测试用例,欢迎大家指出错误,写完博客,放松下
哈哈哈,就写这么多。
在markdownPad2中用mathjax插入公式时,在线显示不了
第一步,在markdownPad中Tools->options->markdown->markdown processor选择GitHub flavored markdown(offline)
第二步,在hexo中安装mathjax工具,执行以下命令就可以了1
2npm install hexo-math --save
hexo math install
第三步,此时,你去插入公式,还是显示不对,因为在mathjax中,‘\’默认为转义字符,所以我们需要修改文件,去掉转义字符,方法如下:
在./node_modules/marked/lib/文件下,用记事本打开mathjax.js文件,修改其中两个地方:
第一个地方:1
escape: /^\\([\\`*{}\[\]()# +\-.!_>])/,
修改为1
escape: /^\\([`*\[\]()# +\-.!_>])/,
第二个地方:1
em: /^\b_((?:[^_]|__)+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
修改为1
em:/^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
第四步,在主题配置文件_config.yml设置如下代码:1
2
3
4mathjax:
enable: true
per_page: false
cdn: //cdn.bootcss.com/mathjax/2.7.1/latest.js?config=TeX-AMS-MML_HTMLorMML
这样,所有的步骤就都完成了,快去试试吧
搭建一个支持LaTEX的hexo博客
在Hexo中渲染MathJax数学公式
写完了一篇博客,来张图放松一下
前段时间刚开完玩博客,但是有个很大的问题就是本地图片在网上显示不了,总是会挂掉,很难受,就搞啊搞,总算是解决了。
解决办法就是既然本地图片在hexo-next博客上回挂掉,那么久不放在本地了,而且放在本地的话,图片多了,生成静态文件的时候会非常慢,亲测,我就放了一张图片,就明显能感觉到变慢了,所以放到本地很不靠谱,那就是放在晚上喽,晚上选择性很多,但是要考虑到稳定性,我们现在这么折腾在GitHub上搭建个博客,各种个性化主题,我可不想我的图片三个月后莫名因为图床不服务了,我的博客上的图片也挂掉,那我会想弄死那些人,所以,以稳定优先考虑的按照我的方法来,如果你不想要稳定,或者只是玩玩,那么请出门右拐,随便选个图床。
我选的是华为云对象存储作为我的图床,其实还有七牛云和阿里云都可以做,七牛云大家都推荐,但是实名认证贼麻烦,所以最后再阿里云和华为云之间选了华为云,这两个都差不多,而且流量包价格也一样的,所以朋友们不要问我那个好,都一样的,下面我以华为云为例,说下大概的过程:
第一步,肯定是注册账号如下图:
第二步,注册号之后,登录,然后实名认证,很快的,基本上照片上传之后三秒钟认证通过,相比七牛云的一天半,而且还要求我的照片清晰来说,真的超级快,这就是我选择华为云的原因。这部分比较简单,我就不上图了。
第三步,点击下图中的控制台
第四步,点击下图中的对象存储服务
第五步,点击下图中的创建桶,因为我已经创建过了,所以我的那个地方有条目,你们的应该是空的
第六步,创建的详情下图所示:
第七步,创建桶之后,点击返回桶列表,创建好的桶如下所示,演示如何上传文件
第八步,如图所示,上传文件;
第九步,如图所示,查看图片详情
第十步,获得图片外链;
第十一步,获得图片下载链接
第十二步,购买流量包
第十二步,如下图所示,选中,付钱就是了
以上就是所有的步骤,希望对大家有帮助。
]]> 自动售货机里有N瓶复制可乐.复制可乐非常神奇,喝了它的人会复制出一个自己来!
现在有Alice,Bob,Cathy,Dave四个人在排队买复制可乐。买完的人会马上喝掉,然后他和他的副本会重新去队伍的最后面排队买可乐。
问:最后一个买到复制可乐的人叫什么名字?
输入仅有一行,包含一个正整数N;
#输出描述
输出喝到最后一罐复制可乐的人的名字
8
Bob
我们以1,2,3,4分别代表四个名字,那么他们的排列分别是:
| 序列 | 序列长度 | 单个数字重复次数 |
|---|---|---|
| 1 2 3 4 | 4 | 1 |
| 1 1 2 2 3 3 4 4 | 8 | 2 |
| 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 | 16 | 3 |
我们可以看出,归纳总结可以知道,第i轮之后,第i轮的序列长度为\(4*2^{i-1}\)第i轮的每个数字重复频率为\(2^{i-1}\)
思路是,我们首先要确定输入的数字N在第i轮的范围内,然后再根据在这一轮每个数字的重复频率来确定最后N输入那个数字,也就是最后哪个人处于最后
1 |
|
本来这个题还有一种最笨的解法,就是直接建立一个长度为N的数组,然后把数字一个一个填进去,然后判断最后是第几个人,但是这种方法,当N很大的时候,会占用很多内存,所以放弃了。
]]> 今天我又更新了,本来想加载gitalk博客评论的,结果加载的过程中出错,在解决问题的过程中,发现了一个更好的,这就是极简的valine,这个真的是美爆了,果断放弃gitalk,换成valine,下面是我的添加过程,希望对大家有帮助。
我参考了下面的这篇博客,大家照着来就行了。为什么我不再写一篇呢?因为我的图片上传功能还没修好,贼难受,就先这样记录,等我下午中期答辩结束再去找问题。