jingchi.ai 2017.11.25-26 Onsite面试
时间:2017.11.25 - 11.26
地点:安徽安庆
来回路费报销,住宿报销。
day1: 大哥哥问了我一个实际中他们遇到的问题。有n个点,将点进行分块输出,输出各个块的均值点。具体就是100*100的矩形区域内,以0.01*0.01为一小格进行分块,输出块内的均值。n的大小大概是1e9 ~ 1e11级别的(具体忘了),很多块会是空的,没有任何点。 大概就是权衡时间与空间,但大哥哥提示我说有什么数据结构嘛,大概是提示我四叉树那种?我说来说去都是排序。。。总的排序时间复杂度太高,就分出一维枚举再排序。。汗。。大哥哥还给了我一个数据,两条对角线上的格子里有点,其他格子都是空的。。回去稍微想了一想,可能就是递归划分这种吧。。。菜爆了。。
day2: 另一个大哥哥问了C++相关。如何写一个函数判断传入参数的类型,把每一个类型映射到一个数字。不会。又换成实现printf函数,可以输出整型,浮点型,字符串型等。函数重载?之后又说函数传入参数不定。好吧,都不会。(重载,模板特化,或者RTTI可以实现根据不同类型执行不同代码) (C++11可以实现变长参数模板) emmm,可能我需要恶补C++了。。。。(已update code.)看C++面不出什么东西,问我,相比其他语言,C++有什么特点?想了几秒钟,答:模板。面试官一脸惊讶:”那不应该啊,刚才考你的就是模板。“好吧我知道我菜爆了。之后就问算法题了,最长上升子序列(中间代码写错了一次尴尬),又问了一下k近邻的做法。得知我acm抄过kd-tree的代码后就没让我写了。 然后另一个大哥哥过来了解了一下我的情况,面了一些leetcode easy题以及推了一道概率题。n个人坐n个位置,第1个人等概率随机坐,余下的,第i个人在第i个位置空的情况下,直接坐第i个位置,否则等概率在剩下的空位置里找位置坐,问第n个人坐在第n个位置的概率。想了五六分钟想出了O(n)的递推公式。面试到此结束。
体验:第一次Onsite面试,有点小紧张与兴奋。本来以外能顺便旅游旅游不过没时间了,附件有一座山叫天柱山。嗯。。。。以后恐怕也不会来天柱山玩了,sad....旅途奔波有点累,没有旅游,纯面试屯了一波onsite面经。因为没有买好回来的票在安庆从中午逗留到了晚上T_T。回来享受了一下商务座(反正不是我出钱2333)。
=================这里是分割线=================
https://www.cnblogs.com/qicosmos/p/4325949.html
http://blog.csdn.net/qq_35280514/article/details/51637920
后续:为什么函数参数是自右向左压栈的?考虑printf()函数,printf()是可变参数函数,第一个参数是参数格式字符串,自右向左压栈能保证栈顶是参数格式字符串,可以通过栈顶参数格式字符串得知后续参数的个数与类型。理论上来说,自左向右压栈,可变参数标记格式字符串的参数放最后也可行,不过最早设计C语音的人采用了这种方式,后续就延续下来了。

如上图,ebp是帧指针寄存器,一般用来存取堆栈,自右向左压栈可方便得知Arg1的地址,(Arg1比较重要,参考printf,通过Arg1可方便得知参数的个数和各参数的类型)。
C版本
#include <bits/stdc++.h>
#include <stdarg.h>
void print(char *fmt, ...) {
va_list ap;
char *p, *sval;
int ival;
double dval;
char cval; va_start(ap, fmt);
for(p = fmt; *p; p++) {
if(*p != '%') { putchar(*p); continue ; }
switch(*++p) {
case 'd':
ival = va_arg(ap, int);
printf("%d", ival);
break;
case 'f':
dval = va_arg(ap, double);
printf("%f", dval);
break;
case 's':
for (sval = va_arg(ap, char *); *sval; sval++)
putchar(*sval);
break;
case 'c':
cval = va_arg(ap, int); //'char' is promoted to 'int' when passed through '...', you should pass 'int' not 'char' to 'va_arg'
putchar(cval);
break;
default:
putchar(*p);
break;
}
}
va_end(ap);
} int main(){
print("%f%s%d%c%d", 3.14, "hello world!\n", , 'h', );
return ;
}
=================update:跟着空明流转学C++template学到了本次C++面试题的解法=================
面试时的原话:工程代码中可能定义了很多类,你有什么办法写一个函数能输出它们的类型?。。。。你可以一一映射到数字中。。。。你能不能写一个类似printf的函数,可以接受任意个数的参数,输出映射后的值?
以上类似于:
把bool, int, char, double映射到不同的数字,print(var)会根据var的不同类型,输出其映射过去的数字,且print输入参数个数任意。
#include <bits/stdc++.h> template <typename T> class TypeToID
{
public:
static int const ID = -;
}; template<> class TypeToID<int>
{
public:
static int const ID = ;
};
template<> class TypeToID<char>
{
public:
static int const ID = ;
}; template<typename T> class TypeToID<T*>
{
public:
static int const ID = ;
}; template<> class TypeToID<int*>
{
public:
static int const ID = ;
}; /*****print ID*******/
template<typename T>
void print(T ID) {
std::cout << TypeToID<T>::ID << std::endl;
} template<typename T, typename... Args>
void print(T ID, Args... rest) {
print(ID);
print(rest...);
}
/********************/ int main(){
bool a;
int b;
char c;
void *p;
int *q;
print(a, b, c, p, q);
return ;
}
什么时候<>, 什么时候<typename T>?
显然当T未声明,需要声明是一个typename的时候...
点评:如果单单输出ID其实函数重载就OK了,用template特化还是要一个一个写一遍,但大哥哥还要求能传入任意个数的参数,这就需要template大法了!查漏补缺了一个自己的知识盲点。
jingchi.ai 2017.11.25-26 Onsite面试的更多相关文章
- 2017/11/25 2D变换
2D变换 一.盒模型解析模式 1.box-sizing:盒模型解析模式 1)content-box:标准盒模型(和css2一样的计算) 宽度和高度之外绘制元素的内边距和边框 width,height外 ...
- 日本IT行业劳动力缺口达22万 在日中国留学生迎来就业好时机 2017/07/18 11:25:09
作者:倪亚敏 来源:日本新华侨报 发布时间:2017/07/18 11:25:09 据日本政府提供的数据,日本2018年应届毕业生的“求人倍率”已经达到了1.78倍.换言之,就是100名大学生 ...
- [转帖]ARM A77+G77最强公版架构:联发科5G SoC计划11月26日发布
ARM A77+G77最强公版架构:联发科5G SoC计划11月26日发布 https://www.cnbeta.com/articles/tech/909025.htm 主流的手机SoC厂商已经纷纷 ...
- [LOJ 6248]「CodePlus 2017 11 月赛」晨跑
Description “无体育,不清华”.“每天锻炼一小时,健康工作五十年,幸福生活一辈子” 在清华,体育运动绝对是同学们生活中不可或缺的一部分.为了响应学校的号召,模范好学生王队长决定坚持晨跑.不 ...
- Becoming inspired (2) - ASC 2017 March 25
Becoming inspired - part 2 @ Advanced Studio Classroom Vol: 2017 MARCH 25 7.Who was I like as a chil ...
- [CodePlus 2017 11月赛&洛谷P4058]木材 题解(二分答案)
[CodePlus 2017 11月赛&洛谷P4058]木材 Description 有 n棵树,初始时每棵树的高度为 Hi ,第 i棵树每月都会长高 Ai.现在有个木料长度总量为 S的订单, ...
- 常见的25个python面试问答
常见的25个python面试问答 说到好用简洁的大数据技术,除了Hadoop.R等等,Python也是其中熠熠生辉的一员,因而广受企业和商家的青睐.求职季,不少应聘者在面试相关职业时都被要求掌握Pyt ...
- 2016年11月26日 星期六 --出埃及记 Exodus 20:17
2016年11月26日 星期六 --出埃及记 Exodus 20:17 "You shall not covet your neighbor's house. You shall not c ...
- [LOJ 6249]「CodePlus 2017 11 月赛」汀博尔
Description 有 n 棵树,初始时每棵树的高度为 H_i,第 i 棵树每月都会长高 A_i.现在有个木料长度总量为 S 的订单,客户要求每块木料的长度不能小于 L,而且木料必须是整棵树(即不 ...
随机推荐
- 阿里云服务器ECS上ubuntu安装nginx后默认站点页面打开错误,显示无法访问此网站
问题:在新买的阿里云服务器ECS上安装nginx后打开默认页面失败,如下图所示. 系统环境:Ubuntu 16.04.4 LTS64版本. 步骤回顾: root用户下运行命令 apt-get inst ...
- 聊聊前段插件之Datatables
在web开发过程中表格数据展示是一个很常见的功能,而且用户对其要求也比较高,性能.易用性等.今天我推荐一款利器给大家——Datatables:Datatables中文网. 一.介绍 Datatable ...
- Android Library开发注意事项
Android Library开发注意事项 App Module添加依赖Android Library时可以设置library的优先级, 在编译时,app按照library从低到高的优先级依次与每个l ...
- ThreadPoolExecutor 使用说明
它是一个ExecutorService,使用线程池中的线程执行提交的任务.通常我们使用Executors框架,定义使用. 线程池主要用来解决两类问题:通过缓存一定数量的可用线程,避免频繁的线程创建,销 ...
- LeetCode 刷题笔记 2. 有效的括号(Valid Parentheses)
tag: 栈(stack) 题目描述 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须 ...
- python os.walk详解
os模块大全详情 os.walkos.walk方法,主要用来遍历一个目录内各个子目录和子文件. os.walk(top, topdown=True, onerror=None, followlinks ...
- JDK动态代理的简单理解
转载:http://www.cnblogs.com/luotaoyeah/p/3778183.html 动态代理 代理模式是 Java 中的常用设计模式,代理类通过调用被代理类的相关方法,提供预处理. ...
- 插件使用_kindeditor
1.官网 进入官网:http://kindeditor.net/demo.php 插件下载:http://kindeditor.net/down.php 2.使用 (1)文件夹说明 ├── asp a ...
- iOS 开发中,关于xxx.xcodeproj 文件冲突的解决方案 (以后谁不会了,直接将连接给他)
iOS 开发中,关于xxx.xcodeproj 文件冲突的解决方案 (一有冲突要手把手教一遍,太麻烦了,现在总结下,以后谁不会了,连接直接发他). 关于xxx.xcodeproj 文件冲突的话,是比较 ...
- Task 6.2冲刺会议五 /2015-5-18
今天继续深入的看了看服务器的内容,修改了昨天的代码,发现网络编程还是很好玩的,感觉他的代码比平常写的更有趣一点,另外登陆界面也稍微看了一点.明天准备把登陆界面完善一下.