Python数据分析师面试之“完美世界”数据分析师实习生

只能说是狗血的剧情。太意外了。。。。

早上起来洗洗漱漱,好好的收拾一下,准备去面试,毕竟想给面试官一个好的第一印象,去之前还特意去了趟实验室,结果发现没带实验室的钥匙,又打电话找小伙伴拿钥匙,进去了之后,拿上简历,顺带带上之前的笔记,能多准备点就多准备点,带着还算可以的自信,就去了,一路上还是蛮忐忑的,大约一个多小时,到了面试所在的酒店,从进楼的第一刻就开始的我乱七八糟的面试经历,先是进错了电梯,后来又是面试的签到处找不到自己的名字(后来发现是自己的名字被打错了),整个过程尴尬的不行不行的了,终于签完到了,就坐在沙发上等着。哈,终于等到自己了,坐在面试官前面,先是来了个自我介绍,然后问我为什么选这个岗位(可能面试官当时就觉得我不适合这个岗位,或者是说我对这个岗位定义错了,后者的可能性极大),之后又问我的学习情况,以及让我重新学一门语言的话需要多长时间,还问了一些我对游戏的看法,问完了之后,评价到“你的学习能力很强,我们这个数据分析师岗位是运营类,并不是你所理解的那个大数据方向的,我建议把你推荐到游戏开发岗位”,我当时感觉可能要凉了,因为对于c++我完全就是个小白,啥也不会,但是我还是硬着头皮去试了一下,尽管我并不想去,然后面试官就去和部门主管联系,让我去了游戏开发岗面试,新的面试官是一位很和蔼的大姐,但是可能我让他很失望。整个面试过程我感觉自己的智商完全下线,一些简单问题都不知道怎么回答,整个过程尴尬的不能再尴尬,问了一段时间,基本没回答什么,结束了,面试官大姐让我再那等会。我就在那查查了一下刚才的问题,(下面是所问的问题,各位看官不要笑哈,我也不知道我当时的脑子去哪了。。。。)

1、(c++):你给我介绍一下static关键字

  主要功法如下:

  1)类的静态成员,

    在cpp中必须对它进行初始化:

   int A::s_value = 0;// 注意,这里没有static的修饰!

class A
{
    private:
        static int s_value;
};

   类的静态成员是该类所有实例的共用成员,也就是在该类的范畴内是个全局变量,也可以理解为是一个名为A::s_value的全局变量,只不过它是带有类安全属性的;道理很简单,因为它是在程序初始化的时候分配的,所以只分配一次,所以就是共用的;类的静态成员必须初始化,道理也是一样的,因为它是在程序初始化的时候分配的,所以必须有初始化,类中只是声明,在cpp中才是初始化,你可以在初始化的代码上放个断点,在程序执行main的第一条语句之前就会先走到那;如果你的静态成员是个类,那么就会调用到它的构造函数;

   2)类的静态函数:

class A 
{
    private:
        static void func(int value);
};

   实现的时候也不需要static的修饰,因为static是声明性关键字;类的静态函数是在该类的范畴内的全局函数,不能访问类的私有成员,只能访问类的静态成员,不需要类的实例即可调用;实际上,它就是增加了类的访问权限的全局函数:

   void A::fun(int);静态成员函数可以继承和覆盖,但无法是虚函数;

  3)只在cpp内有效的全局变量:

  在cpp文件的全局范围内声明:

  static int g_value = 0;

  这个变量的含义是在该cpp内有效,但是其他的cpp文件不能访问这个变量;如果有两个cpp文件声明了同名的全局静态变量,那么他们实际上是独立的两个变量;

  如果不使用static声明全局变量:int g_value = 0;

  那么将无法保证这个变量不被别的cpp共享,也无法保证一定能被别的cpp共享,因为要让多个cpp共享一个全局变量,应将它声明为extern(外部)的;也有可能编译会报告变量被重复定义;总之不建议这样的写法,不明确这个全局变量的用法;

  如果在一个头文件中声明:

  static int g_vaule = 0;

  那么会为每个包含该头文件的cpp都创建一个全局变量,但他们都是独立的;所以也不建议这样的写法,一样不明确需要怎样使用这个变量,因为只是创建了一组同名而不同作用域的变量;

  这里顺便说一下如何声明所有cpp可共享的全局变量,在头文件里声明为extern的 :

  extern int g_value; // 注意,不要初始化值!

  然后在其中任何一个包含该头文件的cpp中初始化(一次)就好:int g_value = 0; // 初始化一样不要extern修饰,因为extern也是声明性关键字;然后所有包含该头文件的cpp文件都可以用g_value这个名字访问相同的一个变量;

  4)只在cpp内有效的全局函数:

  在cpp内声明:

  static void func();

  函数的实现不需要static修饰,那么这个函数只可在本cpp内使用,不会同其他cpp中的同名函数引起冲突;道理和如果不使用static会引起的问题和第3点一样;不要在头文件中声明static的全局函数,不要在cpp内声明非static的全局函数,如果你要在多个cpp中复用该函数,就把它的声明提到头文件里去,否则在cpp内部声明需要加上static修饰;

2、(c++):c语言中创建动态数组的方式是什么?释放?那么c++中创建动态数组的方式是什么?释放呢?    

   c语言:malloc()和free();    c++:new(),delete();

3、(mysql):你介绍一下什么是“事务”

  事务由单独单元的一个或多个SQL语句组成,在这个单元中,每个MySQL语句是相互依赖的。而整个单独单元作为一个不可分割的整体,如果单元中某条SQL语句一旦执行失败或产生错误,整个单元将会回滚。所有受到影响的数据将返回到事物开始以前的状态;如果单元中的所有SQL语句均执行成功,则事物被顺利执行。

  事务的四个属性:

  1、原子性:事务是由一个或一组相互关联的SQL语句组成,这些语句被认为是一个不可分割的单元。

  2、一致性:对于数据库的修改是一致的,即多个用户查的的数据是一样的。一致性主要由mysql的日志机制处理,他记录数据的变化,为事务恢复提供跟踪记录。

  3、隔离性(孤立性):每个事务都有自己的空间,和其他发生在系统中的事务隔离开来,而且事务的结果只在他完全被执行时才能看到

  4、持久性:但提交了这个事务之后对数据的修改更新就是永久的。当一个事务完成,数据库的日志已经被更新时,持久性即可发挥其特有的 功效,在mysql中,如果系统崩溃或者数据存储介质被破坏,通过日志,系统能够恢复在重启前进行的最后一次成功更新,可以反应系统崩溃时处于执行过程的事物的变化。

4、(操作系统):介绍一下线程和进程的区别

    

   定义

   进程:具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.

   线程:进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。

   联系:

   一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.

   相对进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列

   区别:

   1.地址空间和其它资源:进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。

   2.通信:进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。

   3.调度和切换:线程上下文切换比进程上下文切换要快得多。

   4.在多线程OS中,进程不是一个可执行的实体。

5、(项目):你说一下你是如何实现跳一跳外挂的(这一部分就不赘述了,有兴趣可以参看另一篇博客python进阶之微信跳一跳外挂



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值