2018 扑扑校招笔试题 笔记

矩阵元素地址计算

填空题第一题,给定形状的一个矩阵,下标是从一开始,每个元素占用两个存储,地址从10000开始,问给定坐标在内存中的地址。

这题考细节,结果差不多在17000+那个位置,然后就是考虑,如果下标从一开始,那么扣除我们习惯性思维从零开始的下标,需要把计算的坐标[x,y]分别减去一,获取到实际坐标,而给的那个矩阵形状也是需要减去一,最后就是先行后列还是先列后行,这一点题目有明确说明。

二叉树有770个节点,多少叶子,深度多少。

借用一下Wiki上面二叉树的图片:

二叉树我没接触过,不会懂,不做解释。

网络延迟

填空题第三题,服务器宽带128MB/s(是MB不是Mbps),单向延迟50ms,磁盘写入速度是100MB/s,现在有1000个客户端同时向服务器发送64kb的数据,那么响应时间(这边是来回)是多少。

这一题考点不是很清楚,如果不考虑其他性能问题,磁盘和宽带都是够的,延迟就是100ms。

简答题,多设置索引就可以提高数据查询速度吗,为什么。

答案肯定是否定的,我记得貌似之前网易52G的那个裤子,还是其他裤子我忘记了,工具提供了一个shell脚本,社工库提前按照邮箱用户名排序,保存到文件自/名字.txt这样的格式,查询的时候使用这个shell,可以在几秒内从几十个G的数据中找到需要的数据,会查看用户名首部几个字母,打开对应文件夹的文件,只需要读取部分文件,这就是索引,提前提取数据特征按照一定规则保存着,对比要查询的数据。数据库肯定不能每次写入的时候都从新排序所有数据,所以会另取一个区域保存着数据的地址和特征,这样做就是牺牲写入速度换取读取速度,同时会占用更多的空间,大多数情况下索引是能提高读取速度,少数情况下索引不能提高查询效率,就是数据特征并不明显情况下,比如性别,最多就是A/B/C/D四种情况,相应的创建索引也不能达到快速查找的目的。

程序题

说实在的,除非现场用电脑调试,不然是没办法写出代码来的,那天在纸上歪歪扭扭的写了几个符号,太累了,写字不怎么好看,写代码就更别说了,那时候看了后面几个同学非常认证的做着试卷

最大子集问题

给定一个数组,求最带子集,数组元素不超过20个,不限语言 ,并且按照从大到小排序。下面是我用go编写的,编辑器调试几次就出结果了,手写太为难面试的人了,主要问题是得运行一遍才知道结果,题目也可能网上查询来的题目,只不过现场变成笔试。

[[789 456 123] [789 123] [789 456] [456 123] [123] [456] [789]]
package main  
  
import "fmt"  
  
func main() {  
   fmt.Println(MaxSubset([]int{123, 456, 789}))  
}  
  
func MaxSubset(array []int) ([][]int) {  
   // 第一步排序 没啥好说的  
  for range array{  
      for i := range array {  
         if i == len(array)-1 {  
            break  
  }  
         if array[i] < array[i+1] {  
            array[i], array[i+1] = array[i+1], array[i]  
         }  
      }  
   }  
   return maxSubset(array)  
}  
  
func maxSubset(array []int) ([][]int) {  
   if len(array) == 1 {  
      return [][]int{array}  
   }  
   // 分为包括当前元素 和 不包括当前元素的两个几个  
   subset := maxSubset(array[1:])  
   subset2 := make([][]int, len(subset))  
   copy(subset2, subset)  
   for i := range subset {  
      subset[i] = append([]int{array[0]}, subset[i]...)  
   }  
   // 这里一个坑,需要把当前元素单独作为一个选项添加进去  
  return append(append(subset, subset2...),[]int{array[0]})  
}

替换占位符

把字符串里面的%s替换到给定字节数组的元素,中间有一个参数n,超过这个参数n之后的内容就不替换了,字符串总长度不能超过500,具体的题目内容印象已经模糊了,所以考点在哪里也不是很清楚。

package main  
  
import "fmt"  
  
func main() {  
   fmt.Printf("%s",replace([]byte("hello %s !"),1,[]byte{'W'}))  
}  
  
func replace(src []byte, n int, placeholder []byte) ([]byte) {  
   var buffer [500]byte  
  // 源字符与目标字符之间的偏移  
  offset := 0  
  // 替换字符的指针  
  m := 0  
  for i := range buffer {  
      if i+offset == len(src) {  
         return buffer[:i]  
      }  
      // 如果遇到 %s 执行替换,并且调整 offset  if src[i+offset] == '%' && src[i+offset+1] == 's' {  
         if m >= n {  
            buffer[i] = src[i+offset]  
            continue  
  }  
         if m < len(placeholder) {  
            buffer[i] = placeholder[m]  
            m++  
         }  
         // 因为题目给的内容就是 %s 替换成一个 byte 所以offset 需要递增  
  offset ++  
      }else{  
         buffer[i] = src[i+offset]  
      }  
   }  
   // 达到字符串上限 直接输出  
  return buffer[:]  
}

这是10月,扑扑来我们学校找人时候,现场技术员笔试的内容,扑扑是福州本土企业,做生鲜到家服务,本部在福州,业务除了福州,在厦门也有发展,当然目前做技术全部都在福州。写写扑扑的小礼物。

2018 season 3 念念叨叨

0.1

没记错的话,今天是这个月最后一天了,刚刚老师课上说了,大学时间非常宝贵,不不应该去做兼职,即使你有经济困难。我突然想起来了,这个月月初,跑了两个城市,看了一下地图,是一百九十五公里,实际上那天我们自己打的到集合点集合,然后包了一辆大巴,上高速又下高速,那天从晚上八点摸到晚上十二点多才到那个兼职的地方,因为司机的问题,饶了老远的一段山路。总共五夜四天的兼职,到手是八百块,除了时间长度比较长,但是大部分时间都是在玩手机,想想为什么时间年轻的我时间可以这么不值钱,不包括坐车非常累,我想只有年轻人能抗得住,那天十二点到然后住宾馆,洗完澡一点睡觉,第二天七点就起来了,这样的兼职,大概只会做这么一次。

ARCH+I3,用起来真的舒服

实在忍受不料unity的启动栏的笨重,以及gnome开浏览器时候五个顶栏,比我的M8下巴还多,其他桌面是在太鸡肋了,于是折腾了一天换上arch加i3的组合。

安装过程跟着官方的教程走并没有什么问题,不过由于粗心,中间没有安装dhcp服务,多敲了几个命令。

没有使用开箱即用的桌面环境,真的很蛋疼,是的一般人真的学不来这玩意。。。

安装Xorg,手动启动,并不需要登录管理器,附加两个显卡驱动:

pacman -S xorg xorg-xinit xf86-video-amdgpu xf86-video-intel

安装i3,有时候真的很感谢arch,没有多余的,也没有缺少的,那种这样就好的感觉真的很好,终端和启动器需要自己安装:

pacman -S i3 dmeun xfce4-terminal

再见我莫名其妙_(:з」∠)_的贰零壹七一事无成并没有什么可怕的开心就好

不知道标题里面放个表情会不会出现排版问题,导致无法正确传到某种心情。

博客犀利糊涂的也挂了三年了,时间真的很快,在那么一瞬间,还在回味刚刚逝去的那一秒,却发现一年又过去了,比如回到家,水水水又生了一儿子了,谁又和女朋友去哪个村那个岛过新年,而我妈有时候会幻想她儿子找个女朋友生个娃之类的情景,一切来的太突然了,多么可怕( ゚д゚)。 是的这种本来应该就元旦或者2-15这种数字比较吉利或者有某些意义日子里发出来的,但却因为各种小问题比如说没时间不在状态网络延迟的各种方方面面的因素,没有写出来,我前天刚刚知道摩尔定律,如果有一定几率出错,那么一定会出错,那么如果能拖这么久,那么一定是有问题,比如说真的太懒了。