早上九点来到广州市珠江新岸酒店进行小米的面试,下面是面试官的一些问题,虽然已经阵亡,但是还要补充自己的不足!!!!经过这次面试,个人深刻体会到,所谓的

基础就是强悍的编程能力(涉及到问题的分析和解决能力)+深入掌握一门语言(c++/java,这个可以考察你对知识了解的深入程度),这个在互联网技术岗位是非常重要的!!!!!

问题1:

dynamic_cast的作用(已回答),检测多层继承模型中类的上行转换的安全性!

问题2:

explicit关键字的作用(当时没想起来!!!)

explicit关键字在c++中是为了防止隐式转换,假设我们有一个类是这样定义的:

#include<fstream>
#include<string>
#include<cstring>
using namespace std;class base{
public:base(int x){a = x;cout << "has construct!"<< endl;}~base(){cout << "has destruct!"<< endl;}bool is_same(base bb){if (a == bb.a)return true;else return false;}int a;
};int main(){base bb(2);cout << bb.is_same(2) << endl;return 0;
}

对于非类临时对象来说,假设我们有一下语句:

int a=3;

double b=4.23456;

if(a==b)return ture;

else return flase;

在上面的语句中,double类型会被隐式转换成int类型

可能编译器会产生如下代码:

int a=3;

double b=4.23456;

int temp=b;

if(a==temp)return ture;

else return flase;

中途会产生一个临时变量,这样就会有一个隐式转换,一般而言隐式转换会伴随一个临时变量的产生!!!

问题3:

如何限制一个类对象只在堆上或栈上分配(虽然没有回答上来,但个人觉得这题是最能体现对类的理解程度)

class base{
public:base(){a = 1;b = 2;}int a; int b;
private:void * operator new(size_t a){cout << a << endl;cout << "this is the operator new of class!"<< endl;void *p = malloc(a);*(int *)p = 3;*((int *)p + 1) = 4;return (void *)p;}
};//void * operator new(size_t a){
//  cout << a << endl;
//  cout << "this is the operator new of class!" << endl;
//  void *p = malloc(a);
//  *(int *)p = 3;
//  *((int *)p + 1) = 4;
//  cout << p << endl;
//  return (void *)p;
//}int main(){base bb;cout << bb.a <<" "<< bb.b << endl;base *ptr=(base *)new base();//编译不通过//cout << ptr << endl;//base* p=(base *)ptr->operator new(8);//cout << ptr->a << ptr->b << endl;//cout << p->a << p->a << endl;return 0;
}

我们将在类里面重载了operator new函数,所以在new的时候就不会调用全局std::operator(size_t size)函数,只会调用类里面的重载函数,但是此时我们把operator设置为

私有,希望被new创建的对象没有权限调用私有成员函数,就会出现以下错误:

1>e:\vs2013 projects\daily_practice.cpp\daily_practice.cpp\daily_practice.cpp(41): error C2248: “base::operator new”: 无法访问 private 成员(在“base”类中声明)
1>          e:\vs2013 projects\daily_practice.cpp\daily_practice.cpp\daily_practice.cpp(17) : 参见“base::operator new”的声明
1>          e:\vs2013 projects\daily_practice.cpp\daily_practice.cpp\daily_practice.cpp(8) : 参见“base”的声明
1>

所以这个时候,就不能在堆上建立类的对象。

只能在堆上建立对象:

class base{
public:int a;int b;static base *create(){return new base();}void destory(){delete this;//调用析构函数}
private:base(){a = 1;b = 2;}~base(){cout << "destructor!"<< endl;}};int main(){base *p1 = base::create();cout << p1->a<<"  " << p1->b << endl;p1->destory();return 0;
}

这种情况只能在堆上建立!!!!

问题4:设计一个单例模式:

class base{
public:int a;int b;static base *create(){//设置为静态函数,可以通过类作用域访问  if(p==NULL)p = new base();return p;}void destory(){delete this;//调用析构函数  }
private:base(){a = 1;b = 2;}~base(){cout << "destructor!" << endl;}static base *p;
};
base *base::p = NULL;int main(){base *p1 = base::create();base *p2 = base::create();if (p1 == p2)cout << "same!" << endl;p1->destory();return 0;
}

问题5:

编程:给定一个字符串,里面有若干空格,实现一个算法将空格用后面的字符填补,要求原地操作,可以使用少量的交换空间,例如

输入:ab#cd###ef

输出:abcdef

一共有两种方法,当时没想出来。

#include <iostream>
#include<vector>
#include<sstream>
#include<fstream>
#include<string>
using namespace std;int main(){char a[]="ab##bc##def#";int len=strlen(a);int count=0;int now=0;for(int i=0;i<len;i++){if(a[i]!='#'){count++;}}now=count;//count为写入位置for(int i=count;i<len;i++){if(a[i]!='#'){a[count++]=a[i];}}a[count]='\0'; printf("%s\n",a);
}

第二种方法:

int main(){char a[] = "ab##bc##def#";int len = strlen(a);int count = 0;int i = 0;for ( i = 0; i<len; i++){if (a[i] == '#'){count++;}else{a[i - count] = a[i];}}a[i-count] = '\0';printf("%s\n", a);
}

小米2017校招面试经历相关推荐

  1. 阿里,华为,腾讯,小米2017实习面试经历

    首先自我介绍,非985,非211学校,主要从事java后台开发,大一至现在做过两个项目(都不深),有一段去小公司的实习经历,今年刚到学校2月底才开始准备实习,陆续投了小米(我是米粉),阿里,华为,腾讯 ...

  2. 2017 后端面试经历分享

    2017 后端面试经历分享 0.背景 博主本人 2015 年毕业于郫县某 985 大学通信工程系,因为大学期间一直自己创业所以错过了大四秋招春招,毕业后又在北京继续创业一年,但在创业公司一直无法沉淀技 ...

  3. 【实习之路】腾讯、小米日常实习生面试经历分享——小米篇

    文章目录 前言 正文--小米篇 一面经验 二面经验 总结 前言 最近在投递实习岗位,面试了腾讯跟小米两家公司,分享一下经历. 正文--小米篇 投递渠道:BOSS直聘. BOSS直聘上有个小米的面试官私 ...

  4. 【面经】百度校招面试经历 - 2020.08.01

    百度面试经历 意外之喜 实习经历 项目经历 设计模式 单例模式 主要解决 优点 缺点 使用场景 注意事项 单例模式有什么种类 饿汉模式(线程安全,可用) 懒汉模式(线程不安全,不可用) 懒汉模式(线程 ...

  5. 参加阿里巴巴校招面试经历

    原帖地址: http://ifeve.com/alixiaozhao/ 本文主要是讲述我参加阿里巴巴2013年校招的经历,感谢并发编程网博主的推荐. 电面 说是电话面试,其实和正常面试感觉没啥区别,也 ...

  6. asic面试题目 英伟达_NVIDIA校招面试经历

    要在网上找一些英伟达的面经真是困难,特别还是Android相关的,可能是因为NVIDIA的招聘实在是少,反正楼主从大学到研究生都木有见到过英伟达的校园招聘宣讲会... 楼主很渣,只是想记录下英伟达的面 ...

  7. 【实习之路】腾讯、小米日常实习生面试经历分享——腾讯篇

    文章目录 前言 正文 第一次面试腾讯 一面经验: 第二次面试腾讯 一面经验: 二面经验: 总结 前言 面了腾讯两次,估计都凉了,但面经还是要分享一下的. 正文 第一次面试腾讯 投递渠道:腾讯官网投递. ...

  8. 百度校招面试经历及总结(已发offer)

    听说发面经可以攒rp,希望早点给我确定的offer通知,也希望看到这个面经的小伙伴能顺利拿到心仪的offer~ 职位:机器学习-数据挖掘工程师 9.15 上午11点 一面 1.介绍项目 2.考研意向, ...

  9. 数据挖掘/机器学习/算法岗2017校招面试总结

    个人公众号,欢迎关注 YouChouNoBB 目前就职于腾讯,想内推朋友可以发我简历(校招/社招都要),邮箱384375530@qq.com,注明岗位和工作城市. 这个岗位叫法很多,算法岗,数据挖掘岗 ...

最新文章

  1. 警惕,MyBatis的size()方法竟然有坑!
  2. 初涉网络实验-路由器端口的开启与配置
  3. 人脸识别与膜虹识别_当人脸识别遭遇口罩,虹膜识别的机会来了
  4. CodeForces - 603C Lieges of Legendre(博弈+找规律)
  5. Python类属性、类方法和静态方法
  6. jQuery 学习笔记之十 (jQuery ajax )
  7. Java常用设计模式
  8. 全国面向小学五六年级及初一的舞蹈方向的艺术学校舞蹈学校整理
  9. learning_git_from_Liao
  10. python 基础面试题(一)
  11. ERROR: Pool overlaps with other one on this address space
  12. 透视城市“生命线” MapGIS地下管线三维建模工具
  13. git 账号密码重置
  14. 上半年计算机二级试题,2016上半年计算机二级模拟题及答案
  15. C.实验7_3_奇数偶数
  16. KWP2000协议学习笔记(一)
  17. python与c语言混合编程_python和C语言混编的几种方式
  18. 第二周 Day 3—— Python容器
  19. 推荐一款Python编辑器
  20. C# Winform开发 文件夹的删除

热门文章

  1. 数据脱敏:保障数据安全的脱敏方案
  2. Matlab中关于数值积分及符号积分的讨论
  3. 活用lambda之list函数处理
  4. linux 查找某个程序,Linux查找特定程序whereis实例详解
  5. catkin_make报错: ROS Base path和Source space不一致问题,
  6. 【教育小程序案例】线下培训机构辅导教育
  7. 开放、自由、参与 ------记“武汉大学开源技术俱乐部成立仪式暨Sun技术讲坛”...
  8. 各种设计模式应用场景
  9. Python爬虫入门教程 99-100 Python爬虫在线服务大全
  10. 【uoj#311】[UNR #2]积劳成疾 dp