一、筆試介紹
奇安信是一家安全科技公司,為全球客戶提供成功的網路和終端安全解決方案。奇安信筆試是奇安信公司用於招聘全職工程師的一種方式。
筆試主要測試面向對象編程、演算法設計和數據結構等方面的知識。筆試分為選擇題和編程題兩部分。
選擇題包括計算機基礎、計算機網路、資料庫、操作系統、數據結構和演算法設計等方面,共50道題,答題時間為1小時。
編程題主要考察候選人的演算法設計和編寫能力。編程題的難度較高,需要候選人具備紮實的演算法和編程基礎。需要在約2小時內完成一道演算法題。
二、選擇題
選擇題目的難度較為適中,因此考察了解的範圍比較廣,包括計算機基礎、計算機網路、資料庫、操作系統、數據結構和演算法設計等方面。這裡以操作系統為例,介紹一下其中的一道選擇題。
#include <stdio.h> #include <stdlib.h> int main(void) { char* a; char* b = "qi" "an" "xin"; a = malloc(sizeof(b)); a = b; printf("%s\n", a); return 0; }
運行以上程序,輸出的結果為:
qianxin
該程序的正確選項是:
A. 輸出結果為”qi” “an” “xin”。
B. 輸出結果為”qianxin”。
C. 輸出結果為”qi an xin”。
D. 程序編譯會出錯。
正確答案是B。此題考查了對C語言中指針和數組的理解。程序中a = b會導致原來的malloc分配的內存泄露。正確的寫法應該是使用strcpy函數複製字元串。
三、編程題
奇安信的編程題難度較高,需要候選人掌握高級數據結構、演算法和操作系統等知識。這裡以一道動態規劃問題為例來介紹。
題目描述:
給定一個數組,求該數組中的最長上升子序列的長度。
輸入格式:
第一行輸入一個整數n,表示數組的大小,接下來一行輸入n個整數表示該數組。
輸出格式:
輸出一個整數,表示該數組中的最長上升子序列的長度。
樣例輸入:
7 1 2 3 4 5 6 7
樣例輸出:
7
#include <stdio.h> #include <stdlib.h> int main() { int n, i, j, ans = 1; scanf("%d", &n); int arr[n], dp[n]; for (i = 0; i < n; i++) { scanf("%d", &arr[i]); dp[i] = 1; } for (i = 0; i < n; i++) { for (j = 0; j < i; j++) { if (arr[j] dp[j] + 1 ? dp[i] : dp[j] + 1; } ans = ans > dp[i] ? ans : dp[i]; } printf("%d\n", ans); return 0; }
以上代碼是正確的答案。該題考查了動態規劃的思想。通過dp[i]保存以arr[i]為結尾的最長上升子序列長度,再將最大值輸出即為最長上升子序列長度。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/311379.html