PHP Internals Book 中文版

你看到的是PHP内核中文版,翻译自PHP Internals Book。为什么要翻译对技术的饥渴对英语的热爱方便汉语作为母语的人学习交流官方网站PHP Internals BooGithub(更新最快https://github.com/GenialX/php-internals-book-in-chines关于作者Genial内容目录IntroductioUsing the PHP build systeBuilding PHBuilding PHP extensionCreating PHP extensionZvalBasic structurMemory managemenCasts and operationImplementing functionHashtableBasic structurHashtable APSymtable and array AP...阅读全文

内网穿透工具的原理与开发实战

在我国,由于网民众多,运营商无法保证为每一个宽带用户提供全球唯一的公网IPv4地址。因此很多用户会发现通过路由器端查看到的WAN端IP与百度“IP”关键词所得到的IP不一致,并且前者的IP为一个私有IP。而还有一些情况下,公网IP比较昂贵,企业虽然本身也持有少量的独立的公网IP,但是由于成本限制无法为企业内每一台主机都提供一个公网IP,或者内网并不是所有服务都需要暴露到公网中进行访问,那么企业有可能就会使用NAT技术将大量的内网IP通过一定规则映射到公网IP上。而最常见的其中一种技术就是NAPT,也叫“网络端口地址转换”。因为一般一个服务都是通过一个端口来提供,因此通过这种方式可以将特定的服务通过特定的规则开放到少量的公网IP上。阅读全文

那些年,我们追过的RPC

1974年冬,互联网大师 Jon Postel发表了RFC674:“Procedure Call Protocol Documents,Version 2”,尝试定义一种在包含70个节点的网络中共享资源的通用方法。在大师一生中编辑过的无数个RFC文档中,674属于并不突出的一个,但却拉开了RPC的序幕。也正是接下来我们故事的开始。阅读全文

利用内网穿透frp工具实现外网链接(ssh)内网树莓派设备

内网穿透原理内网穿透(Net穿透)也即端口映射,笔者粗暴理解是一种能够将外网机器与内网机器(外网无法直接访问的设备)建立通信的一种技术解决方案。百度百科尽管有许多穿越NAT的技术,但没有一项是完美的,这是因为NAT的行为是非标准化的。这些技术中的大多数都要求有一个公共服务器,而且这个服务器使用的是一个众所周知的、从全球任何地方都能访问得到的IP地址。一些方法仅在建立连接时需要使用这个服务器,而其它的方法则通过这个服务器中继所有的数据——这就引入了带宽开销的问题。具体原理详见百度百科=> https://baike.baidu.com/item/NAT%E7%A9%BF%E8%B6%8需要资源一台公网服务器(可以通过IP直接访问树莓派(也可以是电脑,以树莓派为例安装本文以frp v 0.13.0为例(具体版本可以自己定,但不保证其他版本能够成功)。笔者在go 1.7.4版本下编译frp...阅读全文

从小白到机器学习算法工程师,我做了哪些准备?

一、方向选择都说选择比努力重要,这个鸡汤我觉得可以干了。起初接触人工智能领域是在硕士选择导师的时候,当时民叔推荐来到人工智能与机器人研究所,跟随现在的硕导做图像处理方面的研究,用到一些机器学习的算法做分类工作。在学校学习平台比较重要,它决定了你会见识什么人、什么样的黑科技、什么样的应用等,没有这些东西勾起你的好奇心,也就没有对未来的规划或者说期待。硕士期间,养成了看论文的习惯,专注领域顶级期刊论文,当然了首先是先把自己研究的课题相关知识看的透彻,这个在第二小节中会介绍:为什么硕士课题很重要。一些我认识是牛人的人说,看论文是在跟领域大牛在交流,这个确实刚开始体会不到,起初很排斥看论文,更加上我的英语那是一个...后来看多了,发现知识之间都是相通的,可能解决一个问题用的是同一个方法,这样看一篇论文的时间会大大缩短,有效率了,心里便更愿意去看论文。康奈尔大学图书馆网站每天更新世界上各个大牛写的论...阅读全文

使用Cgo的一点总结

今天想给一个C库写一个Golang binding,就查了一下cgo的使用,也遇到了一些坑。cgo的基本使用想在Go代码中使用C语言必须在代码开头注释中写,然后再紧接着的下一行写import "C",这样就算是导入完成了。这个”C”不是一个真正的包,而是一个类似于命名空间的东西,所有能调用的C的变量、函数都包含在里面。举个最简单的例子这个例子展示了cgo的基本使用方法。开头的注释中写了要调用的函数和相关的头文件,头文件被include之后里面的所有元素都会被加入到”C”这个命名空间中。需要注意的是,import "C"必须单独一行,不能与其他包一同import。向C函数传递参数也很简单,就直接转化成对应类型传递就可以。如上例中C.CString强制类型转换将一个字符串转化为了C字符串然后传递给了print函数。需要注意的是,Go是强类型语言,所以cgo中传递的参数类型必须与声明的类型完全...阅读全文

关于int的取值范围(有种背下来)

unsigned int 0~429496729int -2147483648~214748364unsigned long 0~429496729long -2147483648~214748364long long的最大值:922337203685477580long long的最小值:-922337203685477580unsigned long long的最大值:184467440737095516__int64的最大值:922337203685477580__int64的最小值:-922337203685477580unsigned __int64的最大值:1844674407370955161原文链接:http://blog.csdn.net/niuox/article/details/823194阅读全文

禁止tmux窗口自动命名

关于tmux的多窗口,用起来可谓非常方便。但,也许在默认的tmux配置下,一样和我被一个小问题困扰。那就是,tmux的窗口名称总是会随着执行的命令不同而变动。关于这一点,可用如下的方式来解决更改tmux配置文件打开~/tmux.conf文件,增加(或修改)如下内容更改oh-my-zsh配置文件当然,如果你在用oh-my-zsh的话。那么,还需要进行如下修改打开~/.zshrc文件,增加(或修改)如下内容参考文章:https://stackoverflow.com/questions/38543763/tmux-will-not-stop-auto-renaming-window阅读全文

3年PHPer的面试总结

之前看到一篇文章《八年phper的高级工程师面试之路》,然后最近我也在面试,面了有百度、360、滴滴、小米、微博、58赶集、搜狗、瓜子二手车等公司,最后也进了心仪的公司,面试过程中学到了很多东西,所以也想和大家分享一下,虽然我的工作经验才3年左右。 注:下面题目的答案只是我思考和查询资料的结果,并不代表完全准确,有错误的地方大家可以指正,有更好的方案可以提出,大家一起讨论。算法1.反转函数的实现2.两个有序int集合是否有相同元素的最优算法3.将一个数组中的元素随机(打乱4.给一个有数字和字母的字符串,让连着的数字和字母对应5.求n以内的质数(质数的定义:在大于1的自然数中,除了1和它本身意外,无法被其他自然数整除的数思路: 1.(质数筛选定理)n不能够被不大于根号n的任何质数整除,则n是一个质数 2.除了2的偶数都不是质数 代码如下6.约瑟夫环问题相关题目:一群猴子排成一圈,按1,...阅读全文

ZigZag Conversion(math)

QuestioThe string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibilityP A H A P L S I I Y I And then read line by line: "PAHNAPLSIIGYIR"Write the code that will take a string and make this conversion given a number of rowsstring convert(string text, int nRows);convert("PAYPAL...阅读全文

翻转整型数(水题)

正题Reverse digits of an integer.Example1: x = 123, return 32Example2: x = -123, return -32思考改题为简单难度(水题),根据题意可以依次取到给定的整型数x的最高位到最低的数,然后依次将其乘10的x次幂后进行累加即可得到结果。这里,要知道32位的整型一共有九个0,故声明i=1000000000;代码原题:https://leetcode.com/problems/reverse-integer/description阅读全文

最长回文字符串题解(动态规划)

LeetCode正题Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.ExampleInput: "babad"Output: "bab"Note: "aba" is also a valid answer.ExampleInput: "cbbd"Output: "bb"思考回文字符串即正向顺序和反向顺序的字幕排序是一致的字段串。题的大意为寻找一个指定字符串中的最长的回文字符串。首选,暴力解法需要遍历所有子串并判断子串是否为回文字符串。假设给定字符串长度n,那么子串的总数为​n(n+1)/2(即1 2 3 ... n的和),即需要O(n^2),然后判断每个子串是否为回文字符串的时间复杂度为O(n),即总共需要...阅读全文

最长不重复子字符串问题(动态规划)

问题Given a string, find the length of the longest substring without repeating characters.ExamplesGiven "abcabcbb", the answer is "abc", which the length is 3.Given "bbbbb", the answer is "b", with the length of 1.Given "pwwkew", the answer is "wke", with the length of 3. Note that the answer must be a substring, "pwke" is a subsequenceand not a substring.分析首先,这种题肯定不能暴力来解决,否则肯定会超时。所以,考虑用一个哈希表(Map&l...阅读全文