大风车考试网-在线学习网络资源平台!

所在位置:大風車考試網 > 招聘筆試題 > 正文

PPS校園招聘筆試真題

2024-05-31 13:51:46 大風車考試網

  如果大家想了解PPS每年校招筆試考查的知識點,可以從PPS2015校園招聘筆試真題去總結,相信大家一定會有所收獲。
  一、簡答題

  (1)一位老師有2個推理能力很強的學生,他告訴學生他手里有以下的牌:

  黑桃:2 , 5 , 7 , 9 , J , K

  紅心:3 , 4 , 9 , J , K

  梅花:5 , 8 , 9 , Q

  方塊:2 , 7 , 8

  然后從中拿出一張牌,告訴A這張牌的大小,告訴了B這張牌的花色;

  A:我不知道這張是什么牌

  B:我就知道你肯定不知道這張是什么牌

  A:現在我知道

  B:現在我也知道了

  請問這張是什么牌?

  答:方塊8

  (2)有11個乒乓球,其中有一個球是偽劣產品并存在質量較輕的問題,現有一個沒有砝碼的天,只能稱3次把那個假貨給稱出來。

  答:

  第一次,天兩端各放5個乒乓球,如果天衡,那么剩下的那個就是偽劣產品。

  如果不衡,則將天較輕那端的5個乒乓球選出來,然后在天兩端各放2個乒乓球,如果天衡,那么剩下的那個就是偽劣產品。否則,將天較輕那端的2個乒乓球選出來,放在天上重新測量,天較輕端的那個乒乓球就是偽劣產品。

  (3)說明指針與引用的區別。

  答:●指針是一個實體,而引用僅是個別名;

  ●引用只能在定義時被初始化一次,之后不可變;指針可變;引用“從一而終”,指針可以“見異思遷”;

  ●引用沒有const,指針有const,const的指針不可變;

  ●引用不能為空,指針可以為空;

  ●“sizeof 引用”得到的是所指向的變量(對象)的大小,而“sizeof 指針”得到的是指針本身的大小;

  ●指針和引用的自增(++)運算意義不一樣;

  ●引用是類型安全的,而指針不是 (引用比指針多了類型檢查

  從內存分配上看:程序為指針變量分配內存區域,而引用不分配內存區域。指針:指向另一個內存空間的變量,我們可以通過它來索引另一個內存空間的內容,本身有自己的內存空間。

  (4)列出C++類型轉換操作符,并分別舉例。

  dynamic_cast: 在多態類型轉換時使用,用來執行繼承體系中"安全的向下轉型或跨系轉型動作",就是子類對象指針轉化為父類對象指針。實現在運行時,并進行運行時檢測,如果轉換失敗,返回值是NULL。

  static_cast:與dynamic_cast相反,static_cast是在編譯時轉換類型的,故稱為static_cast,它可以用在值類型轉換中

  const_cast:一般用于去除const, volatile等修飾屬性上.

  reinterPt_cast:特意用于底層的強制轉型,這個操作符能夠在非相關的類型之間轉換。操作結果只是簡單的從一個指針到別的指針的值的二進制拷貝。在類型之間指向的內容不做任何類型的檢查和轉換。

  (5)寫個簡單的函數,用于判斷CPU的字節序(little endian/big endian)

  [cpp] view plaincopy//若處理器是Big_endian的,則返回0;若是Little_endian的,則返回1。

  int checkCPU(void)

  {

  union

  {

  int a;

  char b;

  }c;

  c.a = 1;

  return (c.b == 1);

  }

  (6)實現一個128位整數的類,并且完成后面的函數,測試一個數是否為素數。

  class int128

  {

  };

  bool isPrime(int128 & number)

  {

  ...

  }

  答:

  [cpp] view plaincopy#include

  #include

  #include

  #include

  #include

  using namespace std;

  class int128;

  void shift(int128 & in,deque & de);

  template

  bool operator<(bitset const& b1,bitset const& b2)

  {

  int i=N;

  while( i-- && b1[i]==b2[i] ) { }

  return ((-1 == i) ? false : (b1[i]

  }

  class int128

  {

  bitset<128> number;

  public:

  explicit int128(string str):number(str){}

  int128(bitset<128>const& b):number(b){}

  int128(int a = 0 , int b = 0 , int c = 0 , int d = 0)

  {

  bitset<32> b1(a),b2(b),b3(c),b4(d);

  int i, k = 128;

  for(i = 32 ; i ; number[--k] = b1[--i]) { }

  for(i = 32 ; i ; number[--k] = b2[--i]) { }

  for(i = 32 ; i ; number[--k] = b3[--i]) { }

  for(i = 32 ; i ; number[--k] = b4[--i]) { }

  }

  bool operator[](size_t i)const

  {

  return number[i];

  }

  bitset<128>::reference operator[](size_t i)

  {

  return number[i];

  }

  friend bool operator<(int128 const& i1,int128 const& i2)

  {

  return i1.number < i2.number;

  }

  friend int128 operator+(int128 const& i1,int128 const& i2)

  {

  if(i1 == 0)

  return i2;

  if(i2 == 0)

  return i1;

  int128 result;

  bitset<2> sum;

  for(int i = 0 ; i < 128 ; ++i)

  {

  sum=i1[i]+i2[i]+sum.to_ulong();

  result[i]=sum[0];

  sum>>=1;

  }

  return result;

  }

  friend int128 operator-(int128 const& i1,int128 const& i2)

  {

  if(i2==0)

  return i1;

  int128 result=i1;

  for(int i = 0 ; i < 128 ; ++i)

  {

  if(i2[i] == 0) {}

  else

  {

  if(result[i] == 1)

  result[i] = 0;

  else

  {

  int k = i;

  while(k < 128 && result[k] == 0)

  {

  result[k] = 1;

  ++k;

  }

  if(k != 128)

  result[k] = 0;

  }

  }

  }

  return result;

  }

  friend int128 operator*(int128 const& i1,int128 const& i2)

  {

  if(i1==0 || i2==0)

  return int128();

  if(i1==1)

  return i2;

  if(i2==1)

  return i1;

  int128 acc=int128();

  for(int i=0;i<128;++i)

  {

  if(i2[i]==1)

  {

  acc=acc+(i1<

  }

  }

  return acc;

  }

  friend int128 operator/(int128 const& i1,int128 const& i2)

  {

  if(i1 < i2)

  return int128();

  deque de;

  bool flag = 0;

  for(int i = 127 ; i >= 0 ; --i)

  {

  if(flag == 0 && i1[i] == 0) {}

  else

  {

  flag = 1;

  de.push_back(i1[i]);

  }

  }

  int128 span = int128();

  int128 result = int128();

  while(!de.empty())

  {

  shift(span,de);

  if(span < i2)

  {

  result = result<<1;

  }

  else

  {

  result = (result<<1) + int128(0,0,0,1);

  span = span - i2;

  }

  }

  return result;

  }

  friend int128 operator%(int128 const& i1,int128 const& i2)

  {

  if(i1 < i2)

  return i1;

  deque de;

  bool flag = 0;

  for(int i = 127 ; i >= 0 ; --i)

  {

  if(flag == 0 && i1[i] == 0) {}

  else

  {

  flag = 1;

  de.push_back(i1[i]);

  }

  }

  int128 span = int128();

  int128 result = int128();

  while(!de.empty())

  {

  shift(span,de);

  if(span < i2)

  {

  result = result<<1;

  }

  else

  {

  result = (result<<1) + int128(0,0,0,1);

  span = span - i2;

  }

  }

  return span;

  }

  friend bool operator==(int128 const& i,int const k)

  {

  bitset<32> bb(k);

  for(int g = 0 ; g < 32 ; ++g)

  {

  if(i[g] != bb[g])

  return 0;

  }

  return 1;

  }

  void operator=(bitset<128>const& b)

  {

  number = b;

  }

  friend ostream& operator<<(ostream& o,int128 const& i)

  {

  o<

  return o;

  }

  int128 operator<<(size_t step)const

  {

  return int128(number<

  }

  unsigned long to_ulong()const

  {

  return *((unsigned long*)&number);

  }

  public:

  bool ToDecimalStr(std::string &str)

  {

  str.clear();

  char buf[128] = {0};

  int128 Radix(0, 0, 0, 10);

  for(int128 num = number; !(num == 0); num = num/Radix)

  {

  if( sprintf_s(buf, 64, "%d", ((int)(num%Radix).to_ulong())) < 0 )

  {

  return false;

  }

  str = buf + str;

  }

  return true;

  }

  static void Print(int128 & data, bool bEndl = true)

  {

  string str;

  if( data.ToDecimalStr(str) )

  {

  printf("%s%s", str.c_str(), (bEndl?"\n":""));

  }

  }

  };

  static int128 const one = int128(0,0,0,1);

  template

  void add_one(bitset& b)

  {

  int i = 0;

  while(i < N && b[i] == 1)

  {

  b[i] = 0;

  ++i;

  }

  if(i == N)

  return;

  b[i] = 1;

  }

  void add_one(int128& k)

  {

  int i = 0;

  while(i < 128 && k[i] == 1)

  {

  k[i] = 0;

  ++i;

  }

  if(i == 128)

  return;

  k[i] = 1;

  }

  void shift(int128 & in,deque & de)

  {

  if(de.front()==1)

  {

  de.pop_front();

  in=(in<<1)+one;

  }

  else

  {

  de.pop_front();

  in=in<<1;

  }

  }

  bool IsPrime(int128 const& number)

  {

  for(int128 i = int128(0,0,0,2) ; i < number ; add_one(i))

  {

  if(number%i == 0)

  return 0;

  }

  return 1;

  }

  (7)對二叉樹進行排序,排序后的結果為二叉排序樹。

  二叉排序樹又稱二叉查找樹,它或者是一棵空樹,或者是具有下列性質的二叉樹:(1)若左子樹不空,則左子樹上所有結點的值均小于它的根結點的值;(2)若右子樹不空,則右子樹上所有結點的值均大于它的根結點的值;(3)左、右子樹也分別為二叉排序樹;

  struct STreeNode

  {

  int key;

  STreeNode* left_child;

  STreeNode* right_child;

  };

  //返回值為排序后的根節點

  STreeNode* bt2bst(STreeNode* root_node)

  {

  }

  [cpp] view plaincopystruct STreeNode

  {

  int key;

  STreeNode* left_child;

  STreeNode* right_child;

  };

  void InsertBST(STreeNode* t , int key)

  {

  if(NULL == t)

  {

  t = new STreeNode;

  t->left_child = t->right_child = NULL;

  t->key = key;

  return;

  }

  if(key < t->key)

  InsertBST(t->left_child , key);

  else

  InsertBST(t->right_child , key );

  }

  //先序遍歷樹并插入建立排序樹

  void PreOrder(STreeNode* t , STreeNode* tBST)

  {

  if(NULL != t)

  {

  InsertBST(tBST , t->key);

  PreOrder(t->left_child , tBST);

  PreOrder(t->right_child , tBST);

  }

  }

  //目標函數

  STreeNode* bt2bst(STreeNode* root_node)

  {

  STreeNode* bstTreeRoot = NULL;

  PreOrder(root_node , bstTreeRoot);

  return bstTreeRoot;

  }

  二、擴展題

  (1)列出幾種你了解的IPC機制。

  答:共享內存:是一片指定的物理內存區域,這個區域通常是在存放正常程序數據區域的外面, 它允許兩個或多個進程共享一給定的存儲區,是針對其他通信機制運行效率較低而設計的。使得多個進程可以訪問同一塊內存空間,是最快的可用IPC形式。往往與其它通信機制,如信號量結合使用,來達到進程間的同步及互斥。

  信號量(semaphore):主要作為進程間以及同一進程不同線程之間的同步手段。

  套接口(Socket):更為一般的進程間通信機制,可用于不同機器之間的進程間通信。起初是由Unix系統的BSD分支開發出來的,但現在一般可以移植到其它類Unix系統上。

  消息隊列(MessageQueue)是一個結構化的排序內存段表,這個隊列是進程存放或檢索數據的地方,是一個消息的鏈表,可以被多個進程所共享。

  (2)列舉一種死鎖發生的場景,并給出解決方案。

  答:最經典的場景就是生產者/消費者,生產者線程生產物品,然后將物品放置在一個空緩沖區中供消費者線程消費。消費者線程從緩沖區中獲得物品,然后釋放緩沖區。由于生產者/消費者都在操作緩沖區,容易導致死鎖的發生。

  可以通過添加鎖的保護來對緩沖區進行互斥的訪問,保證某一時刻只有一個線程對緩沖區進行操作,當緩沖區滿的時候,生產者線程就會掛起,同時通知消費者線程。而緩沖區空的時候,消費者線程就會掛起,同時通知生產者線程。

  (3)列舉編寫一個TCP的服務器端程序可能需要用到的socket API,如果這些API的調用有先后關系,請按先后關系列出。

  (4)舉例說明什么是MVC。

  答:MVC是一個設計模式,它強制性的使應用程序的輸入、處理和輸出分開。使用MVC應用程序被分成三個核心部件:模型、視圖、控制器。它們各自處理自己的任務。

  視圖是用戶看到并與之交互的界面。對老式的Web應用程序來說,視圖就是由HTML元素組成的界面,在新式的Web應用程序中,HTML依舊在視圖中扮演著重要的角色,作為視圖來講,它只是作為一種輸出數據并允許用戶操縱的方式。

  模型表示企業數據和業務規則。在MVC的三個部件中,模型擁有最多的處理任務。由于應用于模型的代碼只需寫一次就可以被多個視圖重用,所以減少了代碼的重復性。

  控制器接受用戶的輸入并調用模型和視圖去完成用戶的需求。所以當單擊Web頁面中的超鏈接和發送HTML表單時,控制器本身不輸出任何東西和做任何處理。它只是接收請求并決定調用哪個模型構件去處理請求,然后用確定用哪個視圖來顯示模型處理返回的數據。 更多熱門筆試題目分享:
軟通動力C語言筆試題目
阿爾卡特朗訊射頻類筆試題
惠普java和數據庫招聘筆試題

  • 相關文章
  • 迅雷筆試真題迅雷筆試真題

    相關知識點:什么函數不能聲明為虛函數? 一個類中將所有的成員函數都盡可能地設置為虛函數總是有益的。 設置虛函數須注意: 1:只有類的成員函數才能說明..

    2024-05-26 23:46:57
  • 迅雷筆試真題迅雷筆試真題

    溫馨提示:迅雷考的客觀題和主觀題得分都要超過一定標準,才能獲得面試資格,如果一項得分很高,而另外一項得分很低,可能無法獲得面試資格。一、單選題(20題,..

    2024-05-26 23:46:57
  • 淘寶校園招聘筆試題和面試題答案目淘寶校園招聘筆試題和面試題答案目

    三、綜合題 1、有一顆結構如下的樹,對其做鏡像反轉后如下,請寫出能實現該功能的代碼。注意:請勿對該樹做任何假設,它不一定是衡樹,也不一定有序。 1..

    2024-05-21 16:34:21
  • 迅雷筆試真題迅雷筆試真題

    相關知識點:什么函數不能聲明為虛函數? 一個類中將所有的成員函數都盡可能地設置為虛函數總是有益的。 設置虛函數須注意: 1:只有類的成員函數才能說明..

    2024-05-26 23:46:57
  • 迅雷筆試真題迅雷筆試真題

    溫馨提示:迅雷考的客觀題和主觀題得分都要超過一定標準,才能獲得面試資格,如果一項得分很高,而另外一項得分很低,可能無法獲得面試資格。一、單選題(20題,..

    2024-05-26 23:46:57
  • 淘寶校園招聘筆試題和面試題答案目淘寶校園招聘筆試題和面試題答案目

    三、綜合題 1、有一顆結構如下的樹,對其做鏡像反轉后如下,請寫出能實現該功能的代碼。注意:請勿對該樹做任何假設,它不一定是衡樹,也不一定有序。 1..

    2024-05-21 16:34:21
  • 河北新聞網兩學一做知識競賽(試題+答案完整版)河北新聞網兩學一做知識競賽(試題+答案完整版)

    2016河北新聞網兩學一做知識競賽開賽啦,快來圍觀吧。活動內容為推動“兩學一做”學習教育深入開展,省委宣傳部、省委組織部組織開展“兩學一做”知識競賽活動,河北?.

    2024-06-04 02:17:24
  • 河北新聞網兩學一做知識競賽活動試題答案河北新聞網兩學一做知識競賽活動試題答案

    2016年河北新聞網兩學一做知識競賽活動試題答案為推動“兩學一做”學習教育深入開展,省委宣傳部、省委組織部組織開展“兩學一做”大型知識競賽。此項活動由河北新聞?.

    2024-06-06 02:19:48
  • 2025年兩學一做學習教育知識競賽活動10篇2025年兩學一做學習教育知識競賽活動10篇

    為隆重紀念中國共產黨建黨95周年,推進我市“兩學一做”學習教育深入開展,推動廣大黨員干部認真學好黨章黨規和*系列重要講話,現將“兩學一做”學習教育知識競賽題予..

    2024-05-31 08:40:33
  • 開展兩學一做學習教育知識競賽活動真題答案開展兩學一做學習教育知識競賽活動真題答案

    144.根據《中國共產黨紀律處分條例》規定,黨的各級代表大會的代表受到(D)處分的,黨組織應當終止其代表資格。A.警告(含)以上B.嚴重警告(含)以上C.撤銷黨內職務(含)以..

    2024-05-27 03:14:20
主站蜘蛛池模板: 拉丝模|高晶异形拉丝模|联合拉拔机模具|钼丝拉丝模|金刚石纳米涂层模|焊丝拉丝模|钨钢拉丝模|聚晶拉丝模_河北恩泰利嘉金属制品有限公司 | 苏州不锈钢_江苏不锈钢_江苏不锈钢板_苏州模具钢_苏州合金钢_苏州特种合金_苏州不锈钢板_304不锈钢棒_苏州塞硒五金制品有限公司 苏州ERP定制|苏州CRM|苏州OA|苏州BPM|进销存管理系统-苏州中尚信息科技有限公司 | 食用油灌装机-油类食用油灌装设备-液体灌装机_青州市惠联灌装机械 | 宁波雷豹机电科技有限公司|雷豹冷风机|雷豹工业大风扇|MFC18000|MFC16000|MFC6000|EF3622|EF4222|EF4822|移动工业蒸发式冷风机空气冷却器|大型工业空调扇|雷豹移动式工业大风扇|雷豹大风扇|生产厂家|公司官网 | 铝合金锻造|链轮曲柄-同力铝业股份有限公司 | 起点养生网-分享科学养生保健知识,中医健康养生之道-无锡据风网络科技有限公司 | 济南东唐包装制品有限公司 | 河南反渗透设备,河南纯净水设备,河南软化水设备,郑州EDI超纯水设备,郑州水处理设备厂家_河南江宇环保科技有限公司 | 上海律师_上海法律咨询_律师在线咨询网站_上海律师事务所-沪律网 | 深圳汽车贴膜_深圳全车车身改色贴膜|UPPF隐形车衣官网 | 浙江云野科技有限公司_智慧旅游规划_智慧景区管理系统_全域旅游解决方案-云野科技旅游大数据管理平台 | 天津止回阀-止回阀报价/哪家好-天津蝶阀/进口阀门/通风蝶阀批发-闸阀阀门/球阀生产厂家-天津凯维斯阀门制造 | 消防服_防化服_灭火防护服_消防装备生产厂家-泰州市华通消防装备厂有限公司 | 厦门公司注册-提供工商登记记账代理服务和营业执照代办地址与注册流程及费用 | 智能锁十大品牌_指纹锁_智能锁加盟_开换锁-锁当家【官网】 | 武汉牛凸科技有限公司 | 医疗器械招标网—打造医械厂家专业服务平台 | 润东方环保空调厂家-水冷式空调价格-润东方水冷空调-东莞市科骏机电设备有限公司 | 上海松韬自动化设备有限公司,致力于高压清洗及工业自动化制造 | 金酱酒_金酱酒代理加盟招商_OEM贴牌企业定制! – 金酱酒代理加盟!茅台镇较早的酿酒烧坊,年产优质酱香白酒5000余吨,仁怀市十强白酒企业,主营主品:金酱酒、金酱陈香酒、酱香老酒等系列品牌产品 | 浙江三龙通用机械有限公司 圆丝机,拉丝机,复合机 | 厦门电脑维修_上门维修电脑_笔记本电脑维修_办公设备维修 - 耐诚 | 企业资质代办-代理全国工商注册公司_公司转让_增值电信业务许可证新办续期-大通天成科技[gw] | 云德律师事务所_全国律师服务咨询服务企业 | 济南排队机,济南触摸屏一体机,济南拼接屏广告机厂家,汇通视控 | 全自动清洗过滤器_网式盘式过滤器_石英砂过滤器_叠片过滤器-湖南多灵过滤系统科技有限公司 | 托普云农-数字农业综合服务商-官方网站 | 涂塑复合钢管,大口径涂塑钢管,内外涂塑钢管厂家-沧州友诚管业有限公司 | 品牌策划-品牌设计-济南之式传媒广告有限公司官网-提供品牌整合丨影视创意丨公关活动丨数字营销丨自媒体运营丨数字营销 | 扭力扳手_扭力扳手检定仪_数显扭力扳手_扭力测试仪_测力计_推拉力计_拉力测试仪_测试台架-上海实干实业有限公司 | 塑料模具公司,塑料包装桶厂家,PET打包带厂家,缠绕膜厂家-新疆福吉亚工贸有限公司 | 天津韬艺科技有限公司,天津网站建设公司,天津网站设计公司,品牌网站策划公司 | 网站建设|营销型网站|独立站搭建|外贸网站建设|wordpress独立站|小程序开发-?无双建站? | 江西蔬菜配送,南昌蔬菜配送,南昌食堂承包,江西饭堂承包-江西菜篮子农产品发展有限公司 | 唐山搬家公司-搬家公司电话价格-四通搬家| 河北太尚园林-太尚雕塑厂家_石雕_不锈钢雕塑厂家_铸铜雕塑_雕塑设计定制 | 陕西筱润智能科技有限公司 干部人事智能档案柜 智能密集架 智能档案柜 部队选层文件智能柜 智能枪弹柜 财务智能档案柜 边防武警智能密集架 医院智能档案柜 部队选层文件智能柜智能枪弹柜 学校医院文件柜 企事业单位公检法智能文件柜 生产厂家-筱润智能科技有限公司 RFID射频智能密集架 全自动智能选层档案柜 智能密保柜 枪柜部队营房营具床桌椅办公家具 办公用品档案盒设备货架 全自动智能选层柜生产厂家-筱润智能科技有限公司 | 内蒙古慧申设计顾问有限公司-官网 | 吸管包装机_塑料杯包装机_纸杯包装机_吸管挤出机_温州恩博机械有限公司 | 四方光电(武汉)仪器有限公司_四方仪器首页-烟气分析仪|尾气分析仪|煤气分析仪|沼气分析仪|天然气分析仪|超声波流量计|在线气体分析系统|红外气体传感器 | 浙江中拓教育设备有限公司|