שחזורי ראיונות עבודה -> מישהו היה היום במבחנים של צ'ק פוינט??
1 2
  • מישהו היה היום במבחנים של צ'ק פוינט??
  • ע"י: 1_אורח_כללי
    מישהו יודע מה שואלים בראיון לצ'קפוינט לתפקיד מתכנת? כבר הייתי בפגישה ראשונה שכללה מבחן על מחשב, וזימנו אותי לראיון טכני.
  • ע"י: 1_אורח_כללי
    התראיינתי למשרת מפתח UI ב C++ ויחד איתי ביום הגיוס היו עוד איזה 40 איש חלק למשרת ה UI וחלק לUNIX KERNEL את אלא שנבחנו ל KERNEL שאלו את השאלה שכולם כתבו פה עם הפרוטוקול תקשורת שאני לא חושב שמישהו הצליח לעשות שם (דיברתי עם הרבה אנשים אחרי המבחן). את המבחן למשרת ה UI נתנו לנו לעצב מסכים לתוכנה שתהיה TASK MANAGER למשימות יומיומיות כמו ב"אוטלוק" ב VISUAL STUDIO 2003 רק את המסכים בלי הקוד, בנוסף הם ביקשו שנכתוב מדריך למשתמש באנגלית איך להשתמש בתוכנה ומה מייצג כל מסך שעיצבנו. עיצבתי משהו נחמד שחשבתי שהוא מאוד יפה ונוח אחרי שיומיים קראתי על עיצוב תוכנה ו-GUI. היה מבחן נוסף של שליטה ב UNIX וב-VMWARE וטיפה תיכנות ב C וסקריפטים, היה צריך לפתוח תקשורת בין 2 מחשבים דרך VMWARE ולעשות פעולות בסיסיות שמוסברות במבחן כמו פינגים ועריכת קבצי C, רצוי לחזור על פקודות UNIX לפני המבחן. פה הפצצתי כי אחרי כל תרגיל המערכת "מודיעה" אם הצלחת או לא.. אז בוודאות היה מושלם. אחרי שבועיים הודיעו לי שלא התקבלתי למשרת ה UI כי הם מראיינים את כל העולם עד שימצאו מישהו מושלם. ויום אחרי זה התקשרו שוב לזמן אותי לראיון תיכנות ב-C אמרתי להם שאני מוותר מראש כי השיטת גיוס שלהם מפגרת ואני לא הולך להתחרות בכל המתכנתים בארץ בשביל ג'וב שמשלמים בו פחות מ-8.
  • ע"י: 1_אורח_כללי
    מישהו התראיין לאחרונה בצ'ק פוינט? מה הם שואלים עכשיו?
  • ע"י: 1_אורח_כללי
    מה שאלו בראיון השני? כמה זמן הוא ארך? מה כדאי ללמוד לקראתו?
  • ע"י: 1_אורח_כללי
    אפשר ועוד איך לממש את זה ב 4 שעות ומבלי לפתור את זה בבית, לקח לי בדיוק ארבע שעות וזה אחרי שלא נגעתי ב C שנתיים, וזה עעבד מצויין והזמינו אותי לראיון שני שלא הלך טוב יש אנשים שעשו את זה ב3 שעות ופחות
  • ע"י: 1_אורח_כללי
    אה שכחתי לציין: שאלו אותי את השאלה הזו כשהתראיינתי במאי 2008 אין מצב לממש את זה ב3 וחצי שעות! גם לא ב5 לקח לי יותר מחצי יום - בתנאים האידיאליים של הבית - וזה אחרי שקראתי את השאלה בערב לפני ו"ישנתי עליה" הם רצו שזה גם יעבוד, לא רק לראות שאני בכיוון.... הם מחפשים מתכנתים עם קרניים
  • ע"י: 1_אורח_כללי
    here is the solution: enjoy :) // stateMachine.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <string.h> # 1 define VALID #define INVALID 0 #define D_A 0 #define D_B 1 #define ARR_SIZE 25 typedef struct{ char cmdArr; bool AorB; }cmd_s; typedef struct{ char cmdArr; int size; }cmd3_s; /* Global Variables */ cmd_s Cmd; cmd3_s Cmd3; void fillArr(char destArr, const char sourceArr, const int size) { memset(destArr, 0, ARR_SIZE); memcpy(destArr, sourceArr, size); } bool isCmd(const char * cmd_t, const int size) { if(strncmp(Cmd.cmdArr, cmd_t, size) == 0) { return 1; } return 0; } int checkCmd(bool drction, char * cmd_t, int size, int *statePtr, int dest_state) { if(Cmd.AorB == drction ) { if(isCmd(cmd_t, size)) { *statePtr = dest_state; return VALID; } } *statePtr = 1; return INVALID; } void saveCmd3(const char sourceArr, const int size) { fillArr(Cmd3.cmdArr, sourceArr, size); Cmd3.size = size - 1; //don't count the '/0' } int checkState3(int *statePtr) { int status = (checkCmd(D_A, "LIST", sizeof("LIST"), statePtr, 4)); saveCmd3("LIST", sizeof("LIST")); // other possible commands ... if(status == INVALID) { status = (checkCmd(D_A, "EXIT ", sizeof("EXIT "), statePtr, 5)); } return status; } int getCmdLen() { int i=0; int cnt=0; for(i=0; i<ARR_SIZE; i++) { if(Cmd.cmdArr != '\0') cnt++; } return cnt; } int checkCh(char ch) { if((ch >='a') && (ch <='z')) return VALID; if((ch >='0') && (ch <='9')) return VALID; return INVALID; } int checkState4(int *statePtr) { int cmdSize = getCmdLen(); int cmd3Sise = Cmd3.size; int SecondIdx = cmdSize - cmd3Sise; int i; *statePtr = 1; if(cmdSize < cmd3Sise*2 + 2) return INVALID; if(strncmp(&Cmd.cmdArr, Cmd3.cmdArr, cmd3Sise) != 0) return INVALID; if(strncmp(&Cmd.cmdArr, Cmd3.cmdArr, cmd3Sise) != 0) return INVALID; // check the msg for(i = cmd3Sise+1; i<= SecondIdx-2 ; i++ ) { if(checkCh(Cmd.cmdArr) == INVALID) return INVALID; } *statePtr = 3; return VALID; } int handleCmd() { static int stat_state = 1; switch(stat_state) { case 1: return (checkCmd(D_A, "OPEN_CONNECTION", sizeof("OPEN_CONNECTION"), &stat_state, 2)); case 2: return (checkCmd(D_B, "OPEN_CONNECTION_ACKED", sizeof("OPEN_CONNECTION_ACKED"), &stat_state, 3)); case 3:return (checkState3(&stat_state)); case 4:return (checkState4(&stat_state)); case 5: return (checkCmd(D_B, "EXIT_ACKED", sizeof("EXIT_ACKED"), &stat_state, 1)); default: return INVALID; } } int _tmain(int argc, _TCHAR* argv) { // init memset(&Cmd, 0, sizeof(Cmd) ); memset(&Cmd3, 0, sizeof(Cmd3)); Cmd.AorB = D_A; fillArr(Cmd.cmdArr, "OPEN_CONNECTION", sizeof("OPEN_CONNECTION")); handleCmd(); Cmd.AorB = D_B; fillArr(Cmd.cmdArr, "OPEN_CONNECTION_ACKED", sizeof("OPEN_CONNECTION_ACKED")); handleCmd(); Cmd.AorB = D_A; fillArr(Cmd.cmdArr, "LIST", sizeof("LIST")); handleCmd(); Cmd.AorB = D_B; fillArr(Cmd.cmdArr, "LIST 6575 LIST", sizeof("LIST 6575 LIST")); handleCmd(); return 0; }
  • ע"י: 1_אורח_כללי
    שלום רב , האם מישהו הצליח לפתור את השאלה הנתונה על התעבורה בין 2 מחשבים ??? אני לא הצלחתי , אשמח אם מישהו יוכל לעזור לי ... אני שואך לגבי משרת פיתוח בשפת C
  • ע"י: 1_אורח_כללי
    מה חושבים עובדי צ'ק פוינט על מקום העבודה שלהם? http://www.theworker.co.il/showRanks.php?companyId=6
  • ע"י: admin
    Checkpoint: (משרת פיתוח בשפת C) התבקשנו לתכנן מערכת המדמה מכונת מצבים אשר מצביה והקלטים האפשריים בה מוגדרים במסמך מסודר (באנגלית). בגדול ישנה פונקציה הטעונה השלמה ותפקידה הוא לקבל מסר העובר בין שני מחשבים א' ו-ב'. המסר מגיע כמצביע למבנה ויש לנתח את תוכנו ולהחליט האם המסר חוקי ולעבור למצב הבא (עפ"י הטבלה) או שנפלה טעות והמסר אינו חוקי - במקרה זה יש לחזור למצב ההתחלתי. כל מסר כזה מורכב משני חלקים: כיוון המסר (א' ל-ב' או ב' ל-א') ותוכן המסר כמחרוזת. ישנם 5 מצבים למכונה כאשר הראשון הוא ההתחלתי; המעברים בין המצבים הראשון לשני ומהשני לשלישי הם די קלים - יש לוודא כי המסר בכיוון מסויים נתון והמחרוזת היא מחרוזת מסויימת נתונה. במצב השלישי ניתן לקבל במחרוזת רק אחת מבין תשע מחרוזות מוגדרות מראש ורק במידה והמחרוזת היא אחת מהן עוברים למצב הרביעי (אחרת, חוזרים למצב ההתחלתי). במצב הרביעי מקבלים מחרוזת אשר אמורה להיות במבנה הבא: מחרוזת מקושקשת של אותיות קטנות וספרות אותה מקיפות שתי מילים - אחת מכל צד. המילים האלה הן למעשה הפקודה שניתנה במעבר ממצב שלישי לרביעי. נניח ובמצב השלישי התקבלה הפקודה החוקית: "LIST". אזי במצב הרביעי ניתן לקבל מחרוזת מהצורה: "LIST asdb32b2d76d LIST" בלבד. במחרוזת המתקבלת במצב הרביעי חייבים להיות שני רווחים בדיוק והמילה האמצעית אמורה לענות על ביטוי רגולרי פשוט. שאר המעברים הם טריוויאלים. מקבלים קבצי פרוייקט בסביבת ויז'ואל סטודיו והכתיבה היא בשפת C בלבד; הזמן המוקצב למבחן הוא כשלוש וחצי שעות בסופן עוברים הנבחן והבודק על הקוד יחד. ישנה תוכנית בדיקה מצורפת אשר באמצעותה ניתן להריץ מאות אלפי טסטים הבודקים את התוכנית - יש לעבור את כולם לפני ההגשה. דגשים: * למרות הפיתוי לא כדאי לכתוב את כל המימוש כמשפט switch אחד גדול... זה לא רציני ולא מודולרי. * הפתרון שלי יצר טבלת מצבים קבועה אשר כל כניסה בה היא מס' המצב הנוכחי וכל כניסה בה היא הנתונים שאני מצפה לקבל במצב הנוכחי. המצב השלישי והרביעי מצריכים בדיקות ספציפיות נוספות מעבר לבדיקות הרגילות (ישנו מגוון שלם של קלטים אפשריים שם). * צ'קפוינט היא חברה שאבטחה הוא שם המשחק אצלה: לא להשתמש בפונקציות כמו sscanf, gets, strcpy, strcmp אלא במקבילותיהן הבטוחות: strncpy, strncmp וכו'. * המשרה מכוונת עבור פיתוח קרנל בשפת C אי לכך הקצאת זכרון מופרזת לא באה בחשבון (לא כדאי להגדיר באפר בגודל 4096, למשל) ומינימליזציה תוערך בהתאם: כמה שפחות הקצאות על המחסנית (באופן אישי לא יצא לי להגדיר אפילו משתנה אחד על הערימה), כמה שיותר מחזור נתונים קיימים וכדו'. * כאמור, סביבת העבודה היא ויז'ואל סטודיו וניתן להעזר באינטרנט בכל שלב. * סנדוויצ'ים מגיעים בשעת ארוחת הצהריים. בנוסף למבחן התכנותי נוסף מבחן אשר בא לבדוק התמודדות עם נושאים חדשים ולמידה עצמית: המבחן השני קצר יותר ומכיל דף הוראות לביצוע מטלות שונות ע"ג שתי מכונות וירטואליות על המחשב. שתי המכונות מריצות לינוקס ויש לבצע בהן פעולות בסיסיות כמו גילוי כתובת הרשת, הפעלת שרת FTP וכו'. בתרגיל אמורים להוריד קובץ אחד מכווץ המכיל קוד מקור מסויים ממכונה אחת לשניה באמצעות שירות FTP, פתיחת הקובץ, וקימפול הקוד. ישנן עוד מטלות שונות אך אלה הן העיקריות. כל השלבים מפורטים בדף ההוראות אך בעלי ידע מוקדם בלינוקס יהנו מיתרון ברור.
  • ע"י: פוני
    מישהו יכול לפרסם פתרון ?
  • ע"י: לוימור
    נראה מוכר...
  • ע"י: 1_אורח_כללי
    הכוונה בראיון האישי, תודה.
  • ע"י: 1_אורח_כללי
    ולא פחות חשוב... מה שאלו אותך בדיוק (גם בערך יהיה טוב)...?
  • ע"י: 1_אורח_כללי
    אצל מי התראיינת ?
  • ע"י: 1_אורח_כללי
    בדיוק כך!!! אחרי שעברתי את המבחן המעשי נתנו לי מבחן עם 40 שאלות אמריקאיות כאשר הגעתי הביתה כבר התקשרו אלי להגיע לראיון עם ראש הצוות הגעתי לראיון עניתי על השאלות אבל קיבלתי תשובה שלילית תקשיבו טוב למשרה הזאת מראיינים חצי מדינה ולא מגייסים אף אחד!!!
  • ע"י: 1_אורח_כללי
    מה שרשמת אכן נכון. גם אני הייתי מועמד למשרה ועברתי מבחנים של 10 שעות ולאחר מכן זימנו אותי לראיון נוסף של 3 שעות. המטירו עליי מלא שאלות כשבאחת מהן המראיין טעה בעצמו בפתרון - ממש מגוחך - אני לא יודע אם זה בזבוז זמן אבל זה בהחלט מגוחך לזמן אנשים כבר 3 חודשים. ביג דיל בסך הכול להיות עוד בורג בשוק העבדים הזה. בכל אופן שיהיה בהצלחה.
  • ע"י: 1_אורח_כללי
    לממש פרוטוקול ולידאציה ע"י ממוש פונקציה שמקבלת STRUCT ובוא טקסט text וכיוון השליחה A ל B או ולהחזיר האם ההודעה היא VALID או INVALID לפי ה FINAL STATE MACHINE הבא : מצב1 : אם הכיוון הוא A ל B ו ההודעה היא OPEN_CONECTION עבור למצב 2 (וכמובן החזר VALID) אחרת השאר במצב 1 (וכמובן החזר INVALID) מצב2: אם הכיוון הוא B ל A ו ההודעה היא OPEN_CONECTION_ACKED עבור למצב 3 ( החזר VALID) אחרת עבור למצב 1 ( החזר INVALID) מצב3: אם הכיוון הוא A ל B ו ההודעה היא LIST,GETLIFE,LISTEN,GETALL,SAVEALL,SAVE,SAVETHEQUEEN... יש שאני לא זוכר... עבור למצב 4 ( החזר VALID) אם זה EXIT עבור למצב 5 ( החזר VALID) אחרת עבור למצב 1 ( החזר INVALID) מצב4: אם הכיוון הוא B ל A ו ההודעה היא המילה שהתקבלה במצב 3 כאשר היא מופיעה פעמיים כאשר יש רק שני רווחים בין המילים או שני רווחים ובינהם מחרוזת המורכבת מאותיות קטנות לדוגמא : LIST LIST, SAVE fddf444542@@d SAVE עבור למצב 3 ( החזר VALID) אחרת עבור למצב 1 ( החזר INVALID) מצב5: אם ההודעה היא EXIT_ACKED ובכוון מB לA עבור למצב 1 ( החזר VALID) אחרת עבור למצב 1( החזר VALIDIN) זה רק החלק הראשון! כול זה יש להבין ממתרגיל באנגלית ולעשות תוך 3 שעות כאשר מתוך הקוד מותר לכתוב רק באיזור של המחלקה ולא במיין ובשפת C בלבד. אין גישה לאינטרנט חוץ מלאתר של CPLUSPLUS לאחר מכן מצפים ממך שזה ירוץ כמה שיותר יעיל - אבל לא להתרגש כי מתור קבוצה של 13-17 איש נשארים 2-3 אחרכך. זה פשוט לא נורמלי. בזבוז של זמן אבל יש סנדוויץ :(
  • ע"י: איתיב
    Q1 Class A { Virtual void foo() { Cout<< "a"; } } Class B : Public A { Virtual void foo() { Cout <<"b"; } } Main { A* a = new B; a.foo(); } What will be the result and why? A1 : "b" , explain about the virtual table Question2 Implement a generic Function A* clone(A* a) A2: Implement for Each Class the Function Clone , and Copy Constructor The clone should be virtual For Example in class A Virtual clone() { Return new(this) } And in copy constructor copy all variables The generic function should be : A* clone(A* a) { Return a.clone(); }
  • ע"י: 1_אורח_כללי
    פתרונות מימוש סינגלטון C++ להגדיר את כל ה חברים כסטאטים system.h: using namespace std; class System { public: static void time_service() { /*...*/ } static void mem_service() { /*...*/ } static void load_library (string lib) { /*...*/ } static string get_property(string name) const { return properties;} private: static map<string, string> properties; }; ובקובץ המימוש יש להגדיר את המשתנים system.cpp: map<string, string> System::properties; חסרונות: 1 המשתנים מאותחלים גם עם לא צריך אותם 2 אין סדר של איתחול ואם יש מצבים של תלות בין חלק מהפונקציות אין על כך בקרא פתרון משופר בהרבה : // system.h using namespace std; class System { public: void time_service() { /*...*/ } void mem_service() { /*...*/ } void load_library (string lib) { /*...*/ } string get_property(string name) const { return properties; } // global point of access to the sole instance static System& instance() { static System object; return object; } protected: System() { properties="Windows"; properties="Heb"; } System(const System&); private: map<string, string> properties; }; כסטטי המוגדר בתוכה היחיד לעצם reference − מספקת סטטית פונקציה Protected מוגדרים כ constructors קוד משתמש לדוגמא: using namespace std; void main() { System::instance().time_service(); System::instance().mem_service(); System::instance().load_library("mylib.dll"); cout << "Operating system: " << System::instance().get_property("os") << endl; cout << "Language: " << System::instance().get_property("lang") <<endl; System s1; // error: private constructor System s2(System::instance());// error: private copy constructor } חסרונות: בהיררכיות בירושה Singleton מחלקת ב − שימוש לעשות קשה לרשת ממחלקה זאת ולהוריש אותה. .Thread פר הוא יחיד לישום וקשה להגדירו Singleton 2.Find the output for the following C program main() { int x=5; printf("%d %d %d\n",x,x<<2,x>>2); } Ans. 5 20 1 כל הזזה>> מכפילה את המספר ב 2 כל הזזה<< מחלקת את המספר ב 2 שתי הזזות>> תכפיל 2*2==20 שתי הזזות << תחלק את המספר(לא עשינו שינוי של 5 אלא רק פעולה עליו) תחלק את המספר לשתים (ללא שארית.) 3. בצע הכפלה של משתנה ב7 ללא שימוש באופרטורים * + (X<<3) –x הסבר (X*2*2*2)-x
  • ע"י: 1_אורח_כללי
    ה' , davidz & hila תוכלו בבקשה לשתף אותי מה שאלו אותכם בראיון ומה היה במבחן ב C/C++ תודה
  • ע"י: 1_אורח_כללי
    אתה יכול בבקשה לשחזר מה שאלו בראיון הראשון? במבחן הראשון...