阿里巴巴java方向笔试题

1.以下程序输出结果是____

class A
{
  public:
    A ():m_iVal(0){test();}
    virtual void func() { std::cout<<m_iVal<<‘ ’;}
    void test(){func();}
  public:
      int m_iVal;
};
class B : public A
{
  public:
    B(){test();}
    virtual void func()
    {
      ++m_iVal;
      std::cout<<m_iVal<<‘ ’;
      }
};
int main(int argc ,char* argv[])
{
  A*p = new B;
  p->test();
  return 0;
}

A.1 0

B.0 1

C.0 1 2

D.2 1 0

E.不可预期

F.以上都不对

本问题涉及到两个方面:
1.C++继承体系中构造函数的调用顺序。
2.构造函数中调用虚函数问题。

C++继承体系中,初始化时构造函数的调用顺序如下
(1)任何虚拟基类的构造函数按照他们被继承的顺序构造
(2)任何非虚拟基类的构造函数按照他们被继承的顺序构造
(3)任何成员对象的函数按照他们声明的顺序构造
(4)类自己的构造函数
据此可知 A*p = newB;先调用A类的构造函数再调用B类的构造函数。

构造函数中调用虚函数,虚函数表现为该类中虚函数的行为,即在父类构造函数中调用虚函数,虚函数的表现就是父类定义的函数的表现。why?原因如下:
假设构造函数中调用虚函数,表现为普通的虚函数调用行为,即虚函数会表现为相应的子类函数行为,并且假设子类存在一个成员变量int a;子类定义的虚函数的新的行为会操作a变量,在子类初始化时根据构造函数调用顺序会首先调用父类构造函数,那么虚函数回去操作a,而因为a是子类成员变量,这时a尚未初始化,这是一种危险的行为,作为一种明智的选择应该禁止这种行为。所以虚函数会被解释到基类而不是子类。
据此可以得到答案C正确

B 继承自 A, 先 A 构造函数,输出 0 ,然后 B 构造函数, B 的 test 继承自 A ,然后找 func 函数找到 B 自己的,所以输出 1 ,然后 p->test() 再执行一次,输出 2

2.2015年年初,某公司部门举行年会,期间有个游戏,规则是通过猜拳的方法决出每一局的胜负(一人赢其他所有人才算赢得本局,出现平局就继续猜拳),如果谁先赢满7局,则获胜,并赢得全部奖金。现在有3名员工甲、乙、丙参与了这个游戏,游戏进行了一会,分数为甲6,乙5,丙4,但时间已晚,大家要吃饭了。最公平的奖金分配方案是____。

A.甲得到19/27,乙得到7/27,丙得到1/27

B.甲得到18/27,乙得到8/27,丙得到1/27

C.甲得到17/27,乙得到1/3,丙得到1/27

D.甲得到19/27,乙得到6/27,丙得到2/27

E.甲得到18/27,乙得到7/27,丙得到2/27

F.甲得到17/27,乙得到8/27,丙得到2/27

这道题要想后面要再比赛多少局,枚举所用的4局是由当所有人都只需一局获胜时的最极端情况而来的。
以甲为例子:
一局: 甲 概率1/3
两局: X甲 概率2/9 X不包括甲
三局: XX甲 - 乙乙甲 概率 2/3 X 2/3 X 1/3 - 1/27 = 3/27 X不包括甲
四局 : 一乙两丙(组合有3种) + 甲 概率 3 X 1/27 X 1/3 = 1/27
总共 = 19/27

同理 乙:
两局 : 乙乙 1/9
三局 : 丙乙乙、 乙丙乙 2/27
四局 : 一乙两丙 + 乙 3 X 1/27 X 1/3 = 1/27
总共 = 6/27

同理 丙 :
三局 :丙丙丙 1/27
四局 :一乙两丙 + 丙 = 1/27
总共 = 2/27

3.四维空间中有两个夹角60度的向量A和B,随机生成一个向量C分别与A和B计算内积,那么两个内积符号相同的概率为____

A.1/4

B.1/3

C.1/2

D.2/3

E.3/4

F.以上都不对

向量C在 √ 区域的表示可以, 在 × 表示不可以。
四维空间投影再投影,就是二维空间啊 ,所以答案选D。

alibaba java笔试 阿里java笔试题目_java

4.假设淘宝用户上的用户看到一个商品后购买的概率是5%,收藏的概率是20%,而用户收藏一个商品之后购买的概率是20%,那么已知某用户看到某商品之后完成了购买,那么该用户收藏过该商品的概率是____。

A.40%

B.50%

C.60%

D.70%

E.80%

F.90%

设A为买,B为收藏。 已知P(A)=5%, P(B)=20%, P(A|B) = 20%。
所以P(B|A)=P(AB)/P(A) = P(A|B)P(B)/P(A) = 80%.

5.以下函数中,和其他函数不属于一类的是_____

A.fread

B.gets

C.getchar

D.pread

E.getline

F.scanf

pread是系统调用,其他是IO函数,所以选D。

6.当前国内A股市场的新股发行采取的是抽签申购的方式。假设最多可以申购某新股X 1万股,以1千股为单位分配一个号码进行抽签,每个号码抽中与否是相互独立的且概率为0.5%,X的发行价是10元,涨至15元和20元的概率均为50%,那么在最大申购的情况下盈利的期望是____。

A.250

B.300

C.325

D.375

E.425

F.500

最多申购10000股,1000股分配一个号,则顶格申购就会产生10个号,每个号码是否中签独立,就是说中签号为伯努利事件,服从B(10,0.005),
中签的期望为E=np=100.005=0.05. 发行价是10元,涨至15元和20元的概率均为50%,则如果中签后每股收益的期望为 (15-10)0.5+(20-10)0.5=7.5。因此总的收益为 中签的概率期望 中签后每股收益的期望股数=0.057.51000=375.
所以此题选D

7.现在有一个程序由A,B两个同学结对编程完成,在整个程序中的代码比例是3:5,据往常的统计A同学的千行代码缺陷率为10‰ ,B同学的千行代码缺陷率为15‰ ,现在在改程序中发现了一个缺陷,那么是由A同学的代码引起的缺陷的概率为____。

A.28.6%

B.37.5%

C.40.0%

D.47.4%

E.52.6%

F.71.4%

记发现BUG为事件BUG,A编写代码为事件A,B编写代码为事件B,则
A编写的代码中发现BUG的概率为P(BUG|A)=0.01%
B编写的代码中发现BUG的概率为P(BUG|B)=0.015%
对于已经编好的一个程序,P(A)=3/8,P(B)=5/8
根据贝叶斯公式得:
P(A|BUG)=P(A)P(BUG|A)/{P(A)P(BUG|A)+P(B)P(BUG|B)}=3/80.01%/(3/80.01%+5/8*0.015%)
此题选A

8.如下描述中,错误的是____。

A.SATA硬盘因为有机械部件,随机读写时会发生磁头的物理运动。主流硬盘的平均寻道时间在几毫秒到几十毫秒

B.SATA硬盘读写的最小单位是扇区,扇区的大小是512字节或者4k

C.文件系统读写硬盘的最小单位也是扇区

D.SSD支持随机读写.但是一般读性能要好于写性能

E.SSD的随机读写延时要比SATA低两个数量级

F.SSD根据使用技术的不同,写的寿命是有限的,需要软件进行写优化,确保存储单元的写次数基本同步增长

1.sata硬盘:SATA(Serial ATA)口的硬盘又叫 串口硬盘 ,全称是Serial Advanced Technology Attachment
2.ssd硬盘:固态硬盘(Solid State Drives), 适合于个人用户使用。 一般它擦写次数普遍为3000次左右,以常用的64G为例,在SSD的平衡写入机理下,可擦写的总数据量为64G X 3000 = 192000G
3.文件系统:是抽象与操作系统之上的,文件系统一般按照Cluster大小,有时候也称为 Block大小来读写数据,这个Cluster一般最小的4K,大的定为32K 、64K等都可以,主要根据应用的不同。比如Oracle的应用一般就用4K或8K 的Block大小,大文件读写就用 128K甚至256K都可以.文件系统读写硬盘的最小单位也是簇,所以此题选C。

9.有一个类B继承自类A,他们数据成员如下:

class A {
...
private:
     int a;
};
class B  : public A {
...
private:
     int a;
public:
     const int b;
     A &c;
     static const char* d;
     B* e;
}

则构造函数中,成员变量一定要通过初始化列表来初始化的是____。

A.a b c

B.b c e

C.b c d e

D.c e

E.b d

F.b c

1)const修饰的变量定义后就不能更改了,因此,需要使用初始化列表来初始化。
2)引用在进行初始化后就不会再改变,因此,也需要使用初始化列表来初始化。
3)static与类有关,不需要使用初始化列表。
4)指针的值在初始化后可以改变,即指向其它的存储单元,因此,也不要使用初始化列表。
因此这道题选F。

10.以下函数中,和其他函数不属于一类的是____。

A.read

B.pread

C.write

D.pwrite

E.fseek

F.lseek

fseek是函数,其他都是系统调用.,此题选E。

11.一个长度为99的循环链表,指针A和指针B都指向了链表中的同一个节点,A以步长为1向前移动,B以步长为3向前移动,一共需要同时移动多少步A和B才能再次指向同一个节点____。

A.99

B.100

C.101

D.49

E.50

F.51

并不是50 仔细看题 首先是个循环链表 再来就是只有99个元素 以前有个老题 那个是100个 别弄错了
设A走x步 那么B久走3x步 两个要碰到 所以有(3x-x)%99=0 x取99才可以
此题选A。