阿里笔试题2017重点

c++相关:对c++不是很了解,虽然学过,但是学得不是很好,使用更是很少。

1.inline函数

基本的形式:

inline int min(int first, int second)
   

关键字inline要与函数的定义放在一起才能成为内联函数:

函数的声明和定义的区别:

inline void Foo(int x);

  

inline void Foo(int x){
  ....

}

inline是"用于实现的关键字",不是用于生成的关键字。声明相当于对外接口,调用者并不需要了解,是否是内联实现。

定义在类中的成员函数自动成为内联函数。

class A
{
    public:
    void Foo(int x, int y)//自动地成为内联函数
    {
          .......
    }
};

如果内联函数中的代码过长或者有循环,那么不推荐是用内联函数。

使用内联函数的关键字不一定会在编译器中展开,编译器是有选择性的。

头文件中包含的inline函数的定义而非声明。

不可以不同的源文件中定义函数名相同但实现不同的inline函数,会发生冲突。

内联函数机制既具备宏代码的效率,又增加了安全性,并且可以自由的操作类中的数据成员。

宏代码的机制:#define 本身不是函数,但是使用起来像函数。编译预处理器用拷贝宏代码的方式取代函数调用,省去参数压栈,call调用,返回参数,return过程,提高了速度。但是容易出错,拷贝宏代码时会产生边际效应。不可以调试。无法操作私有数据成员。assert除外,用于宏定义,不是函数。

内联函数可以调试:在debug版本中没有真正内联,像普通函数一样,release版本中才会真正内联。

数据结构:

1.进制问题  一些概念理解不清

n位的2进制:

2^(n-1)*(an)+2^(n-2)*an-1+.....2^(0)*(a0)

问题:

假设在n进制下,下面的等式成立,n值是()240*12=2880

解答:
(2*(n^2)+4*(n^1)+0*1)*(1*(n^1)+2*(n^0))=2*(n^3)+8*(n^2)+8*(n^1)+0
等式恒成立,所以结果是任意进制

2.线性表

循环链表是另一种形式的链式存储结构。将链表中最后一个指针域从null改变为开始节点。

队列是只允许在一端插入另一端删除的链式结构。

栈是在栈顶进行插入,删除的链式结构。

“关联数组”是一种具有特殊索引方式的数组。不仅可以通过整数来索引它,还可以使用字符串或者其他类型的值(除了NULL)来索引它。不是线性表。

3.struct类型的大小:

64位处理器中:指针为8个字节,int是4个字节,char是1个字节,总共13字节,但是struct必须是8的整数倍,所以16个字节。

4.iterator.erase()方法

是删除当前的字符,指针指向下一个字符。

#include <iostream>
#include <vector>
using namespace std;
int main(void)
{
    vector<int>array;
    array.push_back(100);
    array.push_back(300);
    array.push_back(300);
    array.push_back(300);
    array.push_back(300);
    array.push_back(500);
    vector<int>::iterator itor;
    for(itor=array.begin();itor!=array.end();itor++)
    {
        if(*itor==300)
        {
            itor=array.erase(itor);
        }
    }
    for(itor=array.begin();itor!=array.end();itor++)
    {
            cout<<*itor<<"";
    }
  return 0;
}

答案为:

100 300 300 500

5.

c错误原因:类的常量才是不可修改。

关于静态成员的特性可参考借鉴另一个博客:http://www.cnblogs.com/morewindows/archive/2011/08/26/2154198.html谢谢。

linux:

linux是一点都不了解的。

1.linux多路复用I/O接口select和epoll来实现高并发

区别:select轮询方式,效率低,epoll是触发式的,效率较高

1:select中socket的数量是有限制的,由FD_SETSIZE决定一般是1024.通过遍历FD_SETSIZE1024个socket来决定调度哪个socket,不管是否活跃都会全部遍历一次。

2.epoll无限制,是触发式的,当有socket事活跃态的时候则callback,若所有的都是活跃态则回到了遍历方式。

socket数量限制问题的解决:

1.修改FD_SETSIZE定义的宏,重新编译进内核,但是这会导致网络质量的下降。

2.实现多进程。

epoll不会IO效率不随FD数目增加而线性下降

Select会

epoll的适用情景就是大量的socket,但是活跃多不是很高的情况。epoll通过共享存储实现内核和用户的数据交互。

时间: 2024-10-27 06:18:36

阿里笔试题2017重点的相关文章

阿里笔试题记录(Android客户端部分)

阿里笔试题记录(Android客户端部分) 选择题 结果应该是选择 80,8 思路: - 指针的值都是一个个地址,而地址是用无符号整型值来表示的,也就是unsigned int.因此一个指针类型变量的大小就是unsigned int类型的大小. - 64位系统,一个地址占用的二进制位数为64(8字节),32位系统,地址的二进制位数32(4字节).参考64位操作系统的指针不都是64位吗 32位cpu和64位cpu,这个位数指的是数据字长,而不是地址字长.两者没有必然的数值上的联系.处理器字长是指处

阿里笔试题(2015)持续更新中

第一次做阿里笔试题,除了ACM题之外从来没有做过校招网络题呀,完全是裸考,总体感觉吧,对于我来说,感觉时间不够用,不是题不会,感觉时间紧,大脑很混乱,总结这一次的笔试题 废话不多说,直接上题和答案 平均每个人逗留时间为20分钟,那么开场前20分钟一共来了400人,且有20个人逗留时间已经到,但他们不一定出去,注意是平均时间,所有博物馆最少应该容纳500人 双向循环列表,从任何一个元素开始可以遍历全部元素 先和后面的元素相连 s->next=p->next; p->next->pre

阿里笔试题-派生类构造函数 创建顺序

派生类 与基类的关系: (1)创建构造函数的顺序 :基类构造函数(注意此处基类的成员不能初始化) ==>派生类成员初始化 ==>派生类构造函数 (2)派生类的构造函数 中 基类的构造函数默认在第一条,如果不写super(),则默认在第一条,注意位置不能颠倒 (3)派生类可以继承全部的基类的构造函数 阿里笔试题 举个栗子: 1 package com.test; 2 3 public class DispatchTest { 4 5 public static void main(String[

一天积累一点儿之阿里笔试题

励志把阿里的题库弄出来!当然,主要目的还是想知道自己还有哪些知识点的欠缺和不足 1. (1)这个element的onclick事件,this当然指的是这个element了 (2)window (3)window  这两种方式都没有把element传给doSomething,所以this默认指向window 2. 1 Array.prototype.sorting = function(fn){ 2 var t; 3 if(!fn){ 4 fn = function(a,b){ 5 return

阿里笔试题之Android网络优化

记得这是阿里校招笔试的一道问答题 答案是小伙伴们之后一起拼出来的,不乏有些飘忽的东西,需要的朋友可以做个参考(具体细节可以自行百度),欢迎提出更好的建议! 在客户端方面: 1.减少网络请求的数量,能够合并的网络请求尽量合并,尽量在一次查询中完成多个零散数据的查询 2.为网络数据做本地缓存处理 3.设置超时时间,数据压缩传送,比如从服务器端获取列表数据,如果可以最好是能将服务器端的流压缩一下,接收压缩流,这样速度会快点,而且省流量. 3.多线程处理,不要死等网络操作的结果,把耗时工作及计算放在子线

惨挂阿里笔试题

昨天阿里笔试,惨挂到一算法题,现分享此题,集网友智慧,看如何解答此题. 请大神们不吝赐教哦! 版权声明:本文为博主原创文章,未经博主允许不得转载.

阿里笔试题——算阶乘的末尾有几个零

用十进制计算30!(30的阶乘),将结果转换成3进制进行表示的话,该进制下的结果末尾会有____个0. 答案选14 #include<iostream> using namespace std; #define LINT int LINT count_number(LINT n) { LINT a=n; LINT re=0; while(1) { if(a==0) break; LINT b=a; a--; while((b!=0)&&(b%3==0)) { re++; b=b

阿里笔试题:求两个子序列的最大连续子序列

原题例如以下: 给定一个query和一个text,均由小写字母组成.要求在text中找出以相同的顺序连续出如今query中的最长连续字母序列的长度.比如.query为 "acbac",text为"acaccbabb",那么text中的"cba"为最长的连续出如今query中的字母序列,因此.返回结果应该为其长度3.请注意程序效率. 解题方法一: 和字符串匹配一样(http://blog.csdn.net/sinat_24520925/articl

接下班概率问题——阿里笔试题

牛客某程序猿小杨每天接老婆下班回家.小杨在6点准时下班从公司开车出发,由于路上可能存在的堵车情况,小杨到老婆公司门口的时间点均匀的分布在6点20到6点30之间.老婆根据小杨的下班时间做了估计,到公司门口的时间点均匀的分布在6点25到6点30之间,如果小杨比老婆晚到公司门口将会挨骂,那么小杨被骂的概率是____. 1/4 1/3 1/2 2/3 3/4 以上都不对 这个题目是概率分布问题,解决方法有两种. 解法1: 可以进行分析,比如小杨在6点20到6点25之间到的概率为0.5,那么老婆这个时候肯