【百度实习日记】Day 26:对技术保持积极的态度

写代码要有正能量

今天去参加了贴吧技术部的新人培训,主讲人是贴吧技术部的主管红波先生。他讲的内容主要是贴吧架构的演变,介绍了贴吧是怎么从1.0时代的刀耕火种一直到2.0时代的lnmp然后到3.0时代的服务化贴吧,直到现在正在进行的4.0自动化&平台化的重构。内容很多很杂,从整体上了解到贴吧的技术构成,看到了很多工作中需要用到的工具、平台,以及一些随时都会接触到的各种名词。当然一些技术细节需要自己去摸索,比如为什么要用redis啊,怎么对mysql分库分表啊,ddbs是怎么存储查询的啊什么的。这些东西都是需要在未来的工作当中深入了解的。今天红波在讲课的时候,有说到一句话,深受感触。他说,我们做技术要有两点注意,第一是要保持学习能力,第二是要保持对技术积极的态度。学习能力是告诉我们需要更新自己的知识库,对技术积极的态度是为了鞭策我们不要停滞不前。他说的很对。很多人看来写代码是枯燥的,但是写代码真正的乐趣不做技术的人是无法体会到的。我们写的每一行代码如果都能有价值,那该是一件多么庆幸的事情啊!对技术保持敬畏之心,也要对技术保持积极的态度。

刘凯宁
20150709

附录:PHP 实现Hash Table
(主要参考资料:《PHP核心技术与最佳实践》by 陈文、列旭松)

 什么是HashTable

Hash Table 是计算机科学中很重要的一种数据结构,其时间复杂度为O(1),主要是通过把关键字Key 映射到数组中的一个位置来访问记录,所以速度相当快。映射函数称为 Hash函数。

Hash Table 的实现步骤是:

1、创建一个固定大小的数组用于存放数据

2、设计良好的 Hash 函数

3、通过 Hash 函数把数据按照关键字 key 映射到数组中的某一个位置,并在此数据上进行数据存取

下面是用PHP实现一个Hash Table

class HashTable{
 // Container
 private $arrContainer;
 //size
 private $intSize = 10;

 /**
 * 构造函数
 */
 public function __construct(){
 $this->arrContainer= new SplFixedArray($this->intSize);
 }
 /**
 * hash 函数
 * @param str $strKey
 * @return number
 */
 private function hashFunc($strKey){
 $intLength = strlen($strKey);
 $intHashValue = 0;
 for($index=0;$index<$intLength;$index++){
 $intHashValue+=ord($strKey{$index});
 }
 return $intHashValue % $this->intSize;
 }

 /**
 * 插入函数
 * @param str $strKey
 * @param str $strValue
 */
 public function insertIntoHashTable($strKey,$strValue){
 $intIndex = $this->hashFunc($strKey);
 $this->arrContainer[$intIndex]=$strValue;
 }

 /**
 * 查找函数
 * @param str $strKey
 */
 public function getFromHashTable($strKey){
 $intIndex = $this->hashFunc($strKey);
 return $this->arrContainer[$intIndex];
 }
}
//测试
$hash = new HashTable();
$hash->insertIntoHashTable('lkn','刘凯宁');
$hash->insertIntoHashTable('lkn2','刘凯宁2');
$hash->insertIntoHashTable('lkn3','刘凯宁3');
$hash->insertIntoHashTable('lkn4','刘凯宁4');
$hash->insertIntoHashTable('lkn5','刘凯宁5');
echo $hash->getFromHashTable('lkn3');

这就是基本的hash table 的实现了。采用了固定的长度,hash函数也比较简单。当然还需要考虑冲突的问题,明天接着写一下。

Share

【百度实习日记】Day 26:对技术保持积极的态度》上有 1 条评论

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*


*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>