שחזורי ראיונות עבודה -> יום מבחנים בצ'ק פוניט
1 2 3 4 5 6 7
  • יום מבחנים בצ'ק פוניט
  • ע"י: 1_אורח_כללי
    שלום חבר'ה יש לי יום רביעי מבחנים בצ'ק פיונט. אני יודע שיש שלושה ימים (היא שאלה איזה יום נוח לי). מדובר על משרת סטודנט ושיש שלושה מבחנים. הראשון ב-c\c++ עוד אחד שבודק איך אני מתמודד עם חומר חדש ועוד משהו שאני לא זוכר. יש למישהו מושג מה הולך להיות לי? אשמח לכל טיפ. (זה פעם ראשונה שאני עושה מבחנים כאלה) תודה!
  • לפני 11 שנים
    ע"י: 1_אורח_כללי
    אתמול הייתי במבחנים לפיתוח בצ'ק פוינט (16.9.2013) והמבחנים היו בדיוק כפי שכתוב פה (הפוסט בתאריך 27 בפברואר). כל הכבוד! בהצלחה לכולם.
  • לפני 11 שנים
    ע"י: אלונית החנונית
    אתמול הייתי במבחנים לפיתוח בצ'ק פוינט (16.9.2013) והמבחנים היו בדיוק כפי שכתוב פה (הפוסט בתאריך 27 בפברואר). כל הכבוד! בהצלחה לכולם. וב אני כבר הרבה זמן משתמש בפורום הזה ונהנה מכל מה שאנשים מעלים לכאן והיות ואני גם מתעב תאגידים גדולים אז החלטתי להעלות כאן את המבחן (הראשון) המפורט של check point. הייתי שם ממש לא מזמן ויש לי את כל השאלות די טריות בראש, אגב אני בחרתי לממש ב - #C (אבל אלו אותן שאלות בכל השפות). כמו שציינו קודם יש למבחן 3 חלקים: חלק ראשון הכי גדול שבו 4 שאלות תכנותיות והוא נמשך 3-4 שעות, חלק שני של שעה וחצי ובו נדרשים להריץ קצת פקודות בסיסיות של תקשורת בין שתי מכונות לינוקס ובנוסף גם לקמפל ולהתקין קוד תוכנה מוכן, חלק שלישי הוא בן רק חצי שעה והוא מבחן עיצוב גרפי. חלק א: ישנה כביכול מערכת שאמורה לבצע 4 פעולות (כל פעולה זה שאלה): פיירוול של מסרים, סינון מסרים עם וירוסים, סינון מסרים עם מילות מוגנות וניטור של תעבורת המסרים. מקבלים solution מוכן שבתוכו יש פרויקט שבו 4 מחלקות, כל מחלקה מייצגת שאלה נפרדת, בכל מחלקה יש פונקציה או שתיים ריקות או לא תקינות שאותן אתם צריכים למלא/לתקן. חוץ מהמחלקות האלו ישנן עוד מחלקות נתונים ועוד פרויקטים אבל בהם לא נוגעים. מחלקה חשובה מאוד היא מחלקת הודעה/מסר (message) שבאה לייצג טיפוס נתונים מסוג הודעה, בטיפוס הזה יש כתובת שולח, כתובת מקבל, תוכן ההודעה (כמחרוזת) ועוד.. בנוסף לאחר שכתבתם את הקוד ישנו טסטר אוטומטי שהוא מריץ הרבה מסרים על המחלקות השונות והוא מדווח אם מה שכתבתם מתפקד כהלכה ואכן המחלקות מבצעות מה שצריך על המסרים ומקטלגות אותן נכון. שאלה 1 - צריך לכתוב חיפוש בעץ בינארי ממוין (כלומר לכל קודקוד הבנים משמאל קטנים יותר מהקודקוד ומימין גדולים יותר), ישנו עץ בינארי ממוין שמכיל בכל קודקוד כתובת אסורה (נמשל כתובת של ספאם), את העץ בונים בפונקציה אחרת שעוברת על קובץ טקסטואלי וממירה אותו לעץ אבל הקוד הזה לא אמור לעניין אותכם, בנוסף ישנה פונקציה שמקבלת הודעה ובה אתם צריכים לכתוב קוד שבודק שכתובת השולח וכתובת המקבל לא נמצאים בעץ, אם אחד מהם נמצא אז מחזירים enum שמייצג לזרוק את המסר אחרת מחזירים enum לקבל את המסר. שימו לב שהביצועים מאוד מאוד חשובים בייחוד בשאלה הזאת ולכן הדרך הכי טובה לדעתי לפתור את זה היא לעשות סריקה של העץ באמצעות while ולא רקורסיה! (מי שלא יודע שיחפש בגוגל איך מחפשים ערך באמצעות לולאה בעץ בינארי ממוין ודגש על ממוין!). כמה דגשים די טריוואלים: שימו לב שצריך לעשות 2 סריקות של העץ (אחת עבור כתובת השולח ושניה עבור המקבל) לכן כמובן שעדיף לכתוב את סריקת העץ כפונקציה נפרדת שמקבלת פרמטר כתובת ולקרוא לפונקציה פשוט פעמיים, דגש שני הוא שאין לאתחל את העץ בתוך הפונקצית טיפול מסרים שאתם כותבים כי אז עבור כל מסר העץ יאותחל מחדש, יש להגיד משתנה private מסוג העץ במחלקה (של השאלה) ובבנאי שלה לאתחל את העץ וכך הוא יאותחל רק פעם אחת. שאלה 2 - בשאלה זאת נדרשים לסרוק כל מסר ולגלות האם הוא מכיל וירוס, הסריקה מתבצעת באמצעות מחלקה אחרת שנקראת אנטי וירוס שבה לא אמורים לגעת (אבל כן להבין קצת את הקוד שלה), גם כאן יש לממש פונקציית טיפול במסרים כאשר כל מסר נשלח לאובייקט מסוג המחלקה האחרת ויש לו פונקציה שסורקת את המסר ומחזירה האם יש בו וירוס או אין ובהתאם אתם מחזירים את ה - enum המתאים. כמה דגשים: כמו בשאלה 1 גם כאן יש להגדיר משתנה פרטי מסוג מחלקת אנטי וירוס ולאתחל אותו בבנאי, חשוב לשים לב שהאתחול כולל גם new וגם קריאה לפונקציית setup (פונקציה של המחלקה) שהיא טוענת בסיס נתונים של הוירוסים וכך האובייקט אנטי וירוס מוכן לשימוש, אגב הצורה שבה הסריקה מתבצעת היא באמצעות ביטויים רגולרים אבל זה לא אמור לעניין אותכם, שימו לב שגם בקריאה אח"כ לפונקציית סריקת מסר מלבד המסר יש עוד כמה ערכים בוליאנים ששולחים אליה, יש ערך שנקרא fullscan שהוא צריך להיות false כי אם הוא true אז מה שיקרה זה שמסר שישלח יבדק כנגד כל הבסיס נתונים של הוירוסים שזה מיותר מכיוון שאם הוא false אז הוא סורק רק עד מציאת וירוס ראשון ואז מפסיק וזה ישפר לכם את הביצועים, יש עוד פרמטר (הראשון ביותר) שבכלל אין לו שימוש בתוך האנטי וירוס וסתם כתבו אותו כדי לבלבל, והפרמטר האחרון הוא loadviruses אך הוא יכול להיות true או false זה לא משנה, כי גם ככה בכל קריאה לסריקת מסר יש בדיקה האם הבסיס נתונים כבר נטען קודם ואם כן אז לא טוענים אותו גם האם הפרמטר הזה יהיה true. שאלה 3 - יש מחלקה שבתוכה יש פונקציה שמקבלת את המסר וקוראת לפונקציות אחרת במטרה לראות האם במסר יש מילים שמורות אסורות, אם כן אז יש להחזיר enum של זריקת המסר אחרת קבלת המסר, הקוד כבר כולו כתוב כולל פונקציית קבלת המסר אבל יש בקוד הזה הרבה באגים ובכלל המצב הראשוני שלו שהוא מתרסק אם מריצים אותו. כמה דגשים: יש שם בהתחלה משתנה result שאותו מחזירה הפונקציה אך בשני ה - if העיקריים לא מוצב בו הערך ואת זה יש לתקן, יש משתנה messagedata שלא מקבל ערך בהתחלה. שימו לב שהתיקונים הם אומנם ברובם בפונקציית הקבלת מסר אך יש גם לתקן קצת בפונקציות האחרות, בנוסף בשאלה הזאת מאוד עוזר בסוף להריץ את הטסטר האוטומטי כדי לוודות שכל המסרים קוטלגו כמו שצריך. שאלה 4 - צריך לכתוב 2 פונקציות, אחת היא של קבלת המסרים והשנייה היא החזרה של כל הכתובות השולחות שמהם נשלחו יותר מ - 10% מהמסרים עד עכשיו. הדרך לממש את זה היא באמצעות hashtable וביתר פירוט dictionary ב - #C, כל מפתח (key) יהיה בו כתובת שולח מסוימת וכל ערך יהיה כמה מסרים הכתובת הזאת שלחה, כלומר בעת קבלת מסר חדש בפונקציית הקבלת מסרים יש להעלות את המונה של מפתח כתובת השולח ב - 1 (או כמובן אם זו פעם ראשונה אז יש להוסיף מפתח חדש עם הערך 1) בנוסף יש לשמור מונה פשוט גלובלי ברמת המחלקה שכל פעם שמתקבל מסר חדש אז הוא מוגדל ב - 1. בפונקציית החזרת הכתובות יש פשוט לעשות לולאה שסורקת את כל המפתחות ב - hashtable ועבור כל מפתח בודקת האם הערך שלו לחלק בערך של המונה הכללי גדול שווה מ - 0.1 (כלומר שווה או גדול מ - 10%), אם כן אז מוסיפים אותו לרשימה שאותה בסוף מחזירים בפונקציה. כמה דגשים בכלל לכל חלק א: חשוב להגן על הקוד כמו נמשל בפונקציית קבלת ההודעות לבדוק שההודעה המתקבלת היא לא null ושהמסר בתוכה לא ריק, כדאי גם להשתמש ב - try catch בייחוד במצבים של נמשל פניה לאנטי וירוס החיצוני בשאלה 2 שם אנחנו לא יודעים איך מימשו אותו. חלק ב: בחלק זה בודקים ידיעה והבנה של פקודות תקשורת בסיסיות, קימפול והתקנה בלינוקס, זה נעשה באמצעות מסמך מפורט שבכל שורה אומר תעשו כך ותעשו כך, אתם צריכים לעקוב שורה אחרי שורה במסמך ולבצע בפועל את ההוראות על שתי מכונות וירטואליות של לינוקס שהן באותה הרשת, ברוב ההוראות במסמך גם רשום איזו פקודה יש להקליד, נמשל רשום שיש לבדוק תקשורת על ידי כתיבת ping וכתובת ה - ip של המכונה השניה, אך יש שורות שבהן לא רשומות הפקודות כמו נמשל רושמים שם שיש לקמפל (תוכנה מסוימת שמקודם הורדנו) בדרך הסטנדרטית ואחר כך להתקין אותה אבל לא רושמים איזה פקודות להקליד. אנסה לפרט מה שאני זוכר שיש לעשות שם: דבר ראשון יש לבדוק כתובות ip של שתי המכונות, אחר כך לעשות פינג מהמכונה הראשונה לעצמה, אחר כך מהראשונה לשניה, להוריד קובץ tar/zip מהמכונה השניה לראשונה באמצעות ftp, הקובץ הוא למעשה התקנה של תוכנה בשם pure ftp, יש לפתוח אותו, לקמפל את התוכן שלו, להתקין את התוכנה, להריץ אותה, לעשות kill לתהליך שלה, לחפש בתוך אחד ה - headers שלה מסר מסוים (welcome to), לפתוח את המסר הזה ולהוסיף לו את המילה my, לקמפל שוב ולהתקין את התוכנה מחדש, לפתוח את התוכנה ולראות שהמסר שהיא מציגה בהתחלה השתנה בהצלחה. כמה דגשים: כמו שקודם אמרתי רוב הדברים שיש לעשות רשום במסמך איזה פקודות צריך להקליד כך שאין צורך לזכור פקודות בעל פה, כשמחפשים את המסר שיש לשנות אז לחפש רק את המילים "welcome to" ולא את כל המסר (כי זה נראה לי מסר שמשורשר משני מקומות שונים) אם אני זוכר נכון זה נמצא בקובץ messages_en.h, את הקימפול הסטנדרטי אפשר לעשות עם gcc או make אבל אין צורך לשבור את הראש ולמצוא מה צריך לקמפל אלא יש שם קובץ טקסט שנקרא install, פותחים אותו עם עורך טקסט וישר בשורה הראשונה רשומות 3 פקודות שצריך להריץ, מריצים את 3 הפקודות אחת אחרי השניה והן גם מקמפלות וגם מתקינות את התוכנה, כדי להפעיל את התוכנה אני נכנסתי פשוט לתיקיית הקיצורי דרך לתוכנות מותקנות שהיא אם אני זוכר נכון usr/local/sbin (בכל מקרה כאשר מריצים את 3 הפקודות אז רשום לאיפה הוא מתקין אותה). חלק ג: טוב האמת שכאן אין לי יותר מדי מה לומר וגם אין כל כך איך להתכונן לזה, מדובר במשימת עיצוב גרפי, אגב אין חובה לעשות את החלק הזה אבל מי שעושה אותו יהיה לו יתרון בקבלה לתפקידים שדורשים יכולת עיצוב ממשקים, במשימה מדברים על מערכת שמשמשת לחיפוש עובדים בחברה, נותנים תמונה שבתוכה יש כביכול תוצאת חיפוש אחת שכוללת תמונה של עובדת, כמה פקדים והרבה מידע עליה שנמצא בדרך כלל כתיבות טקסט, התצוגה הראשונית בתמונה לא נראית טוב ודי מבולגנת, המשימה היא לפתוח את התמונה בשלמותה בצייר ולגזור ממנה חלקים שונים כמו נמשל התיבות טקסט ואותן לארגן בתמונה חדשה (חלון צייר שני) כך שבסופו של דבר תתקבל תמונה סופית שונה שמציגה את העובד ופרטיו בצורה הרבה יותר מאורגנת, יפה ושימושית, ניתן לשנות את הגודל של הפקדים, צבעים ובכלל כל דבר כמעט שאפשר לעשות בצייר. כמה דגשים: כדי להתכונן לחלק זה אז למי שלא מכיר אולי כדאי באמת לעבוד קצת עם הצייר, לגזור חלקים מתמונה לשנות גדלים וכ"ו, כדאי לעבוד בצייר במוד זום מוגדל (נמשל 200%), כדאי להתחיל מלחשוב על קבוצות פקדים שונות עם מכנה משותף כמו נמשל כל התיבות שמכילות את פרטי הכתובת ואז פשוט לגזור אותן מהתמונה הראשונה ולשים אותן ביחד יפה בשניה, כאמור הכי טוב לגזור כל פעם דברים מהראשונה וכך לאט לאט התמונה הראשונה מתרקונת ונהיה יותר קל להתסכל עליה ולתכנן מה עושים (זו לפחות הדרך שאני מצאתי בשבילי הכי טובה אך כמובן שיש עוד דרכים). אה ודבר אחרון לסיום נזכרתי במשהו מצחיק, בסוף המבחן הבוחן ניגש לכל אחד ואז שואל אותו האם הוא ראה את המבחן הזה בעבר, מה בדיוק הוא מצפה שיענו לו??? ובכלל נראה לי שכמעט כולם ראו את המבחן הזה בעבר.. בהצלחה ודיר בלק אם מישהו מספר משהו/נותן רמז על המבחן הזה אחרת פשוט צ'ק פוינט ימצאו את מה שרשמתי כאן וישנו את המבחן.. יש למשהו תובנות נוספות???? (קטע קוד כתוב .... או שיכול להוסיף ) ישkl תובנות נוספות???? (קטע קוד כתוב .... או שיכול להוסיף ) אולי לא אמרו לך אבל אתה 10!!!!
  • לפני 11 שנים
    ע"י: 1_אורח_כללי
    אתמול הייתי במבחנים לפיתוח בצ'ק פוינט (16.9.2013) והמבחנים היו בדיוק כפי שכתוב פה (הפוסט בתאריך 27 בפברואר). כל הכבוד! בהצלחה לכולם. וב אני כבר הרבה זמן משתמש בפורום הזה ונהנה מכל מה שאנשים מעלים לכאן והיות ואני גם מתעב תאגידים גדולים אז החלטתי להעלות כאן את המבחן (הראשון) המפורט של check point. הייתי שם ממש לא מזמן ויש לי את כל השאלות די טריות בראש, אגב אני בחרתי לממש ב - #C (אבל אלו אותן שאלות בכל השפות). כמו שציינו קודם יש למבחן 3 חלקים: חלק ראשון הכי גדול שבו 4 שאלות תכנותיות והוא נמשך 3-4 שעות, חלק שני של שעה וחצי ובו נדרשים להריץ קצת פקודות בסיסיות של תקשורת בין שתי מכונות לינוקס ובנוסף גם לקמפל ולהתקין קוד תוכנה מוכן, חלק שלישי הוא בן רק חצי שעה והוא מבחן עיצוב גרפי. חלק א: ישנה כביכול מערכת שאמורה לבצע 4 פעולות (כל פעולה זה שאלה): פיירוול של מסרים, סינון מסרים עם וירוסים, סינון מסרים עם מילות מוגנות וניטור של תעבורת המסרים. מקבלים solution מוכן שבתוכו יש פרויקט שבו 4 מחלקות, כל מחלקה מייצגת שאלה נפרדת, בכל מחלקה יש פונקציה או שתיים ריקות או לא תקינות שאותן אתם צריכים למלא/לתקן. חוץ מהמחלקות האלו ישנן עוד מחלקות נתונים ועוד פרויקטים אבל בהם לא נוגעים. מחלקה חשובה מאוד היא מחלקת הודעה/מסר (message) שבאה לייצג טיפוס נתונים מסוג הודעה, בטיפוס הזה יש כתובת שולח, כתובת מקבל, תוכן ההודעה (כמחרוזת) ועוד.. בנוסף לאחר שכתבתם את הקוד ישנו טסטר אוטומטי שהוא מריץ הרבה מסרים על המחלקות השונות והוא מדווח אם מה שכתבתם מתפקד כהלכה ואכן המחלקות מבצעות מה שצריך על המסרים ומקטלגות אותן נכון. שאלה 1 - צריך לכתוב חיפוש בעץ בינארי ממוין (כלומר לכל קודקוד הבנים משמאל קטנים יותר מהקודקוד ומימין גדולים יותר), ישנו עץ בינארי ממוין שמכיל בכל קודקוד כתובת אסורה (נמשל כתובת של ספאם), את העץ בונים בפונקציה אחרת שעוברת על קובץ טקסטואלי וממירה אותו לעץ אבל הקוד הזה לא אמור לעניין אותכם, בנוסף ישנה פונקציה שמקבלת הודעה ובה אתם צריכים לכתוב קוד שבודק שכתובת השולח וכתובת המקבל לא נמצאים בעץ, אם אחד מהם נמצא אז מחזירים enum שמייצג לזרוק את המסר אחרת מחזירים enum לקבל את המסר. שימו לב שהביצועים מאוד מאוד חשובים בייחוד בשאלה הזאת ולכן הדרך הכי טובה לדעתי לפתור את זה היא לעשות סריקה של העץ באמצעות while ולא רקורסיה! (מי שלא יודע שיחפש בגוגל איך מחפשים ערך באמצעות לולאה בעץ בינארי ממוין ודגש על ממוין!). כמה דגשים די טריוואלים: שימו לב שצריך לעשות 2 סריקות של העץ (אחת עבור כתובת השולח ושניה עבור המקבל) לכן כמובן שעדיף לכתוב את סריקת העץ כפונקציה נפרדת שמקבלת פרמטר כתובת ולקרוא לפונקציה פשוט פעמיים, דגש שני הוא שאין לאתחל את העץ בתוך הפונקצית טיפול מסרים שאתם כותבים כי אז עבור כל מסר העץ יאותחל מחדש, יש להגיד משתנה private מסוג העץ במחלקה (של השאלה) ובבנאי שלה לאתחל את העץ וכך הוא יאותחל רק פעם אחת. שאלה 2 - בשאלה זאת נדרשים לסרוק כל מסר ולגלות האם הוא מכיל וירוס, הסריקה מתבצעת באמצעות מחלקה אחרת שנקראת אנטי וירוס שבה לא אמורים לגעת (אבל כן להבין קצת את הקוד שלה), גם כאן יש לממש פונקציית טיפול במסרים כאשר כל מסר נשלח לאובייקט מסוג המחלקה האחרת ויש לו פונקציה שסורקת את המסר ומחזירה האם יש בו וירוס או אין ובהתאם אתם מחזירים את ה - enum המתאים. כמה דגשים: כמו בשאלה 1 גם כאן יש להגדיר משתנה פרטי מסוג מחלקת אנטי וירוס ולאתחל אותו בבנאי, חשוב לשים לב שהאתחול כולל גם new וגם קריאה לפונקציית setup (פונקציה של המחלקה) שהיא טוענת בסיס נתונים של הוירוסים וכך האובייקט אנטי וירוס מוכן לשימוש, אגב הצורה שבה הסריקה מתבצעת היא באמצעות ביטויים רגולרים אבל זה לא אמור לעניין אותכם, שימו לב שגם בקריאה אח"כ לפונקציית סריקת מסר מלבד המסר יש עוד כמה ערכים בוליאנים ששולחים אליה, יש ערך שנקרא fullscan שהוא צריך להיות false כי אם הוא true אז מה שיקרה זה שמסר שישלח יבדק כנגד כל הבסיס נתונים של הוירוסים שזה מיותר מכיוון שאם הוא false אז הוא סורק רק עד מציאת וירוס ראשון ואז מפסיק וזה ישפר לכם את הביצועים, יש עוד פרמטר (הראשון ביותר) שבכלל אין לו שימוש בתוך האנטי וירוס וסתם כתבו אותו כדי לבלבל, והפרמטר האחרון הוא loadviruses אך הוא יכול להיות true או false זה לא משנה, כי גם ככה בכל קריאה לסריקת מסר יש בדיקה האם הבסיס נתונים כבר נטען קודם ואם כן אז לא טוענים אותו גם האם הפרמטר הזה יהיה true. שאלה 3 - יש מחלקה שבתוכה יש פונקציה שמקבלת את המסר וקוראת לפונקציות אחרת במטרה לראות האם במסר יש מילים שמורות אסורות, אם כן אז יש להחזיר enum של זריקת המסר אחרת קבלת המסר, הקוד כבר כולו כתוב כולל פונקציית קבלת המסר אבל יש בקוד הזה הרבה באגים ובכלל המצב הראשוני שלו שהוא מתרסק אם מריצים אותו. כמה דגשים: יש שם בהתחלה משתנה result שאותו מחזירה הפונקציה אך בשני ה - if העיקריים לא מוצב בו הערך ואת זה יש לתקן, יש משתנה messagedata שלא מקבל ערך בהתחלה. שימו לב שהתיקונים הם אומנם ברובם בפונקציית הקבלת מסר אך יש גם לתקן קצת בפונקציות האחרות, בנוסף בשאלה הזאת מאוד עוזר בסוף להריץ את הטסטר האוטומטי כדי לוודות שכל המסרים קוטלגו כמו שצריך. שאלה 4 - צריך לכתוב 2 פונקציות, אחת היא של קבלת המסרים והשנייה היא החזרה של כל הכתובות השולחות שמהם נשלחו יותר מ - 10% מהמסרים עד עכשיו. הדרך לממש את זה היא באמצעות hashtable וביתר פירוט dictionary ב - #C, כל מפתח (key) יהיה בו כתובת שולח מסוימת וכל ערך יהיה כמה מסרים הכתובת הזאת שלחה, כלומר בעת קבלת מסר חדש בפונקציית הקבלת מסרים יש להעלות את המונה של מפתח כתובת השולח ב - 1 (או כמובן אם זו פעם ראשונה אז יש להוסיף מפתח חדש עם הערך 1) בנוסף יש לשמור מונה פשוט גלובלי ברמת המחלקה שכל פעם שמתקבל מסר חדש אז הוא מוגדל ב - 1. בפונקציית החזרת הכתובות יש פשוט לעשות לולאה שסורקת את כל המפתחות ב - hashtable ועבור כל מפתח בודקת האם הערך שלו לחלק בערך של המונה הכללי גדול שווה מ - 0.1 (כלומר שווה או גדול מ - 10%), אם כן אז מוסיפים אותו לרשימה שאותה בסוף מחזירים בפונקציה. כמה דגשים בכלל לכל חלק א: חשוב להגן על הקוד כמו נמשל בפונקציית קבלת ההודעות לבדוק שההודעה המתקבלת היא לא null ושהמסר בתוכה לא ריק, כדאי גם להשתמש ב - try catch בייחוד במצבים של נמשל פניה לאנטי וירוס החיצוני בשאלה 2 שם אנחנו לא יודעים איך מימשו אותו. חלק ב: בחלק זה בודקים ידיעה והבנה של פקודות תקשורת בסיסיות, קימפול והתקנה בלינוקס, זה נעשה באמצעות מסמך מפורט שבכל שורה אומר תעשו כך ותעשו כך, אתם צריכים לעקוב שורה אחרי שורה במסמך ולבצע בפועל את ההוראות על שתי מכונות וירטואליות של לינוקס שהן באותה הרשת, ברוב ההוראות במסמך גם רשום איזו פקודה יש להקליד, נמשל רשום שיש לבדוק תקשורת על ידי כתיבת ping וכתובת ה - ip של המכונה השניה, אך יש שורות שבהן לא רשומות הפקודות כמו נמשל רושמים שם שיש לקמפל (תוכנה מסוימת שמקודם הורדנו) בדרך הסטנדרטית ואחר כך להתקין אותה אבל לא רושמים איזה פקודות להקליד. אנסה לפרט מה שאני זוכר שיש לעשות שם: דבר ראשון יש לבדוק כתובות ip של שתי המכונות, אחר כך לעשות פינג מהמכונה הראשונה לעצמה, אחר כך מהראשונה לשניה, להוריד קובץ tar/zip מהמכונה השניה לראשונה באמצעות ftp, הקובץ הוא למעשה התקנה של תוכנה בשם pure ftp, יש לפתוח אותו, לקמפל את התוכן שלו, להתקין את התוכנה, להריץ אותה, לעשות kill לתהליך שלה, לחפש בתוך אחד ה - headers שלה מסר מסוים (welcome to), לפתוח את המסר הזה ולהוסיף לו את המילה my, לקמפל שוב ולהתקין את התוכנה מחדש, לפתוח את התוכנה ולראות שהמסר שהיא מציגה בהתחלה השתנה בהצלחה. כמה דגשים: כמו שקודם אמרתי רוב הדברים שיש לעשות רשום במסמך איזה פקודות צריך להקליד כך שאין צורך לזכור פקודות בעל פה, כשמחפשים את המסר שיש לשנות אז לחפש רק את המילים "welcome to" ולא את כל המסר (כי זה נראה לי מסר שמשורשר משני מקומות שונים) אם אני זוכר נכון זה נמצא בקובץ messages_en.h, את הקימפול הסטנדרטי אפשר לעשות עם gcc או make אבל אין צורך לשבור את הראש ולמצוא מה צריך לקמפל אלא יש שם קובץ טקסט שנקרא install, פותחים אותו עם עורך טקסט וישר בשורה הראשונה רשומות 3 פקודות שצריך להריץ, מריצים את 3 הפקודות אחת אחרי השניה והן גם מקמפלות וגם מתקינות את התוכנה, כדי להפעיל את התוכנה אני נכנסתי פשוט לתיקיית הקיצורי דרך לתוכנות מותקנות שהיא אם אני זוכר נכון usr/local/sbin (בכל מקרה כאשר מריצים את 3 הפקודות אז רשום לאיפה הוא מתקין אותה). חלק ג: טוב האמת שכאן אין לי יותר מדי מה לומר וגם אין כל כך איך להתכונן לזה, מדובר במשימת עיצוב גרפי, אגב אין חובה לעשות את החלק הזה אבל מי שעושה אותו יהיה לו יתרון בקבלה לתפקידים שדורשים יכולת עיצוב ממשקים, במשימה מדברים על מערכת שמשמשת לחיפוש עובדים בחברה, נותנים תמונה שבתוכה יש כביכול תוצאת חיפוש אחת שכוללת תמונה של עובדת, כמה פקדים והרבה מידע עליה שנמצא בדרך כלל כתיבות טקסט, התצוגה הראשונית בתמונה לא נראית טוב ודי מבולגנת, המשימה היא לפתוח את התמונה בשלמותה בצייר ולגזור ממנה חלקים שונים כמו נמשל התיבות טקסט ואותן לארגן בתמונה חדשה (חלון צייר שני) כך שבסופו של דבר תתקבל תמונה סופית שונה שמציגה את העובד ופרטיו בצורה הרבה יותר מאורגנת, יפה ושימושית, ניתן לשנות את הגודל של הפקדים, צבעים ובכלל כל דבר כמעט שאפשר לעשות בצייר. כמה דגשים: כדי להתכונן לחלק זה אז למי שלא מכיר אולי כדאי באמת לעבוד קצת עם הצייר, לגזור חלקים מתמונה לשנות גדלים וכ"ו, כדאי לעבוד בצייר במוד זום מוגדל (נמשל 200%), כדאי להתחיל מלחשוב על קבוצות פקדים שונות עם מכנה משותף כמו נמשל כל התיבות שמכילות את פרטי הכתובת ואז פשוט לגזור אותן מהתמונה הראשונה ולשים אותן ביחד יפה בשניה, כאמור הכי טוב לגזור כל פעם דברים מהראשונה וכך לאט לאט התמונה הראשונה מתרקונת ונהיה יותר קל להתסכל עליה ולתכנן מה עושים (זו לפחות הדרך שאני מצאתי בשבילי הכי טובה אך כמובן שיש עוד דרכים). אה ודבר אחרון לסיום נזכרתי במשהו מצחיק, בסוף המבחן הבוחן ניגש לכל אחד ואז שואל אותו האם הוא ראה את המבחן הזה בעבר, מה בדיוק הוא מצפה שיענו לו??? ובכלל נראה לי שכמעט כולם ראו את המבחן הזה בעבר.. בהצלחה ודיר בלק אם מישהו מספר משהו/נותן רמז על המבחן הזה אחרת פשוט צ'ק פוינט ימצאו את מה שרשמתי כאן וישנו את המבחן.. יש למשהו תובנות נוספות???? (קטע קוד כתוב .... או שיכול להוסיף ) ישkl תובנות נוספות???? (קטע קוד כתוב .... או שיכול להוסיף )
  • לפני 11 שנים
    ע"י: 1_אורח_כללי
    והבנתי שאפשר גם לענות בC#, לא?
  • לפני 11 שנים
    ע"י: 1_אורח_כללי
    קיים, קיים. הייתי שם לא מזמן, עשיתי אותו. כמובן שעדיף לממשל ב-C++,C כי אין להם באמת משרות ב-JAVA.
  • לפני 11 שנים
    ע"י: 1_אורח_כללי
    הי, מישהו יודע אם המבחן הזה עם ה-4 שאלות בתכנות ושאלה בלינוקס עוד קיים? וגם- מה בדיוק שואלים על כל הפקודות האלה? אם אפשר תשובות דחוףף כי המבחן מחר.. תודה!
  • לפני 11 שנים
    ע"י: 1_אורח_כללי
    רציתי לדעת בבקשה 2 שאלות לגבי היום מיונים שהיה.. 1.בביטול מנגנון ה DHCP הרי בכל ראוטר זה שונה אז במקרה של הממשק כאן איך כיבית בדיוק את חלוקת הכתובות?.. 2. איזה כתובות ,dns וכו' הייתם צריכים לשים במקום הdhcp שהרי בוטל ...? כלומר מה הייתם צריכים לשים בחיבורי הרשת...? תודה .
  • לפני 11 שנים
    ע"י: 1_אורח_כללי
    היי צ'ק פוינט.... קודם כל תודה רבה על המדריך המושקע שכתבת אבל אשמח מאוד אם תוכל לעזור לי במציאת מדריך להגדרת רשת אלחוטית כי אני לא כ"כ מוצא אותו והראוטר הביתי שלי בבית הוא netgear של בזק שכאשר ניסיתי להיכנס לממשק שלו קיבלתי ממשק לא כזה עשיר שיכול ללמד משהו אז מאוד אשמח אם תוכל אתה להמליץ על מדריך טוב כי אני אישית לא מצאתי... המון תודה רבה!!!
  • לפני 11 שנים
    ע"י: מהנדס11
    מישהו שהיה שם לאחרונה (מיונים לתפקיד R&D) יכול להגיד אם עדיין יש את השאלה הבאה (הופיע פה בהודעות יותר ישנות..) : נתון מחסן מילים ומחרוזת וצריך לבדוק האם במחרוזת יש מילה מהמחסן מילים. ואם השאלה קיימת האם מותר להשתמש באיזה פונקציה שאני רוצה מספריית string.h ? תודה רבה!
  • לפני 11 שנים
    ע"י: צ'ק פוינט
  • לפני 11 שנים
    ע"י: צ'ק פוינט
    שלום רב לכולם, הרגע יצאתי מהמבחנים של התמיכה טכנית והכל מאוד רענן אצלי בראש ויש לי זכרון מפחיד לשאלות ממבחנים! אני כותב את המדריך הזה כי הבוחנים במבחן של היום נורא עצבנו אותי ביחס המעפן שלהם לחבר'ה שבאים אליהם למבחנים. אז ככה, המבחן התחיל בשעה 10 בבוקר , היינו 11 אנשים בסך הכל. המבחן בנוי מכמה שלבים: שלב ראשון: 10 שאלות אמריקאיות בנושא של Subnetting. השאלות האלה ממש ממש קלות למי שלומד קצת ומתרגל. דוגמאות לשאלות (הכל באנגלית): 1) תמצא Subnet mask לכתובת 192.168.0.1... 2) מה broadcast address של הרשת 192.168.0.1 יש עוד כמה סוגים של שאלות כאלה, ראיתי כבר בפורום פה ששיחזרו כמה שאלות כאלה. אני למדתי ותרגלתי עם האתר: http://www.subnetting.net/Subnetting.aspx?mode=practice זה האתר הכי טוב לתרגול וללימוד, השאלות באתר הזה ובמבחן זהות לחלוטין!!! כשתגיעו לרמה שבה אתם מצליחים לפתור את כל התרגילים באתר בשתי דקות תדעו שאתם מוכנים אש! אחרי השלב הזה נשרו 3 אנשים ונשארנו 8. שלב שני: השלב הזה מורכב משני מבחנים מעשיים. המבחן הראשון: חיבור מחשב למודם ולראוטר. המבחן הזה הוא החשוב מבין שני המבחנים המעשיים אז תלמדו אותו טוב טוב! המבחן בנוי משלושה סעיפים: 1) לחבר את המחשב למודם ולראוטר ולבדוק שיש תקשורת דרך הפינג שמביאים לכם. איך עושים את זה?? צעד 1 - אתם מקבלים חוברת צבעונית עם ארבעה עמודים, תפעלו בדיוק לפי החוברת וסיימתם את הסעיף, אבל אם אתם קוראים את ההוראות האלה אתם בטח לא כאלה מבריקים אז אני אפשט את זה בשבילכם. צעד 2 - תיקחו שני כבלים מהמתלה, תחברו למחשב שלכם מצד שמאל צד אחד של הכבל ואת הצד השני תחברו לאחת מיציאות ה- LAN של הראוטר (סוג הראוטר הוא edge). צעד 3 - תחברו את הכבל השני ליציאת ה WAN של הראוטר ואת הצד השני למודם(מודם HP , עם הרבה כניסות). צעד 4 - תיכנסו להגדרות הרשת שלכם במחשב: , לוח בקרה ---> הגדרות רשת ---> עכשיו אתם רואים רשת LAN שזה רשת מקומית ורשת WIRELESS , תעשו לחצן ימני על רשת ה-LAN ותבחרו ב-properties---> פה תבחרו TCP/IPv4 ותעשו PROPERTIES----> תגדירו כמו שמצויר לכם בחוברת שזה אומר שהכל יהיה באוטומטי, אתם לא צריכים להקליד בסעיף הראשון כלום שם. צעד 5 - תיכנסו להפעלה ---> cmd ---> ותקלידו ipconfig ---> קחו את default gateway ותרשמו בחלון של הדפדפן. צעד 6 -מבקשים ממכם סיסמא כדי להיכנס להגדרות של הראוטר, שם משתמש : admin, סיסמא: 1-8. ברכותיי אתם בהגדרות של הראוטר. צעד 7 - ברגע שנכנסתם לתוך ההגדרות של הראוטר מופיע מולכם איזה מדריך, תמלאו את ההגדרות במדריך לפי מה שכתוב לכם בלוח שבכיתה. הוא מבקש סיסמא שכתובה לכם על הראוטר, כתובת איי פי של הראוטר, מדינה ועוד כמה הגדרות שהתשובות אליהן נמצאות על הלוח. אם מאיזושהי סיבה סגרתם את המדריך בטעות אתם יכולים לפתוח אותו מחדש דרך : SETUP ---ואז SETUP WIZARD וקיבלתם שוב את המדריך. צעד 8 - סיימתם למלא את ההגדרות במדריך, ברכותיי. תיכנסו שוב למסך השחור (הפעלה-->cmd)ופה אתם רושמים בדיוק ככה: ping 192.168.30.1 , כתובת האייפי שאתם באמת כותבים פה היא הכתובת שמופיעה על הלוח ליד המילה ping. מה שקורה עכשיו זה שהמחשב מקבל נתונים מאיזושהי כתובת וזה צריך להראות לכם שעברו הנתונים. אחרי שסיימתם את השלב הזה תקראו למדריך שייראה שהצלחתם. סעיף שני של המבחן: 2) להגדיר את רשת ה - WIFI ויש בונוס אם אתם מאבטחים אותה. אני ממליץ לכם להסתכל באינטרנט באיזשהו מדריך של הגדרת רשת אלחוטית זה בערך אותו הדבר. צעד 1 - ללכת ללוח הבקרה ----> רשתות ----> לבחור את הרשת של Wireless ----> לעשות properties----->ללכת שוב ל - TCP/IPv4 ולעשות properties. צעד 2 - להכניס את כל הנתונים שעל הלוח ידנית , זה כולל את הכתובת אייפי שנמצאת על הראוטר, מסכה, default getway ועוד כמה שיש לכם אותם כבר על הלוח. צעד 3 - להיכנס שוב להגדרות של הראוטר ושם אתם צריכים ללכת ל - networks ---> my networks ולהתאים את ההגדרות למה שהגדרתם בצעד 2. זה הכיוון הכללי של סעיף 2 , אל תתפסו אותי בדיוק בדיוק במילה, בשביל זה תקראו מדריך להגדרת רשת אלחוטית והוא בטח ייתן לכם יותר פרטים + תמונות של החלונות. כמו כן , במדריכים שתמצאו באנטרנט תגלו גם איך לאבטח את הרשת ותקבלו את הבונוס. אחרי הסעיף הזה תבדקו שה-WIFI עובד על ידי כך שתנתקו את הכבל של המחשב מהיציאה של ה-LAN. סעיף 3 במבחן: אני לא זוכר את הסעיף הזה, לצערי אני קיבלתי כבל רשת שהיה רופף וזה גרם לי לפשל מאוד בכל המבחן הזה. תנסו לברר את זה איכשהו ממישהו אחר שהיה שם. אחרי שסיימתם את המבחן הזה , מבקשים ממכם לפתוח note pad ולרשום עשר שורות באנגלית. אתם יכולים לכתוב על כל דבר בחיים שלכם , הם רק רוצים לדעת מה הרמה של האנגלית שלכם, אז אם האנגלית שלכם לא משהו או שאתם מפחדים לעשות שגיאת כתיב תתאמנו על זה. שני טיפים אישיים: 1. תיקחו כבלים תקינים , כלומר שיש להם את הצ'ופצ'יקים ששומרים אותם בפנים. 2. יש שני שולחנות בכיתת המעבדה ,אחד של 6 מקומות והשני של 2 מקומות, אני ממליץ לכם מאוד לשבת בשולחן של 2 המקומות כי השולחן של ה - 6 מקומות עמוס בחוטים ואנשים יכולים להוציא לך את החוט בטעות שלא לדבר שכולם מלחיצים אותך! זהו מבחינת המבחן המעשי הראשון. עכשיו המבחן המעשי השני: סיימתם את המבחן הראשון , עכשיו אתם יוצאים לאיזו הפסקונת והולכים עם איזה בחור קצת מוזר(אבל גבר) למעבדה הראשונה, זאת שעשיתם בה את המבחן העיוני הראשון. הקטע של המבחן הזה הוא לראות איך אתם מסתדרים עם משהו שאתם לא מכירים ונתקלים בו בפעם הראשונה. המבחן הוא על המחשב ומותר להשתמש באנטרנט בשביל לחפש חומר. בתוך המחשב אתם פותחים איזושהי תוכנה שהבחור המוזר יגיד לכם, הוא יסביר לכם להפעיל את שלושת החלונות של התוכנה. אתם נכנסים לחלון של הראוטר , אל תדאגו הוא יגיד לכם איזה ועליו אתם מבצעים את הכניסה למערכת הלינוקס ועונים על השאלה הראשונה. ממה שאני זוכר כשאתם מפעילים את המסך הזה הוא מבקש שם משתמש וסיסמא, שם המשתמש הוא admin והסיסמא היא vpn123 , כשאתם מקלידים את הסיסמא אתם לא תראו שכתבתם משהו, אל תדאגו , זה כותב. תלחצו אנטר ואתם עכשיו בתוך הלינוקס. ברכותיי, אתם כרגע כותבים בתוך טרמינל של לינוקס! לינוקס! לינוקס! כל מה שהסברתי עכשיו הבחור המוזר יסביר לכם, אבל טוב שתדעו עוד לפני מה צריך לעשות. ועכשיו לשאלה הראשונה. השאלה הראשונה מורכבת משלושה סעיפים: 1)get into /var/exam directory. איך עונים על הסעיף הזה? עושים חיפוש באינטרנט של איך נכנסים לתוך תיקיה בלינוקס ושם אתם תראו איך עושים את זה, אבל מאחר שאתם לא מבריקים אני אסביר לכם, לא בגלל שאני נחמד,אלא בגלל שאני שונא את צ'ק פוינט. הפקודה הנכונה לשם כך היא cd. הסינטקס הולך ככה: cd /var/exam יכול להיות שזה גם הולך ככה cd /var/exam/f את ה-f רשמתי רק כדי שה- / יהיה מצד ימין למילה exam , לא כותבים את ה -f. בכל מקרה, אפשר למצוא את זה פה: http://www.computerhope.com/unix/ucd.htm#03 2) read the text written in the file in that directory איך עונים על זה? צעד 1: אתם כרגע בתיקיה, אתם צריכים לגלות איזה קובץ נמצא בתיקיה הזאת ולגלות מה כתוב בו. איך מגלים איזה קבצים נמצאים בתיקיה? תחפשו בגוגל כי אני לא אחפש את זה עכשיו במיוחד בשבילכם. מצאתם את שם הקובץ , שם הקובץ במבחן הוא myexam. צעד 2: בלינוקס אתם צריכים לדעת את סוג הקובץ בשביל להצליח לפתוח אותו, מן הסתם אפשר להבין שזה קובץ text כי אתם צריכים לקרוא מה כתוב בו, אבל ליתר בטחון תחפשו בגוגל איך מגלים סוג של קובץ בתיקיה. הכל נמצא באנטרנט. צעד 3: גיליתם שסוג הקובץ הוא text ברכותיי! עכשיו אתם צריכים לקרוא ממנו. איך עושים את זה? נכון , מחפשים בגוגל. טוב נו , אני יודע שאתם מוגבלים אז מצאתי את זה בשבילכם. http://www.computerhope.com/unix/ucat.htm צעד 4: גיליתם מה כתוב בקובץ , כתוב שם you have passed question 2. לכו תקראו לבחור המוזר שיראה את זה. סעיף 3 בשאלה הזאת: 3) "create a text file and give it the name: my_exam and write in it :"Good luck איך עושים את זה? מחפשים בגוגל, טוב נו, בגלל שהגעתם עד לפה אתם כנראה ממש עצלנים ולא מוצלחים אז קבלו את הלינק שיסגור לכם את הפינה: http://www.if-not-true-then-false.com/2 ... ut-editor/ ברכותיי! סיימתם את שאלה מס' 1 בהצלחה! עכשיו לשאלה מספר 2! רק שתדעו, אף אחד לא הצליח את שאלה 2 , אני הייתי קצת קרוב לפתור אותה. מביאים לכם דיאגרמה שדומה קצת לתמונה הזאת:http://www.gyre.co.uk/images/broadband_router_1.png במקום שלושה מחשבים שמחוברים לראוטר, יש שניים, האיי פי של מחשב 1 הוא משהו כמו 172.168.0.1 ושל המחשב השני האיי פי הוא 192.168.0.1 , זה לא בדיוק האיי פי שלהם, אבל הרעיון הוא שהם נמצאים על רשתות שונות והראוטר הוא זה שמצליח לגרום להם לתקשר ביניהם. לראוטר יש שני חיצים החץ השמאלי מסומן במילה eth0 והחץ הימני (של המחשב הימני) הוא eth1. עכשיו... זה קטע מסובך לאללה, אבל אני אחסוך לכם קצת זמן. יש פקודה שנקראת sysconfig. הפקודה נותנת לכם כמה אפשרויות , אתם צריכים להגדיר ראוטר ואז להגדיר את שני המחשבים האחרים(hosts). בקיצור, את השאלה הזאת לא נורא כל כך אם לא תצליחו כי כולם אצלנו לא הצליחו וגם הבחור המוזר אמר לנו שהמבחן הזה פחות חשוב מהמבחן הקודם. אבל אם בכל זאת אתם רוצים להצליח לפתור את השאלה הזאת ,קחו את השאלה הזאת לחבר שלכם שהוא איש סיסטם והוא בטח יידע להסביר לכם אותה. אחרי השלב הזה נפלנו שישה ונשארו שניים והם עברו ראיונות כ"א ומקצועיים ואין מצב שהם ירשמו פה מה דיברו איתם כי הם חארות. וזהו חברים, שמחתי מאוד לכתוב את המדריך הזה, צ'ק פוינט לא העריכו אותי כראוי כי בנאדם שמצליח במבחן העיוני כל כך , אחרי שהוא למד אליו באמת כמה שעות ואין לו שום רקע בתחום הזה כנראה שיש לו משהו בקודקוד ולתת לו עכשיו להתקין ראוטר ומודם אחרי שהוא לא נגע בזה כמה שנים לא באמת בוחן את היכולות שלו. אחרי הכל למשרה הזאת יש קורס של חודש וחצי זה לא שאי אפשר ללמד אותנו להיות טובים בזה. וזאת הסיבה שאני שונא את צ'ק פוינט ושאני עוזר לכם כל כך , כי עכשיו שהמבחן כולו נמצא פה באנטרנט יעלה להם הרבה יותר להחליף את המבחן מאשר להכשיר בנאדם חסר ניסיון לתפקיד. לסיכום, האכלתי אתכם בכפית של זהב טהור ואת צ'ק פוינט בחרא טהור. בהצלחה!
  • לפני 11 שנים
    ע"י: 1_אורח_כללי
    שלום לבחור שהגיב אחרון"הבחור שלא עבר" מצטער קודם לשמוע אבל מאוד אשמח אם תוכל ליידע אותנו באיזה סוג של ראוטר הייתם צריכים לבצע את כל ההוראות הללו והאם הגדירו לכם את זה מראש או שפשוט חיכו שאחרי כל משימה יעיפו מישהו ואז יתנו משימה נוספת?... סתם מתעניין... שיהיה סופ"ש נעים.
  • לפני 11 שנים
    ע"י: 1_אורח_כללי
    שאלות לדוגמא בSUBNETTING: http://www.indiabix.com/networking/subnetting/ זאת הרמה של התרגילים ששואלים שם, מי שיסתדר עם השאלות הללו יעבור את המבחן בלי בעיה. מי שלא מסתדר עם השאלות הללו, כנראה שלא יעבור לשלב הבא. המבחן השני - הגדרת ראוטר. צריך לנסות לסיים אותו פרפקט, בלי להתקע ובלי לשאול הרבה שאלות מבוחנים. המבחן דיי מלחיץ, כולם יושבים בחדר קטן מסביב לשולחן ושתי בוחנים שעושים סיבובים ומסתכלים מי נתקע במה. רושמים גם הערות לגבי צורת העבודה שלך, ואם אתה נתקע ושואל שאלה (מותר) אז מורידים ניקוד בציון הסופי. המבחן הזה מחולק ל3 חלקים: 1. לחבר ראוטר למחשב ולהגדיר רשת לפי הנתונים שנותנים לפני כן (מבקשים IP סטטי!). שלב די פשוט, רק זורמים עם המדריך המצורף. 2. לעשות את אותו הדבר בWIFI. לדעת להגדיר את שם של הרשת לפי השם שלכם ולעשות את ה WIFI מוצפן. 3. לכבות את הDHCP שלא יחלק כתובות אוטומטית. 4. שלב שלא קשור למבחן אך צריך לעשות אותו גם כן - לרשום מס' משפטים בNOTEPAD שבוחן את רמת האנגלית שלכם. בהצלחה לכל הניגשים בעתיד!
  • לפני 11 שנים
    ע"י: 1_אורח_כללי
    השאלות שיש פה בשרשור זהות אחד לאחד למה שהולך שם באמת. כמה דגשים ליעילות התוכניות : שאלה ראשונה : חיפוש בעץ בינארי ממוין בשיטה הכי יעילה שתמצאו. שאלה 2 : צריך ליצור ממבר לקלאס בשם AntiVirusEngin, לאתחל אותו וגם לקרוא ל Setup על ההתחלה. תרגיל מאוד פשוט , רק לשים לב שכאשר קוראים ל AntiVirusEngin.checkIfContainVirus() לשים לב שאתם קוראים לה עם משתנה fullScan = false! שאלה 3 : דיבוג מאוד פשוט יחסית . שימו לב שיש המון מקרי עצירה. יש באג בחישוב . קחו את ההודעה Subject:Stam subject Body: stam body תפרקו אותו. ב C++ היה שימוש ב find של string. שימו לב בתוך ה Swich-Case שאתם צריכים להוסיף Break ולבצע השמה של התוצאה אל תוך המשתנה result שאלה 4 : נתנו פה את כל הפיתרון ( מונה הודעות ומונה לכל כתובת) העניין הוא שמי שעושה ב C++ שידע להשתמש ב Map וגם ב Set אני נפלתי על יעילות הדברים . אני מקווה שלכם יהיה יותר טוב
  • לפני 11 שנים
    ע"י: אחת אחת
    אני לא זוכרת מה המילים השמורות אבל נגיד ואחת המילים השמורות היא password אז מסר תקין של SMTP יכול להיות מ-2 צורות: לפי תבנית: Subject: hello world Body: bla bla bla bla או לא לפי תבנית ואז כולו ייבדק: hello world bla bla מסר לא תקין לפי תבנית: Subject: my password is Body: bla bla או: Subject: hello Body: my password is bla bla מסר לא תקין, לא לפי התבנית: my password is bla bla תתייחסו לבעיה כאילו זה ניתוח מחרוזות רגיל זה הכל...
  • לפני 11 שנים
    ע"י: 1_אורח_כללי
    היי. בנוגע לבאג של מסר מסוג SMTP. שאלה ראשונה: מה התבנית של מסר ב SMTP? אפשר לתת דוגמא למסר בתבנית זו? שאלה שניה: אפשר להראות דוגמא למסר שגוי? וכן מסר שגוי הוא רק אם יש בו מילים שמורות? או שזה קשור גם לאורך המסר? שאלה שלישית: כיצד תיקנת את הבאג הזה? תודה רבה!!!
  • לפני 11 שנים
    ע"י: אחת אחת
    אני אנסה, קודם הקדמה קטנה... השאלה של התיקון קוד היא למעשה חלק (שמה זה נקרא "בלייד") שבודק אם בהודעה מסויימת קיימות כל מיני מילים שמורות. יש ניתוח נפרד להודעות SMTP וניתוח נפרד ל-FTP\HTTP. הניתוח של SMTP בודק רק הודעות מהתבנית *Subject:*Body אחרת הוא יבצע בדיקה של כל המחרוזת (כמו שעושים בפרוטוקולים FTP\HTTP). את הבדיקה הוא עושה בנפרד למחרוזת שמופיעה אחרי המילה :Subject ולמחרוזת שאחרי :Body למשל בדוגמא שכתבתי מקודם הוא ייקח את התת מחרוזת hello ויחפש בתוכה מילים שמורות ואחכ ייקח את התת מחרוזת world ואותו כנל עכשיו יש שם 4 פונקציות עיקריות: פונקציה ראשית לטיפול בהודעות (מחזירה Accept\drop) פונקציה לטיפול בהודעות SMTP (כנל) פונקציה לטיפול בהודעות FTP\HTTP (כנל) ופונקציה שמקבלת מחרוזת ובודקת אם קיימת בה מילה שמורה (בוליאנית) צריך לטפל בבאגים ב-2 פונקציות העליונות בתחתונות לא זכור לי שהיו באגים בפונקציה הראשית: * יש משתנה לא מאותחל שעליו מבצעים את כל הבדיקות ובגלל זה התוכנית מתרסקת בפעם הראשונה * הודעות ריקות צריך ישר לקבל ללא בדיקת מחרוזות בטעות עשו שם דרופ (הם ממש כותבים את זה בהערה, אבל עושים בקוד הפוך) * ב-switch יש רק פונקציות אך לא מתייחסים לערך המוחזר שלהן. צריך או להוסיף שם return, או להחזיר את הערך המוחזר למשתנה ולעשות break. בפונקציה שמטפלת ב-SMTP: * החישוב של הפויינטרים וגודל המחרוזות לא נכון. אני חישבתי הכל מחדש כמו שתיארתי מקודם. * יש שם שחרור זיכרון בסוף הפונקציה, למרות שלא תמיד הוקצה זיכרון. (למשל במקרים בהם ההודעה לא מתאימה לתבנית). בעיקרון את הפונקציה הזאת כתבתי כמעט מחדש ובצורה הדרגתית (בדיקת התבנית, בדיקת הנושא בנפרד ובדיקת הבודי בנפרד ואם זה לא מתאים לתבנית אז בדיקה רגילה של כל המחרוזת) מקווה שזה עזר בהצלחה!
  • לפני 11 שנים
    ע"י: 1_אורח_כללי
    מטרת הקוד היא למצוא מילים מסוימות שבאות אחרי הsubject או הbody והטעות בקוד היא בחישוב של המקום שממנו מחפשים ,(אם אני זוכר נכון עוד טעות שיש שם -צריך לבדוק שהמצביע לsubject נמצא לפני המצביע לbody ) מישהו יודע מתי יש שם יום מבחנים לא לפיתוח אלא משרות אחרות ??
  • לפני 11 שנים
    ע"י: 1_אורח_כללי
    אחת אחת יקרה... ממה שהבנתי מתשובתך: כל המסר כולל ה subject וה body נמצא באותו מחרוזת. ומה שתפקיד הקוד לבצע הוא לחשב את כמות התווים שאחרי ה body? והטעות בחישוב נמצאת במקום אחד? בנוסף אם תוכלי בבקשה לכתוב עוד באגים שגילית אודה לך מאוד. ברכות יחולו על ראשך!
  • לפני 11 שנים
    ע"י: אחת אחת
    היי, עשיתי אומנם את המבחן ב-C אבל אני אנסה לעזור... הבאג הזה לא כזה קשה, פשוט צריך לחשב נכון. בפונקציה הזאת צריכים להפריד את המחרוזות שמופיעות אחרי המילה Subject: ואחרי Body: אבל החישוב שהם עושים שם לחישוב הפויינטרים שמצביעים על המחרוזות האלה ועל הגודל שצריך להקצות להן הוא לא טוב. מה שאני עשיתי זה כתבתי לי על דף Subject:hello Body:world ועשיתי חישובים איך מגיעים ל-hello ולגודל שלו, וכנל ל-world ושיניתי את הקוד לפי זה אני משערת שב-C++ יש שם קטע דומה... לא יכולה לעזור לגבי השאלה השניה כי ב-C יש רק *Char
  • לפני 11 שנים
    ע"י: 1_אורח_כללי
    בהצלחה יקר. תוכל בבקשה להסביר יותר בקשר לבאג שמצאת? וכן מישו שעשה את המבחן ב c++ מאיזה טיפוס תוכן ההודעה? char* או string?
  • לפני 11 שנים
    ע"י: 1_אורח_כללי
    שלום לכולם, הייתי שם לפני שבוע וחצי, והמבחן מורכב מאותם השאלות. לא הצלחתי לסיים בזמן את השאלה השלישית - עם הקוד שצריך לדבג. מלבד מה שכתבו בהודעות הקודמות לגבי שאלה זו, באג נוסף הוא אורך המסר שלא תקין בכל המקרים. במצב המקורי, יש פונקציה שאליה מכניסים את האורך הרצוי, והיא אמורה להחזיר את המסר. האורך מחושב באמצעות חיבור וחיסור של כמה גדלים (לדוג' אורך הודעה כולל - אורך מילת פתיחה - אורך מילת סיום = אורך מסר רלוונטי). החיבור והחיסור לא נכון בכל המקרים. אני ממליץ לבצע אותו בנפרד לפני הקריאה לפונקציה (לדוג' len1 = messageLength - header1 - header 2 + etc), להריץ בדיבגר שורה שורה ולבדוק שהמספר שמתקבל הגיוני. (אני בזבזתי יותר מדי זמן עד שגיליתי את הבעיה הזו). לדעתי זו השאלה שצורכת הכי הרבה זמן, בפרט אם מתכוננים מראש לשאלות האחרות על פי מה שכתבו בשרשור הזה. בהצלחה!
  • לפני 11 שנים
    ע"י: 1_אורח_כללי
    תודה,יש כאן אנשים בסדר גמור...
  • לפני 11 שנים
    ע"י: מהנדס_תוכנה1
    אפשר שיחזור של המבחן ב Java ? אשמח מאוד...
  • לפני 11 שנים
    ע"י: 1_אורח_כללי
    אותם שאלות. תקרא מה שכתבו בשרשור.. הבליידים האלו.. אכן בהצלחה
  • לפני 11 שנים
    ע"י: 1_אורח_כללי
    שלום- אני מוזמן בקרוב לראיון בחברה למשרת תכנות: מישהו יודע האם השאלות הם עדיין 4 השאלות כמו שאמרו ? או חזרו למימוש הפרוטוקול שהיה לפני כמה שנים? או שונה למשהו אחר ? תודה.
  • לפני 11 שנים
    ע"י: 1_אורח_כללי
    שלום לכם, זימנו אותי למבחני QA בצ׳ק פוינט, ואמרו לי שהתכנים שיהיו במבחן הם: subneting, מבחן שבודק הבנה לוגית ומבחן שמודד יכולות טכניות. האם מישהו מכיר את המבחן ויכול לתת לי אינפורמציה מפורטת יותר? אולי דוגמאות קונקרטיות לשאלות? אני מאוד אשמח לעזרה ....
  • לפני 11 שנים
    ע"י: 1_אורח_כללי
    טוב אני כבר הרבה זמן משתמש בפורום הזה ונהנה מכל מה שאנשים מעלים לכאן והיות ואני גם מתעב תאגידים גדולים אז החלטתי להעלות כאן את המבחן (הראשון) המפורט של check point. הייתי שם ממש לא מזמן ויש לי את כל השאלות די טריות בראש, אגב אני בחרתי לממש ב - #C (אבל אלו אותן שאלות בכל השפות). כמו שציינו קודם יש למבחן 3 חלקים: חלק ראשון הכי גדול שבו 4 שאלות תכנותיות והוא נמשך 3-4 שעות, חלק שני של שעה וחצי ובו נדרשים להריץ קצת פקודות בסיסיות של תקשורת בין שתי מכונות לינוקס ובנוסף גם לקמפל ולהתקין קוד תוכנה מוכן, חלק שלישי הוא בן רק חצי שעה והוא מבחן עיצוב גרפי. חלק א: ישנה כביכול מערכת שאמורה לבצע 4 פעולות (כל פעולה זה שאלה): פיירוול של מסרים, סינון מסרים עם וירוסים, סינון מסרים עם מילות מוגנות וניטור של תעבורת המסרים. מקבלים solution מוכן שבתוכו יש פרויקט שבו 4 מחלקות, כל מחלקה מייצגת שאלה נפרדת, בכל מחלקה יש פונקציה או שתיים ריקות או לא תקינות שאותן אתם צריכים למלא/לתקן. חוץ מהמחלקות האלו ישנן עוד מחלקות נתונים ועוד פרויקטים אבל בהם לא נוגעים. מחלקה חשובה מאוד היא מחלקת הודעה/מסר (message) שבאה לייצג טיפוס נתונים מסוג הודעה, בטיפוס הזה יש כתובת שולח, כתובת מקבל, תוכן ההודעה (כמחרוזת) ועוד.. בנוסף לאחר שכתבתם את הקוד ישנו טסטר אוטומטי שהוא מריץ הרבה מסרים על המחלקות השונות והוא מדווח אם מה שכתבתם מתפקד כהלכה ואכן המחלקות מבצעות מה שצריך על המסרים ומקטלגות אותן נכון. שאלה 1 - צריך לכתוב חיפוש בעץ בינארי ממוין (כלומר לכל קודקוד הבנים משמאל קטנים יותר מהקודקוד ומימין גדולים יותר), ישנו עץ בינארי ממוין שמכיל בכל קודקוד כתובת אסורה (נמשל כתובת של ספאם), את העץ בונים בפונקציה אחרת שעוברת על קובץ טקסטואלי וממירה אותו לעץ אבל הקוד הזה לא אמור לעניין אותכם, בנוסף ישנה פונקציה שמקבלת הודעה ובה אתם צריכים לכתוב קוד שבודק שכתובת השולח וכתובת המקבל לא נמצאים בעץ, אם אחד מהם נמצא אז מחזירים enum שמייצג לזרוק את המסר אחרת מחזירים enum לקבל את המסר. שימו לב שהביצועים מאוד מאוד חשובים בייחוד בשאלה הזאת ולכן הדרך הכי טובה לדעתי לפתור את זה היא לעשות סריקה של העץ באמצעות while ולא רקורסיה! (מי שלא יודע שיחפש בגוגל איך מחפשים ערך באמצעות לולאה בעץ בינארי ממוין ודגש על ממוין!). כמה דגשים די טריוואלים: שימו לב שצריך לעשות 2 סריקות של העץ (אחת עבור כתובת השולח ושניה עבור המקבל) לכן כמובן שעדיף לכתוב את סריקת העץ כפונקציה נפרדת שמקבלת פרמטר כתובת ולקרוא לפונקציה פשוט פעמיים, דגש שני הוא שאין לאתחל את העץ בתוך הפונקצית טיפול מסרים שאתם כותבים כי אז עבור כל מסר העץ יאותחל מחדש, יש להגיד משתנה private מסוג העץ במחלקה (של השאלה) ובבנאי שלה לאתחל את העץ וכך הוא יאותחל רק פעם אחת. שאלה 2 - בשאלה זאת נדרשים לסרוק כל מסר ולגלות האם הוא מכיל וירוס, הסריקה מתבצעת באמצעות מחלקה אחרת שנקראת אנטי וירוס שבה לא אמורים לגעת (אבל כן להבין קצת את הקוד שלה), גם כאן יש לממש פונקציית טיפול במסרים כאשר כל מסר נשלח לאובייקט מסוג המחלקה האחרת ויש לו פונקציה שסורקת את המסר ומחזירה האם יש בו וירוס או אין ובהתאם אתם מחזירים את ה - enum המתאים. כמה דגשים: כמו בשאלה 1 גם כאן יש להגדיר משתנה פרטי מסוג מחלקת אנטי וירוס ולאתחל אותו בבנאי, חשוב לשים לב שהאתחול כולל גם new וגם קריאה לפונקציית setup (פונקציה של המחלקה) שהיא טוענת בסיס נתונים של הוירוסים וכך האובייקט אנטי וירוס מוכן לשימוש, אגב הצורה שבה הסריקה מתבצעת היא באמצעות ביטויים רגולרים אבל זה לא אמור לעניין אותכם, שימו לב שגם בקריאה אח"כ לפונקציית סריקת מסר מלבד המסר יש עוד כמה ערכים בוליאנים ששולחים אליה, יש ערך שנקרא fullscan שהוא צריך להיות false כי אם הוא true אז מה שיקרה זה שמסר שישלח יבדק כנגד כל הבסיס נתונים של הוירוסים שזה מיותר מכיוון שאם הוא false אז הוא סורק רק עד מציאת וירוס ראשון ואז מפסיק וזה ישפר לכם את הביצועים, יש עוד פרמטר (הראשון ביותר) שבכלל אין לו שימוש בתוך האנטי וירוס וסתם כתבו אותו כדי לבלבל, והפרמטר האחרון הוא loadviruses אך הוא יכול להיות true או false זה לא משנה, כי גם ככה בכל קריאה לסריקת מסר יש בדיקה האם הבסיס נתונים כבר נטען קודם ואם כן אז לא טוענים אותו גם האם הפרמטר הזה יהיה true. שאלה 3 - יש מחלקה שבתוכה יש פונקציה שמקבלת את המסר וקוראת לפונקציות אחרת במטרה לראות האם במסר יש מילים שמורות אסורות, אם כן אז יש להחזיר enum של זריקת המסר אחרת קבלת המסר, הקוד כבר כולו כתוב כולל פונקציית קבלת המסר אבל יש בקוד הזה הרבה באגים ובכלל המצב הראשוני שלו שהוא מתרסק אם מריצים אותו. כמה דגשים: יש שם בהתחלה משתנה result שאותו מחזירה הפונקציה אך בשני ה - if העיקריים לא מוצב בו הערך ואת זה יש לתקן, יש משתנה messagedata שלא מקבל ערך בהתחלה. שימו לב שהתיקונים הם אומנם ברובם בפונקציית הקבלת מסר אך יש גם לתקן קצת בפונקציות האחרות, בנוסף בשאלה הזאת מאוד עוזר בסוף להריץ את הטסטר האוטומטי כדי לוודות שכל המסרים קוטלגו כמו שצריך. שאלה 4 - צריך לכתוב 2 פונקציות, אחת היא של קבלת המסרים והשנייה היא החזרה של כל הכתובות השולחות שמהם נשלחו יותר מ - 10% מהמסרים עד עכשיו. הדרך לממש את זה היא באמצעות hashtable וביתר פירוט dictionary ב - #C, כל מפתח (key) יהיה בו כתובת שולח מסוימת וכל ערך יהיה כמה מסרים הכתובת הזאת שלחה, כלומר בעת קבלת מסר חדש בפונקציית הקבלת מסרים יש להעלות את המונה של מפתח כתובת השולח ב - 1 (או כמובן אם זו פעם ראשונה אז יש להוסיף מפתח חדש עם הערך 1) בנוסף יש לשמור מונה פשוט גלובלי ברמת המחלקה שכל פעם שמתקבל מסר חדש אז הוא מוגדל ב - 1. בפונקציית החזרת הכתובות יש פשוט לעשות לולאה שסורקת את כל המפתחות ב - hashtable ועבור כל מפתח בודקת האם הערך שלו לחלק בערך של המונה הכללי גדול שווה מ - 0.1 (כלומר שווה או גדול מ - 10%), אם כן אז מוסיפים אותו לרשימה שאותה בסוף מחזירים בפונקציה. כמה דגשים בכלל לכל חלק א: חשוב להגן על הקוד כמו נמשל בפונקציית קבלת ההודעות לבדוק שההודעה המתקבלת היא לא null ושהמסר בתוכה לא ריק, כדאי גם להשתמש ב - try catch בייחוד במצבים של נמשל פניה לאנטי וירוס החיצוני בשאלה 2 שם אנחנו לא יודעים איך מימשו אותו. חלק ב: בחלק זה בודקים ידיעה והבנה של פקודות תקשורת בסיסיות, קימפול והתקנה בלינוקס, זה נעשה באמצעות מסמך מפורט שבכל שורה אומר תעשו כך ותעשו כך, אתם צריכים לעקוב שורה אחרי שורה במסמך ולבצע בפועל את ההוראות על שתי מכונות וירטואליות של לינוקס שהן באותה הרשת, ברוב ההוראות במסמך גם רשום איזו פקודה יש להקליד, נמשל רשום שיש לבדוק תקשורת על ידי כתיבת ping וכתובת ה - ip של המכונה השניה, אך יש שורות שבהן לא רשומות הפקודות כמו נמשל רושמים שם שיש לקמפל (תוכנה מסוימת שמקודם הורדנו) בדרך הסטנדרטית ואחר כך להתקין אותה אבל לא רושמים איזה פקודות להקליד. אנסה לפרט מה שאני זוכר שיש לעשות שם: דבר ראשון יש לבדוק כתובות ip של שתי המכונות, אחר כך לעשות פינג מהמכונה הראשונה לעצמה, אחר כך מהראשונה לשניה, להוריד קובץ tar/zip מהמכונה השניה לראשונה באמצעות ftp, הקובץ הוא למעשה התקנה של תוכנה בשם pure ftp, יש לפתוח אותו, לקמפל את התוכן שלו, להתקין את התוכנה, להריץ אותה, לעשות kill לתהליך שלה, לחפש בתוך אחד ה - headers שלה מסר מסוים (welcome to), לפתוח את המסר הזה ולהוסיף לו את המילה my, לקמפל שוב ולהתקין את התוכנה מחדש, לפתוח את התוכנה ולראות שהמסר שהיא מציגה בהתחלה השתנה בהצלחה. כמה דגשים: כמו שקודם אמרתי רוב הדברים שיש לעשות רשום במסמך איזה פקודות צריך להקליד כך שאין צורך לזכור פקודות בעל פה, כשמחפשים את המסר שיש לשנות אז לחפש רק את המילים "welcome to" ולא את כל המסר (כי זה נראה לי מסר שמשורשר משני מקומות שונים) אם אני זוכר נכון זה נמצא בקובץ messages_en.h, את הקימפול הסטנדרטי אפשר לעשות עם gcc או make אבל אין צורך לשבור את הראש ולמצוא מה צריך לקמפל אלא יש שם קובץ טקסט שנקרא install, פותחים אותו עם עורך טקסט וישר בשורה הראשונה רשומות 3 פקודות שצריך להריץ, מריצים את 3 הפקודות אחת אחרי השניה והן גם מקמפלות וגם מתקינות את התוכנה, כדי להפעיל את התוכנה אני נכנסתי פשוט לתיקיית הקיצורי דרך לתוכנות מותקנות שהיא אם אני זוכר נכון usr/local/sbin (בכל מקרה כאשר מריצים את 3 הפקודות אז רשום לאיפה הוא מתקין אותה). חלק ג: טוב האמת שכאן אין לי יותר מדי מה לומר וגם אין כל כך איך להתכונן לזה, מדובר במשימת עיצוב גרפי, אגב אין חובה לעשות את החלק הזה אבל מי שעושה אותו יהיה לו יתרון בקבלה לתפקידים שדורשים יכולת עיצוב ממשקים, במשימה מדברים על מערכת שמשמשת לחיפוש עובדים בחברה, נותנים תמונה שבתוכה יש כביכול תוצאת חיפוש אחת שכוללת תמונה של עובדת, כמה פקדים והרבה מידע עליה שנמצא בדרך כלל כתיבות טקסט, התצוגה הראשונית בתמונה לא נראית טוב ודי מבולגנת, המשימה היא לפתוח את התמונה בשלמותה בצייר ולגזור ממנה חלקים שונים כמו נמשל התיבות טקסט ואותן לארגן בתמונה חדשה (חלון צייר שני) כך שבסופו של דבר תתקבל תמונה סופית שונה שמציגה את העובד ופרטיו בצורה הרבה יותר מאורגנת, יפה ושימושית, ניתן לשנות את הגודל של הפקדים, צבעים ובכלל כל דבר כמעט שאפשר לעשות בצייר. כמה דגשים: כדי להתכונן לחלק זה אז למי שלא מכיר אולי כדאי באמת לעבוד קצת עם הצייר, לגזור חלקים מתמונה לשנות גדלים וכ"ו, כדאי לעבוד בצייר במוד זום מוגדל (נמשל 200%), כדאי להתחיל מלחשוב על קבוצות פקדים שונות עם מכנה משותף כמו נמשל כל התיבות שמכילות את פרטי הכתובת ואז פשוט לגזור אותן מהתמונה הראשונה ולשים אותן ביחד יפה בשניה, כאמור הכי טוב לגזור כל פעם דברים מהראשונה וכך לאט לאט התמונה הראשונה מתרקונת ונהיה יותר קל להתסכל עליה ולתכנן מה עושים (זו לפחות הדרך שאני מצאתי בשבילי הכי טובה אך כמובן שיש עוד דרכים). אה ודבר אחרון לסיום נזכרתי במשהו מצחיק, בסוף המבחן הבוחן ניגש לכל אחד ואז שואל אותו האם הוא ראה את המבחן הזה בעבר, מה בדיוק הוא מצפה שיענו לו??? ובכלל נראה לי שכמעט כולם ראו את המבחן הזה בעבר.. בהצלחה ודיר בלק אם מישהו מספר משהו/נותן רמז על המבחן הזה אחרת פשוט צ'ק פוינט ימצאו את מה שרשמתי כאן וישנו את המבחן..
  • לפני 11 שנים
    ע"י: 1_אורח_כללי
    טוב אני כבר הרבה זמן משתמש בפורום הזה ונהנה מכל מה שאנשים מעלים לכאן והיות ואני גם מתעב תאגידים גדולים אז החלטתי להעלות כאן את המבחן (הראשון) המפורט של check point. הייתי שם ממש לא מזמן ויש לי את כל השאלות די טריות בראש, אגב אני בחרתי לממש ב - #C (אבל אלו אותן שאלות בכל השפות). כמו שציינו קודם יש למבחן 3 חלקים: חלק ראשון הכי גדול שבו 4 שאלות תכנותיות והוא נמשך 3-4 שעות, חלק שני של שעה וחצי ובו נדרשים להריץ קצת פקודות בסיסיות של תקשורת בין שתי מכונות לינוקס ובנוסף גם לקמפל ולהתקין קוד תוכנה מוכן, חלק שלישי הוא בן רק חצי שעה והוא מבחן עיצוב גרפי. חלק א: ישנה כביכול מערכת שאמורה לבצע 4 פעולות (כל פעולה זה שאלה): פיירוול של מסרים, סינון מסרים עם וירוסים, סינון מסרים עם מילות מוגנות וניטור של תעבורת המסרים. מקבלים solution מוכן שבתוכו יש פרויקט שבו 4 מחלקות, כל מחלקה מייצגת שאלה נפרדת, בכל מחלקה יש פונקציה או שתיים ריקות או לא תקינות שאותן אתם צריכים למלא/לתקן. חוץ מהמחלקות האלו ישנן עוד מחלקות נתונים ועוד פרויקטים אבל בהם לא נוגעים. מחלקה חשובה מאוד היא מחלקת הודעה/מסר (message) שבאה לייצג טיפוס נתונים מסוג הודעה, בטיפוס הזה יש כתובת שולח, כתובת מקבל, תוכן ההודעה (כמחרוזת) ועוד.. בנוסף לאחר שכתבתם את הקוד ישנו טסטר אוטומטי שהוא מריץ הרבה מסרים על המחלקות השונות והוא מדווח אם מה שכתבתם מתפקד כהלכה ואכן המחלקות מבצעות מה שצריך על המסרים ומקטלגות אותן נכון. שאלה 1 - צריך לכתוב חיפוש בעץ בינארי ממוין (כלומר לכל קודקוד הבנים משמאל קטנים יותר מהקודקוד ומימין גדולים יותר), ישנו עץ בינארי ממוין שמכיל בכל קודקוד כתובת אסורה (נמשל כתובת של ספאם), את העץ בונים בפונקציה אחרת שעוברת על קובץ טקסטואלי וממירה אותו לעץ אבל הקוד הזה לא אמור לעניין אותכם, בנוסף ישנה פונקציה שמקבלת הודעה ובה אתם צריכים לכתוב קוד שבודק שכתובת השולח וכתובת המקבל לא נמצאים בעץ, אם אחד מהם נמצא אז מחזירים enum שמייצג לזרוק את המסר אחרת מחזירים enum לקבל את המסר. שימו לב שהביצועים מאוד מאוד חשובים בייחוד בשאלה הזאת ולכן הדרך הכי טובה לדעתי לפתור את זה היא לעשות סריקה של העץ באמצעות while ולא רקורסיה! (מי שלא יודע שיחפש בגוגל איך מחפשים ערך באמצעות לולאה בעץ בינארי ממוין ודגש על ממוין!). כמה דגשים די טריוואלים: שימו לב שצריך לעשות 2 סריקות של העץ (אחת עבור כתובת השולח ושניה עבור המקבל) לכן כמובן שעדיף לכתוב את סריקת העץ כפונקציה נפרדת שמקבלת פרמטר כתובת ולקרוא לפונקציה פשוט פעמיים, דגש שני הוא שאין לאתחל את העץ בתוך הפונקצית טיפול מסרים שאתם כותבים כי אז עבור כל מסר העץ יאותחל מחדש, יש להגיד משתנה private מסוג העץ במחלקה (של השאלה) ובבנאי שלה לאתחל את העץ וכך הוא יאותחל רק פעם אחת. שאלה 2 - בשאלה זאת נדרשים לסרוק כל מסר ולגלות האם הוא מכיל וירוס, הסריקה מתבצעת באמצעות מחלקה אחרת שנקראת אנטי וירוס שבה לא אמורים לגעת (אבל כן להבין קצת את הקוד שלה), גם כאן יש לממש פונקציית טיפול במסרים כאשר כל מסר נשלח לאובייקט מסוג המחלקה האחרת ויש לו פונקציה שסורקת את המסר ומחזירה האם יש בו וירוס או אין ובהתאם אתם מחזירים את ה - enum המתאים. כמה דגשים: כמו בשאלה 1 גם כאן יש להגדיר משתנה פרטי מסוג מחלקת אנטי וירוס ולאתחל אותו בבנאי, חשוב לשים לב שהאתחול כולל גם new וגם קריאה לפונקציית setup (פונקציה של המחלקה) שהיא טוענת בסיס נתונים של הוירוסים וכך האובייקט אנטי וירוס מוכן לשימוש, אגב הצורה שבה הסריקה מתבצעת היא באמצעות ביטויים רגולרים אבל זה לא אמור לעניין אותכם, שימו לב שגם בקריאה אח"כ לפונקציית סריקת מסר מלבד המסר יש עוד כמה ערכים בוליאנים ששולחים אליה, יש ערך שנקרא fullscan שהוא צריך להיות false כי אם הוא true אז מה שיקרה זה שמסר שישלח יבדק כנגד כל הבסיס נתונים של הוירוסים שזה מיותר מכיוון שאם הוא false אז הוא סורק רק עד מציאת וירוס ראשון ואז מפסיק וזה ישפר לכם את הביצועים, יש עוד פרמטר (הראשון ביותר) שבכלל אין לו שימוש בתוך האנטי וירוס וסתם כתבו אותו כדי לבלבל, והפרמטר האחרון הוא loadviruses אך הוא יכול להיות true או false זה לא משנה, כי גם ככה בכל קריאה לסריקת מסר יש בדיקה האם הבסיס נתונים כבר נטען קודם ואם כן אז לא טוענים אותו גם האם הפרמטר הזה יהיה true. שאלה 3 - יש מחלקה שבתוכה יש פונקציה שמקבלת את המסר וקוראת לפונקציות אחרת במטרה לראות האם במסר יש מילים שמורות אסורות, אם כן אז יש להחזיר enum של זריקת המסר אחרת קבלת המסר, הקוד כבר כולו כתוב כולל פונקציית קבלת המסר אבל יש בקוד הזה הרבה באגים ובכלל המצב הראשוני שלו שהוא מתרסק אם מריצים אותו. כמה דגשים: יש שם בהתחלה משתנה result שאותו מחזירה הפונקציה אך בשני ה - if העיקריים לא מוצב בו הערך ואת זה יש לתקן, יש משתנה messagedata שלא מקבל ערך בהתחלה. שימו לב שהתיקונים הם אומנם ברובם בפונקציית הקבלת מסר אך יש גם לתקן קצת בפונקציות האחרות, בנוסף בשאלה הזאת מאוד עוזר בסוף להריץ את הטסטר האוטומטי כדי לוודות שכל המסרים קוטלגו כמו שצריך. שאלה 4 - צריך לכתוב 2 פונקציות, אחת היא של קבלת המסרים והשנייה היא החזרה של כל הכתובות השולחות שמהם נשלחו יותר מ - 10% מהמסרים עד עכשיו. הדרך לממש את זה היא באמצעות hashtable וביתר פירוט dictionary ב - #C, כל מפתח (key) יהיה בו כתובת שולח מסוימת וכל ערך יהיה כמה מסרים הכתובת הזאת שלחה, כלומר בעת קבלת מסר חדש בפונקציית הקבלת מסרים יש להעלות את המונה של מפתח כתובת השולח ב - 1 (או כמובן אם זו פעם ראשונה אז יש להוסיף מפתח חדש עם הערך 1) בנוסף יש לשמור מונה פשוט גלובלי ברמת המחלקה שכל פעם שמתקבל מסר חדש אז הוא מוגדל ב - 1. בפונקציית החזרת הכתובות יש פשוט לעשות לולאה שסורקת את כל המפתחות ב - hashtable ועבור כל מפתח בודקת האם הערך שלו לחלק בערך של המונה הכללי גדול שווה מ - 0.1 (כלומר שווה או גדול מ - 10%), אם כן אז מוסיפים אותו לרשימה שאותה בסוף מחזירים בפונקציה. כמה דגשים בכלל לכל חלק א: חשוב להגן על הקוד כמו נמשל בפונקציית קבלת ההודעות לבדוק שההודעה המתקבלת היא לא null ושהמסר בתוכה לא ריק, כדאי גם להשתמש ב - try catch בייחוד במצבים של נמשל פניה לאנטי וירוס החיצוני בשאלה 2 שם אנחנו לא יודעים איך מימשו אותו. חלק ב: בחלק זה בודקים ידיעה והבנה של פקודות תקשורת בסיסיות, קימפול והתקנה בלינוקס, זה נעשה באמצעות מסמך מפורט שבכל שורה אומר תעשו כך ותעשו כך, אתם צריכים לעקוב שורה אחרי שורה במסמך ולבצע בפועל את ההוראות על שתי מכונות וירטואליות של לינוקס שהן באותה הרשת, ברוב ההוראות במסמך גם רשום איזו פקודה יש להקליד, נמשל רשום שיש לבדוק תקשורת על ידי כתיבת ping וכתובת ה - ip של המכונה השניה, אך יש שורות שבהן לא רשומות הפקודות כמו נמשל רושמים שם שיש לקמפל (תוכנה מסוימת שמקודם הורדנו) בדרך הסטנדרטית ואחר כך להתקין אותה אבל לא רושמים איזה פקודות להקליד. אנסה לפרט מה שאני זוכר שיש לעשות שם: דבר ראשון יש לבדוק כתובות ip של שתי המכונות, אחר כך לעשות פינג מהמכונה הראשונה לעצמה, אחר כך מהראשונה לשניה, להוריד קובץ tar/zip מהמכונה השניה לראשונה באמצעות ftp, הקובץ הוא למעשה התקנה של תוכנה בשם pure ftp, יש לפתוח אותו, לקמפל את התוכן שלו, להתקין את התוכנה, להריץ אותה, לעשות kill לתהליך שלה, לחפש בתוך אחד ה - headers שלה מסר מסוים (welcome to), לפתוח את המסר הזה ולהוסיף לו את המילה my, לקמפל שוב ולהתקין את התוכנה מחדש, לפתוח את התוכנה ולראות שהמסר שהיא מציגה בהתחלה השתנה בהצלחה. כמה דגשים: כמו שקודם אמרתי רוב הדברים שיש לעשות רשום במסמך איזה פקודות צריך להקליד כך שאין צורך לזכור פקודות בעל פה, כשמחפשים את המסר שיש לשנות אז לחפש רק את המילים "welcome to" ולא את כל המסר (כי זה נראה לי מסר שמשורשר משני מקומות שונים) אם אני זוכר נכון זה נמצא בקובץ messages_en.h, את הקימפול הסטנדרטי אפשר לעשות עם gcc או make אבל אין צורך לשבור את הראש ולמצוא מה צריך לקמפל אלא יש שם קובץ טקסט שנקרא install, פותחים אותו עם עורך טקסט וישר בשורה הראשונה רשומות 3 פקודות שצריך להריץ, מריצים את 3 הפקודות אחת אחרי השניה והן גם מקמפלות וגם מתקינות את התוכנה, כדי להפעיל את התוכנה אני נכנסתי פשוט לתיקיית הקיצורי דרך לתוכנות מותקנות שהיא אם אני זוכר נכון usr/local/sbin (בכל מקרה כאשר מריצים את 3 הפקודות אז רשום לאיפה הוא מתקין אותה). חלק ג: טוב האמת שכאן אין לי יותר מדי מה לומר וגם אין כל כך איך להתכונן לזה, מדובר במשימת עיצוב גרפי, אגב אין חובה לעשות את החלק הזה אבל מי שעושה אותו יהיה לו יתרון בקבלה לתפקידים שדורשים יכולת עיצוב ממשקים, במשימה מדברים על מערכת שמשמשת לחיפוש עובדים בחברה, נותנים תמונה שבתוכה יש כביכול תוצאת חיפוש אחת שכוללת תמונה של עובדת, כמה פקדים והרבה מידע עליה שנמצא בדרך כלל כתיבות טקסט, התצוגה הראשונית בתמונה לא נראית טוב ודי מבולגנת, המשימה היא לפתוח את התמונה בשלמותה בצייר ולגזור ממנה חלקים שונים כמו נמשל התיבות טקסט ואותן לארגן בתמונה חדשה (חלון צייר שני) כך שבסופו של דבר תתקבל תמונה סופית שונה שמציגה את העובד ופרטיו בצורה הרבה יותר מאורגנת, יפה ושימושית, ניתן לשנות את הגודל של הפקדים, צבעים ובכלל כל דבר כמעט שאפשר לעשות בצייר. כמה דגשים: כדי להתכונן לחלק זה אז למי שלא מכיר אולי כדאי באמת לעבוד קצת עם הצייר, לגזור חלקים מתמונה לשנות גדלים וכ"ו, כדאי לעבוד בצייר במוד זום מוגדל (נמשל 200%), כדאי להתחיל מלחשוב על קבוצות פקדים שונות עם מכנה משותף כמו נמשל כל התיבות שמכילות את פרטי הכתובת ואז פשוט לגזור אותן מהתמונה הראשונה ולשים אותן ביחד יפה בשניה, כאמור הכי טוב לגזור כל פעם דברים מהראשונה וכך לאט לאט התמונה הראשונה מתרקונת ונהיה יותר קל להתסכל עליה ולתכנן מה עושים (זו לפחות הדרך שאני מצאתי בשבילי הכי טובה אך כמובן שיש עוד דרכים). אה ודבר אחרון לסיום נזכרתי במשהו מצחיק, בסוף המבחן הבוחן ניגש לכל אחד ואז שואל אותו האם הוא ראה את המבחן הזה בעבר, מה בדיוק הוא מצפה שיענו לו??? ובכלל נראה לי שכמעט כולם ראו את המבחן הזה בעבר.. בהצלחה ודיר בלק אם מישהו מספר משהו/נותן רמז על המבחן הזה אחרת פשוט צ'ק פוינט ימצאו את מה שרשמתי כאן וישנו את המבחן.. יש למשהו תובנות נוספות???? (קטע קוד כתוב .... או שיכול להוסיף )
  • לפני 11 שנים
    ע"י: 1_אורח_כללי
    טוב אני כבר הרבה זמן משתמש בפורום הזה ונהנה מכל מה שאנשים מעלים לכאן והיות ואני גם מתעב תאגידים גדולים אז החלטתי להעלות כאן את המבחן (הראשון) המפורט של check point. הייתי שם ממש לא מזמן ויש לי את כל השאלות די טריות בראש, אגב אני בחרתי לממש ב - #C (אבל אלו אותן שאלות בכל השפות). כמו שציינו קודם יש למבחן 3 חלקים: חלק ראשון הכי גדול שבו 4 שאלות תכנותיות והוא נמשך 3-4 שעות, חלק שני של שעה וחצי ובו נדרשים להריץ קצת פקודות בסיסיות של תקשורת בין שתי מכונות לינוקס ובנוסף גם לקמפל ולהתקין קוד תוכנה מוכן, חלק שלישי הוא בן רק חצי שעה והוא מבחן עיצוב גרפי. חלק א: ישנה כביכול מערכת שאמורה לבצע 4 פעולות (כל פעולה זה שאלה): פיירוול של מסרים, סינון מסרים עם וירוסים, סינון מסרים עם מילות מוגנות וניטור של תעבורת המסרים. מקבלים solution מוכן שבתוכו יש פרויקט שבו 4 מחלקות, כל מחלקה מייצגת שאלה נפרדת, בכל מחלקה יש פונקציה או שתיים ריקות או לא תקינות שאותן אתם צריכים למלא/לתקן. חוץ מהמחלקות האלו ישנן עוד מחלקות נתונים ועוד פרויקטים אבל בהם לא נוגעים. מחלקה חשובה מאוד היא מחלקת הודעה/מסר (message) שבאה לייצג טיפוס נתונים מסוג הודעה, בטיפוס הזה יש כתובת שולח, כתובת מקבל, תוכן ההודעה (כמחרוזת) ועוד.. בנוסף לאחר שכתבתם את הקוד ישנו טסטר אוטומטי שהוא מריץ הרבה מסרים על המחלקות השונות והוא מדווח אם מה שכתבתם מתפקד כהלכה ואכן המחלקות מבצעות מה שצריך על המסרים ומקטלגות אותן נכון. שאלה 1 - צריך לכתוב חיפוש בעץ בינארי ממוין (כלומר לכל קודקוד הבנים משמאל קטנים יותר מהקודקוד ומימין גדולים יותר), ישנו עץ בינארי ממוין שמכיל בכל קודקוד כתובת אסורה (נמשל כתובת של ספאם), את העץ בונים בפונקציה אחרת שעוברת על קובץ טקסטואלי וממירה אותו לעץ אבל הקוד הזה לא אמור לעניין אותכם, בנוסף ישנה פונקציה שמקבלת הודעה ובה אתם צריכים לכתוב קוד שבודק שכתובת השולח וכתובת המקבל לא נמצאים בעץ, אם אחד מהם נמצא אז מחזירים enum שמייצג לזרוק את המסר אחרת מחזירים enum לקבל את המסר. שימו לב שהביצועים מאוד מאוד חשובים בייחוד בשאלה הזאת ולכן הדרך הכי טובה לדעתי לפתור את זה היא לעשות סריקה של העץ באמצעות while ולא רקורסיה! (מי שלא יודע שיחפש בגוגל איך מחפשים ערך באמצעות לולאה בעץ בינארי ממוין ודגש על ממוין!). כמה דגשים די טריוואלים: שימו לב שצריך לעשות 2 סריקות של העץ (אחת עבור כתובת השולח ושניה עבור המקבל) לכן כמובן שעדיף לכתוב את סריקת העץ כפונקציה נפרדת שמקבלת פרמטר כתובת ולקרוא לפונקציה פשוט פעמיים, דגש שני הוא שאין לאתחל את העץ בתוך הפונקצית טיפול מסרים שאתם כותבים כי אז עבור כל מסר העץ יאותחל מחדש, יש להגיד משתנה private מסוג העץ במחלקה (של השאלה) ובבנאי שלה לאתחל את העץ וכך הוא יאותחל רק פעם אחת. שאלה 2 - בשאלה זאת נדרשים לסרוק כל מסר ולגלות האם הוא מכיל וירוס, הסריקה מתבצעת באמצעות מחלקה אחרת שנקראת אנטי וירוס שבה לא אמורים לגעת (אבל כן להבין קצת את הקוד שלה), גם כאן יש לממש פונקציית טיפול במסרים כאשר כל מסר נשלח לאובייקט מסוג המחלקה האחרת ויש לו פונקציה שסורקת את המסר ומחזירה האם יש בו וירוס או אין ובהתאם אתם מחזירים את ה - enum המתאים. כמה דגשים: כמו בשאלה 1 גם כאן יש להגדיר משתנה פרטי מסוג מחלקת אנטי וירוס ולאתחל אותו בבנאי, חשוב לשים לב שהאתחול כולל גם new וגם קריאה לפונקציית setup (פונקציה של המחלקה) שהיא טוענת בסיס נתונים של הוירוסים וכך האובייקט אנטי וירוס מוכן לשימוש, אגב הצורה שבה הסריקה מתבצעת היא באמצעות ביטויים רגולרים אבל זה לא אמור לעניין אותכם, שימו לב שגם בקריאה אח"כ לפונקציית סריקת מסר מלבד המסר יש עוד כמה ערכים בוליאנים ששולחים אליה, יש ערך שנקרא fullscan שהוא צריך להיות false כי אם הוא true אז מה שיקרה זה שמסר שישלח יבדק כנגד כל הבסיס נתונים של הוירוסים שזה מיותר מכיוון שאם הוא false אז הוא סורק רק עד מציאת וירוס ראשון ואז מפסיק וזה ישפר לכם את הביצועים, יש עוד פרמטר (הראשון ביותר) שבכלל אין לו שימוש בתוך האנטי וירוס וסתם כתבו אותו כדי לבלבל, והפרמטר האחרון הוא loadviruses אך הוא יכול להיות true או false זה לא משנה, כי גם ככה בכל קריאה לסריקת מסר יש בדיקה האם הבסיס נתונים כבר נטען קודם ואם כן אז לא טוענים אותו גם האם הפרמטר הזה יהיה true. שאלה 3 - יש מחלקה שבתוכה יש פונקציה שמקבלת את המסר וקוראת לפונקציות אחרת במטרה לראות האם במסר יש מילים שמורות אסורות, אם כן אז יש להחזיר enum של זריקת המסר אחרת קבלת המסר, הקוד כבר כולו כתוב כולל פונקציית קבלת המסר אבל יש בקוד הזה הרבה באגים ובכלל המצב הראשוני שלו שהוא מתרסק אם מריצים אותו. כמה דגשים: יש שם בהתחלה משתנה result שאותו מחזירה הפונקציה אך בשני ה - if העיקריים לא מוצב בו הערך ואת זה יש לתקן, יש משתנה messagedata שלא מקבל ערך בהתחלה. שימו לב שהתיקונים הם אומנם ברובם בפונקציית הקבלת מסר אך יש גם לתקן קצת בפונקציות האחרות, בנוסף בשאלה הזאת מאוד עוזר בסוף להריץ את הטסטר האוטומטי כדי לוודות שכל המסרים קוטלגו כמו שצריך. שאלה 4 - צריך לכתוב 2 פונקציות, אחת היא של קבלת המסרים והשנייה היא החזרה של כל הכתובות השולחות שמהם נשלחו יותר מ - 10% מהמסרים עד עכשיו. הדרך לממש את זה היא באמצעות hashtable וביתר פירוט dictionary ב - #C, כל מפתח (key) יהיה בו כתובת שולח מסוימת וכל ערך יהיה כמה מסרים הכתובת הזאת שלחה, כלומר בעת קבלת מסר חדש בפונקציית הקבלת מסרים יש להעלות את המונה של מפתח כתובת השולח ב - 1 (או כמובן אם זו פעם ראשונה אז יש להוסיף מפתח חדש עם הערך 1) בנוסף יש לשמור מונה פשוט גלובלי ברמת המחלקה שכל פעם שמתקבל מסר חדש אז הוא מוגדל ב - 1. בפונקציית החזרת הכתובות יש פשוט לעשות לולאה שסורקת את כל המפתחות ב - hashtable ועבור כל מפתח בודקת האם הערך שלו לחלק בערך של המונה הכללי גדול שווה מ - 0.1 (כלומר שווה או גדול מ - 10%), אם כן אז מוסיפים אותו לרשימה שאותה בסוף מחזירים בפונקציה. כמה דגשים בכלל לכל חלק א: חשוב להגן על הקוד כמו נמשל בפונקציית קבלת ההודעות לבדוק שההודעה המתקבלת היא לא null ושהמסר בתוכה לא ריק, כדאי גם להשתמש ב - try catch בייחוד במצבים של נמשל פניה לאנטי וירוס החיצוני בשאלה 2 שם אנחנו לא יודעים איך מימשו אותו. חלק ב: בחלק זה בודקים ידיעה והבנה של פקודות תקשורת בסיסיות, קימפול והתקנה בלינוקס, זה נעשה באמצעות מסמך מפורט שבכל שורה אומר תעשו כך ותעשו כך, אתם צריכים לעקוב שורה אחרי שורה במסמך ולבצע בפועל את ההוראות על שתי מכונות וירטואליות של לינוקס שהן באותה הרשת, ברוב ההוראות במסמך גם רשום איזו פקודה יש להקליד, נמשל רשום שיש לבדוק תקשורת על ידי כתיבת ping וכתובת ה - ip של המכונה השניה, אך יש שורות שבהן לא רשומות הפקודות כמו נמשל רושמים שם שיש לקמפל (תוכנה מסוימת שמקודם הורדנו) בדרך הסטנדרטית ואחר כך להתקין אותה אבל לא רושמים איזה פקודות להקליד. אנסה לפרט מה שאני זוכר שיש לעשות שם: דבר ראשון יש לבדוק כתובות ip של שתי המכונות, אחר כך לעשות פינג מהמכונה הראשונה לעצמה, אחר כך מהראשונה לשניה, להוריד קובץ tar/zip מהמכונה השניה לראשונה באמצעות ftp, הקובץ הוא למעשה התקנה של תוכנה בשם pure ftp, יש לפתוח אותו, לקמפל את התוכן שלו, להתקין את התוכנה, להריץ אותה, לעשות kill לתהליך שלה, לחפש בתוך אחד ה - headers שלה מסר מסוים (welcome to), לפתוח את המסר הזה ולהוסיף לו את המילה my, לקמפל שוב ולהתקין את התוכנה מחדש, לפתוח את התוכנה ולראות שהמסר שהיא מציגה בהתחלה השתנה בהצלחה. כמה דגשים: כמו שקודם אמרתי רוב הדברים שיש לעשות רשום במסמך איזה פקודות צריך להקליד כך שאין צורך לזכור פקודות בעל פה, כשמחפשים את המסר שיש לשנות אז לחפש רק את המילים "welcome to" ולא את כל המסר (כי זה נראה לי מסר שמשורשר משני מקומות שונים) אם אני זוכר נכון זה נמצא בקובץ messages_en.h, את הקימפול הסטנדרטי אפשר לעשות עם gcc או make אבל אין צורך לשבור את הראש ולמצוא מה צריך לקמפל אלא יש שם קובץ טקסט שנקרא install, פותחים אותו עם עורך טקסט וישר בשורה הראשונה רשומות 3 פקודות שצריך להריץ, מריצים את 3 הפקודות אחת אחרי השניה והן גם מקמפלות וגם מתקינות את התוכנה, כדי להפעיל את התוכנה אני נכנסתי פשוט לתיקיית הקיצורי דרך לתוכנות מותקנות שהיא אם אני זוכר נכון usr/local/sbin (בכל מקרה כאשר מריצים את 3 הפקודות אז רשום לאיפה הוא מתקין אותה). חלק ג: טוב האמת שכאן אין לי יותר מדי מה לומר וגם אין כל כך איך להתכונן לזה, מדובר במשימת עיצוב גרפי, אגב אין חובה לעשות את החלק הזה אבל מי שעושה אותו יהיה לו יתרון בקבלה לתפקידים שדורשים יכולת עיצוב ממשקים, במשימה מדברים על מערכת שמשמשת לחיפוש עובדים בחברה, נותנים תמונה שבתוכה יש כביכול תוצאת חיפוש אחת שכוללת תמונה של עובדת, כמה פקדים והרבה מידע עליה שנמצא בדרך כלל כתיבות טקסט, התצוגה הראשונית בתמונה לא נראית טוב ודי מבולגנת, המשימה היא לפתוח את התמונה בשלמותה בצייר ולגזור ממנה חלקים שונים כמו נמשל התיבות טקסט ואותן לארגן בתמונה חדשה (חלון צייר שני) כך שבסופו של דבר תתקבל תמונה סופית שונה שמציגה את העובד ופרטיו בצורה הרבה יותר מאורגנת, יפה ושימושית, ניתן לשנות את הגודל של הפקדים, צבעים ובכלל כל דבר כמעט שאפשר לעשות בצייר. כמה דגשים: כדי להתכונן לחלק זה אז למי שלא מכיר אולי כדאי באמת לעבוד קצת עם הצייר, לגזור חלקים מתמונה לשנות גדלים וכ"ו, כדאי לעבוד בצייר במוד זום מוגדל (נמשל 200%), כדאי להתחיל מלחשוב על קבוצות פקדים שונות עם מכנה משותף כמו נמשל כל התיבות שמכילות את פרטי הכתובת ואז פשוט לגזור אותן מהתמונה הראשונה ולשים אותן ביחד יפה בשניה, כאמור הכי טוב לגזור כל פעם דברים מהראשונה וכך לאט לאט התמונה הראשונה מתרקונת ונהיה יותר קל להתסכל עליה ולתכנן מה עושים (זו לפחות הדרך שאני מצאתי בשבילי הכי טובה אך כמובן שיש עוד דרכים). אה ודבר אחרון לסיום נזכרתי במשהו מצחיק, בסוף המבחן הבוחן ניגש לכל אחד ואז שואל אותו האם הוא ראה את המבחן הזה בעבר, מה בדיוק הוא מצפה שיענו לו??? ובכלל נראה לי שכמעט כולם ראו את המבחן הזה בעבר.. בהצלחה ודיר בלק אם מישהו מספר משהו/נותן רמז על המבחן הזה אחרת פשוט צ'ק פוינט ימצאו את מה שרשמתי כאן וישנו את המבחן.. אני מימשתי את השאלה ה-4 באמצע' מערך של 10 איברים ופשוט לשמור את האיברים עם ה-traffic הכי גדול במערך. הרעיון הוא שאם רוצים את ה-hosts עם לפחות 10% traffic אז כל ה-hosts יהיו בהכרח במערך. אבל לקח לי מלא זמן להגיע לרעיון הזה ולקמפל את זה. איזה שעתיים או יותר רק לתרגיל הזה. יצא לי מהירות ביצוע מטורפת(של איזה 200ms או משהו כזה) ובקושי בסוף סיימתי את המבחנים בגלל התרגיל הזה אבל לא יודע.. ביינתים מחכה לתשובה.
  • לפני 11 שנים
    ע"י: 1_אורח_כללי
    טוב אני כבר הרבה זמן משתמש בפורום הזה ונהנה מכל מה שאנשים מעלים לכאן והיות ואני גם מתעב תאגידים גדולים אז החלטתי להעלות כאן את המבחן (הראשון) המפורט של check point. הייתי שם ממש לא מזמן ויש לי את כל השאלות די טריות בראש, אגב אני בחרתי לממש ב - #C (אבל אלו אותן שאלות בכל השפות). כמו שציינו קודם יש למבחן 3 חלקים: חלק ראשון הכי גדול שבו 4 שאלות תכנותיות והוא נמשך 3-4 שעות, חלק שני של שעה וחצי ובו נדרשים להריץ קצת פקודות בסיסיות של תקשורת בין שתי מכונות לינוקס ובנוסף גם לקמפל ולהתקין קוד תוכנה מוכן, חלק שלישי הוא בן רק חצי שעה והוא מבחן עיצוב גרפי. חלק א: ישנה כביכול מערכת שאמורה לבצע 4 פעולות (כל פעולה זה שאלה): פיירוול של מסרים, סינון מסרים עם וירוסים, סינון מסרים עם מילות מוגנות וניטור של תעבורת המסרים. מקבלים solution מוכן שבתוכו יש פרויקט שבו 4 מחלקות, כל מחלקה מייצגת שאלה נפרדת, בכל מחלקה יש פונקציה או שתיים ריקות או לא תקינות שאותן אתם צריכים למלא/לתקן. חוץ מהמחלקות האלו ישנן עוד מחלקות נתונים ועוד פרויקטים אבל בהם לא נוגעים. מחלקה חשובה מאוד היא מחלקת הודעה/מסר (message) שבאה לייצג טיפוס נתונים מסוג הודעה, בטיפוס הזה יש כתובת שולח, כתובת מקבל, תוכן ההודעה (כמחרוזת) ועוד.. בנוסף לאחר שכתבתם את הקוד ישנו טסטר אוטומטי שהוא מריץ הרבה מסרים על המחלקות השונות והוא מדווח אם מה שכתבתם מתפקד כהלכה ואכן המחלקות מבצעות מה שצריך על המסרים ומקטלגות אותן נכון. שאלה 1 - צריך לכתוב חיפוש בעץ בינארי ממוין (כלומר לכל קודקוד הבנים משמאל קטנים יותר מהקודקוד ומימין גדולים יותר), ישנו עץ בינארי ממוין שמכיל בכל קודקוד כתובת אסורה (נמשל כתובת של ספאם), את העץ בונים בפונקציה אחרת שעוברת על קובץ טקסטואלי וממירה אותו לעץ אבל הקוד הזה לא אמור לעניין אותכם, בנוסף ישנה פונקציה שמקבלת הודעה ובה אתם צריכים לכתוב קוד שבודק שכתובת השולח וכתובת המקבל לא נמצאים בעץ, אם אחד מהם נמצא אז מחזירים enum שמייצג לזרוק את המסר אחרת מחזירים enum לקבל את המסר. שימו לב שהביצועים מאוד מאוד חשובים בייחוד בשאלה הזאת ולכן הדרך הכי טובה לדעתי לפתור את זה היא לעשות סריקה של העץ באמצעות while ולא רקורסיה! (מי שלא יודע שיחפש בגוגל איך מחפשים ערך באמצעות לולאה בעץ בינארי ממוין ודגש על ממוין!). כמה דגשים די טריוואלים: שימו לב שצריך לעשות 2 סריקות של העץ (אחת עבור כתובת השולח ושניה עבור המקבל) לכן כמובן שעדיף לכתוב את סריקת העץ כפונקציה נפרדת שמקבלת פרמטר כתובת ולקרוא לפונקציה פשוט פעמיים, דגש שני הוא שאין לאתחל את העץ בתוך הפונקצית טיפול מסרים שאתם כותבים כי אז עבור כל מסר העץ יאותחל מחדש, יש להגיד משתנה private מסוג העץ במחלקה (של השאלה) ובבנאי שלה לאתחל את העץ וכך הוא יאותחל רק פעם אחת. שאלה 2 - בשאלה זאת נדרשים לסרוק כל מסר ולגלות האם הוא מכיל וירוס, הסריקה מתבצעת באמצעות מחלקה אחרת שנקראת אנטי וירוס שבה לא אמורים לגעת (אבל כן להבין קצת את הקוד שלה), גם כאן יש לממש פונקציית טיפול במסרים כאשר כל מסר נשלח לאובייקט מסוג המחלקה האחרת ויש לו פונקציה שסורקת את המסר ומחזירה האם יש בו וירוס או אין ובהתאם אתם מחזירים את ה - enum המתאים. כמה דגשים: כמו בשאלה 1 גם כאן יש להגדיר משתנה פרטי מסוג מחלקת אנטי וירוס ולאתחל אותו בבנאי, חשוב לשים לב שהאתחול כולל גם new וגם קריאה לפונקציית setup (פונקציה של המחלקה) שהיא טוענת בסיס נתונים של הוירוסים וכך האובייקט אנטי וירוס מוכן לשימוש, אגב הצורה שבה הסריקה מתבצעת היא באמצעות ביטויים רגולרים אבל זה לא אמור לעניין אותכם, שימו לב שגם בקריאה אח"כ לפונקציית סריקת מסר מלבד המסר יש עוד כמה ערכים בוליאנים ששולחים אליה, יש ערך שנקרא fullscan שהוא צריך להיות false כי אם הוא true אז מה שיקרה זה שמסר שישלח יבדק כנגד כל הבסיס נתונים של הוירוסים שזה מיותר מכיוון שאם הוא false אז הוא סורק רק עד מציאת וירוס ראשון ואז מפסיק וזה ישפר לכם את הביצועים, יש עוד פרמטר (הראשון ביותר) שבכלל אין לו שימוש בתוך האנטי וירוס וסתם כתבו אותו כדי לבלבל, והפרמטר האחרון הוא loadviruses אך הוא יכול להיות true או false זה לא משנה, כי גם ככה בכל קריאה לסריקת מסר יש בדיקה האם הבסיס נתונים כבר נטען קודם ואם כן אז לא טוענים אותו גם האם הפרמטר הזה יהיה true. שאלה 3 - יש מחלקה שבתוכה יש פונקציה שמקבלת את המסר וקוראת לפונקציות אחרת במטרה לראות האם במסר יש מילים שמורות אסורות, אם כן אז יש להחזיר enum של זריקת המסר אחרת קבלת המסר, הקוד כבר כולו כתוב כולל פונקציית קבלת המסר אבל יש בקוד הזה הרבה באגים ובכלל המצב הראשוני שלו שהוא מתרסק אם מריצים אותו. כמה דגשים: יש שם בהתחלה משתנה result שאותו מחזירה הפונקציה אך בשני ה - if העיקריים לא מוצב בו הערך ואת זה יש לתקן, יש משתנה messagedata שלא מקבל ערך בהתחלה. שימו לב שהתיקונים הם אומנם ברובם בפונקציית הקבלת מסר אך יש גם לתקן קצת בפונקציות האחרות, בנוסף בשאלה הזאת מאוד עוזר בסוף להריץ את הטסטר האוטומטי כדי לוודות שכל המסרים קוטלגו כמו שצריך. שאלה 4 - צריך לכתוב 2 פונקציות, אחת היא של קבלת המסרים והשנייה היא החזרה של כל הכתובות השולחות שמהם נשלחו יותר מ - 10% מהמסרים עד עכשיו. הדרך לממש את זה היא באמצעות hashtable וביתר פירוט dictionary ב - #C, כל מפתח (key) יהיה בו כתובת שולח מסוימת וכל ערך יהיה כמה מסרים הכתובת הזאת שלחה, כלומר בעת קבלת מסר חדש בפונקציית הקבלת מסרים יש להעלות את המונה של מפתח כתובת השולח ב - 1 (או כמובן אם זו פעם ראשונה אז יש להוסיף מפתח חדש עם הערך 1) בנוסף יש לשמור מונה פשוט גלובלי ברמת המחלקה שכל פעם שמתקבל מסר חדש אז הוא מוגדל ב - 1. בפונקציית החזרת הכתובות יש פשוט לעשות לולאה שסורקת את כל המפתחות ב - hashtable ועבור כל מפתח בודקת האם הערך שלו לחלק בערך של המונה הכללי גדול שווה מ - 0.1 (כלומר שווה או גדול מ - 10%), אם כן אז מוסיפים אותו לרשימה שאותה בסוף מחזירים בפונקציה. כמה דגשים בכלל לכל חלק א: חשוב להגן על הקוד כמו נמשל בפונקציית קבלת ההודעות לבדוק שההודעה המתקבלת היא לא null ושהמסר בתוכה לא ריק, כדאי גם להשתמש ב - try catch בייחוד במצבים של נמשל פניה לאנטי וירוס החיצוני בשאלה 2 שם אנחנו לא יודעים איך מימשו אותו. חלק ב: בחלק זה בודקים ידיעה והבנה של פקודות תקשורת בסיסיות, קימפול והתקנה בלינוקס, זה נעשה באמצעות מסמך מפורט שבכל שורה אומר תעשו כך ותעשו כך, אתם צריכים לעקוב שורה אחרי שורה במסמך ולבצע בפועל את ההוראות על שתי מכונות וירטואליות של לינוקס שהן באותה הרשת, ברוב ההוראות במסמך גם רשום איזו פקודה יש להקליד, נמשל רשום שיש לבדוק תקשורת על ידי כתיבת ping וכתובת ה - ip של המכונה השניה, אך יש שורות שבהן לא רשומות הפקודות כמו נמשל רושמים שם שיש לקמפל (תוכנה מסוימת שמקודם הורדנו) בדרך הסטנדרטית ואחר כך להתקין אותה אבל לא רושמים איזה פקודות להקליד. אנסה לפרט מה שאני זוכר שיש לעשות שם: דבר ראשון יש לבדוק כתובות ip של שתי המכונות, אחר כך לעשות פינג מהמכונה הראשונה לעצמה, אחר כך מהראשונה לשניה, להוריד קובץ tar/zip מהמכונה השניה לראשונה באמצעות ftp, הקובץ הוא למעשה התקנה של תוכנה בשם pure ftp, יש לפתוח אותו, לקמפל את התוכן שלו, להתקין את התוכנה, להריץ אותה, לעשות kill לתהליך שלה, לחפש בתוך אחד ה - headers שלה מסר מסוים (welcome to), לפתוח את המסר הזה ולהוסיף לו את המילה my, לקמפל שוב ולהתקין את התוכנה מחדש, לפתוח את התוכנה ולראות שהמסר שהיא מציגה בהתחלה השתנה בהצלחה. כמה דגשים: כמו שקודם אמרתי רוב הדברים שיש לעשות רשום במסמך איזה פקודות צריך להקליד כך שאין צורך לזכור פקודות בעל פה, כשמחפשים את המסר שיש לשנות אז לחפש רק את המילים "welcome to" ולא את כל המסר (כי זה נראה לי מסר שמשורשר משני מקומות שונים) אם אני זוכר נכון זה נמצא בקובץ messages_en.h, את הקימפול הסטנדרטי אפשר לעשות עם gcc או make אבל אין צורך לשבור את הראש ולמצוא מה צריך לקמפל אלא יש שם קובץ טקסט שנקרא install, פותחים אותו עם עורך טקסט וישר בשורה הראשונה רשומות 3 פקודות שצריך להריץ, מריצים את 3 הפקודות אחת אחרי השניה והן גם מקמפלות וגם מתקינות את התוכנה, כדי להפעיל את התוכנה אני נכנסתי פשוט לתיקיית הקיצורי דרך לתוכנות מותקנות שהיא אם אני זוכר נכון usr/local/sbin (בכל מקרה כאשר מריצים את 3 הפקודות אז רשום לאיפה הוא מתקין אותה). חלק ג: טוב האמת שכאן אין לי יותר מדי מה לומר וגם אין כל כך איך להתכונן לזה, מדובר במשימת עיצוב גרפי, אגב אין חובה לעשות את החלק הזה אבל מי שעושה אותו יהיה לו יתרון בקבלה לתפקידים שדורשים יכולת עיצוב ממשקים, במשימה מדברים על מערכת שמשמשת לחיפוש עובדים בחברה, נותנים תמונה שבתוכה יש כביכול תוצאת חיפוש אחת שכוללת תמונה של עובדת, כמה פקדים והרבה מידע עליה שנמצא בדרך כלל כתיבות טקסט, התצוגה הראשונית בתמונה לא נראית טוב ודי מבולגנת, המשימה היא לפתוח את התמונה בשלמותה בצייר ולגזור ממנה חלקים שונים כמו נמשל התיבות טקסט ואותן לארגן בתמונה חדשה (חלון צייר שני) כך שבסופו של דבר תתקבל תמונה סופית שונה שמציגה את העובד ופרטיו בצורה הרבה יותר מאורגנת, יפה ושימושית, ניתן לשנות את הגודל של הפקדים, צבעים ובכלל כל דבר כמעט שאפשר לעשות בצייר. כמה דגשים: כדי להתכונן לחלק זה אז למי שלא מכיר אולי כדאי באמת לעבוד קצת עם הצייר, לגזור חלקים מתמונה לשנות גדלים וכ"ו, כדאי לעבוד בצייר במוד זום מוגדל (נמשל 200%), כדאי להתחיל מלחשוב על קבוצות פקדים שונות עם מכנה משותף כמו נמשל כל התיבות שמכילות את פרטי הכתובת ואז פשוט לגזור אותן מהתמונה הראשונה ולשים אותן ביחד יפה בשניה, כאמור הכי טוב לגזור כל פעם דברים מהראשונה וכך לאט לאט התמונה הראשונה מתרקונת ונהיה יותר קל להתסכל עליה ולתכנן מה עושים (זו לפחות הדרך שאני מצאתי בשבילי הכי טובה אך כמובן שיש עוד דרכים). אה ודבר אחרון לסיום נזכרתי במשהו מצחיק, בסוף המבחן הבוחן ניגש לכל אחד ואז שואל אותו האם הוא ראה את המבחן הזה בעבר, מה בדיוק הוא מצפה שיענו לו??? ובכלל נראה לי שכמעט כולם ראו את המבחן הזה בעבר.. בהצלחה ודיר בלק אם מישהו מספר משהו/נותן רמז על המבחן הזה אחרת פשוט צ'ק פוינט ימצאו את מה שרשמתי כאן וישנו את המבחן.. אם מממשים את שאלה 4, ב C, באיזה מבנה נתונים כדאי להשתמש?
  • לפני 11 שנים
    ע"י: 1_אורח_כללי
    האם המבחן עדיין עדכני?
  • לפני 11 שנים
    ע"י: 1_אורח_כללי
    טוב אני כבר הרבה זמן משתמש בפורום הזה ונהנה מכל מה שאנשים מעלים לכאן והיות ואני גם מתעב תאגידים גדולים אז החלטתי להעלות כאן את המבחן (הראשון) המפורט של check point. הייתי שם ממש לא מזמן ויש לי את כל השאלות די טריות בראש, אגב אני בחרתי לממש ב - #C (אבל אלו אותן שאלות בכל השפות). כמו שציינו קודם יש למבחן 3 חלקים: חלק ראשון הכי גדול שבו 4 שאלות תכנותיות והוא נמשך 3-4 שעות, חלק שני של שעה וחצי ובו נדרשים להריץ קצת פקודות בסיסיות של תקשורת בין שתי מכונות לינוקס ובנוסף גם לקמפל ולהתקין קוד תוכנה מוכן, חלק שלישי הוא בן רק חצי שעה והוא מבחן עיצוב גרפי. חלק א: ישנה כביכול מערכת שאמורה לבצע 4 פעולות (כל פעולה זה שאלה): פיירוול של מסרים, סינון מסרים עם וירוסים, סינון מסרים עם מילות מוגנות וניטור של תעבורת המסרים. מקבלים solution מוכן שבתוכו יש פרויקט שבו 4 מחלקות, כל מחלקה מייצגת שאלה נפרדת, בכל מחלקה יש פונקציה או שתיים ריקות או לא תקינות שאותן אתם צריכים למלא/לתקן. חוץ מהמחלקות האלו ישנן עוד מחלקות נתונים ועוד פרויקטים אבל בהם לא נוגעים. מחלקה חשובה מאוד היא מחלקת הודעה/מסר (message) שבאה לייצג טיפוס נתונים מסוג הודעה, בטיפוס הזה יש כתובת שולח, כתובת מקבל, תוכן ההודעה (כמחרוזת) ועוד.. בנוסף לאחר שכתבתם את הקוד ישנו טסטר אוטומטי שהוא מריץ הרבה מסרים על המחלקות השונות והוא מדווח אם מה שכתבתם מתפקד כהלכה ואכן המחלקות מבצעות מה שצריך על המסרים ומקטלגות אותן נכון. שאלה 1 - צריך לכתוב חיפוש בעץ בינארי ממוין (כלומר לכל קודקוד הבנים משמאל קטנים יותר מהקודקוד ומימין גדולים יותר), ישנו עץ בינארי ממוין שמכיל בכל קודקוד כתובת אסורה (נמשל כתובת של ספאם), את העץ בונים בפונקציה אחרת שעוברת על קובץ טקסטואלי וממירה אותו לעץ אבל הקוד הזה לא אמור לעניין אותכם, בנוסף ישנה פונקציה שמקבלת הודעה ובה אתם צריכים לכתוב קוד שבודק שכתובת השולח וכתובת המקבל לא נמצאים בעץ, אם אחד מהם נמצא אז מחזירים enum שמייצג לזרוק את המסר אחרת מחזירים enum לקבל את המסר. שימו לב שהביצועים מאוד מאוד חשובים בייחוד בשאלה הזאת ולכן הדרך הכי טובה לדעתי לפתור את זה היא לעשות סריקה של העץ באמצעות while ולא רקורסיה! (מי שלא יודע שיחפש בגוגל איך מחפשים ערך באמצעות לולאה בעץ בינארי ממוין ודגש על ממוין!). כמה דגשים די טריוואלים: שימו לב שצריך לעשות 2 סריקות של העץ (אחת עבור כתובת השולח ושניה עבור המקבל) לכן כמובן שעדיף לכתוב את סריקת העץ כפונקציה נפרדת שמקבלת פרמטר כתובת ולקרוא לפונקציה פשוט פעמיים, דגש שני הוא שאין לאתחל את העץ בתוך הפונקצית טיפול מסרים שאתם כותבים כי אז עבור כל מסר העץ יאותחל מחדש, יש להגיד משתנה private מסוג העץ במחלקה (של השאלה) ובבנאי שלה לאתחל את העץ וכך הוא יאותחל רק פעם אחת. שאלה 2 - בשאלה זאת נדרשים לסרוק כל מסר ולגלות האם הוא מכיל וירוס, הסריקה מתבצעת באמצעות מחלקה אחרת שנקראת אנטי וירוס שבה לא אמורים לגעת (אבל כן להבין קצת את הקוד שלה), גם כאן יש לממש פונקציית טיפול במסרים כאשר כל מסר נשלח לאובייקט מסוג המחלקה האחרת ויש לו פונקציה שסורקת את המסר ומחזירה האם יש בו וירוס או אין ובהתאם אתם מחזירים את ה - enum המתאים. כמה דגשים: כמו בשאלה 1 גם כאן יש להגדיר משתנה פרטי מסוג מחלקת אנטי וירוס ולאתחל אותו בבנאי, חשוב לשים לב שהאתחול כולל גם new וגם קריאה לפונקציית setup (פונקציה של המחלקה) שהיא טוענת בסיס נתונים של הוירוסים וכך האובייקט אנטי וירוס מוכן לשימוש, אגב הצורה שבה הסריקה מתבצעת היא באמצעות ביטויים רגולרים אבל זה לא אמור לעניין אותכם, שימו לב שגם בקריאה אח"כ לפונקציית סריקת מסר מלבד המסר יש עוד כמה ערכים בוליאנים ששולחים אליה, יש ערך שנקרא fullscan שהוא צריך להיות false כי אם הוא true אז מה שיקרה זה שמסר שישלח יבדק כנגד כל הבסיס נתונים של הוירוסים שזה מיותר מכיוון שאם הוא false אז הוא סורק רק עד מציאת וירוס ראשון ואז מפסיק וזה ישפר לכם את הביצועים, יש עוד פרמטר (הראשון ביותר) שבכלל אין לו שימוש בתוך האנטי וירוס וסתם כתבו אותו כדי לבלבל, והפרמטר האחרון הוא loadviruses אך הוא יכול להיות true או false זה לא משנה, כי גם ככה בכל קריאה לסריקת מסר יש בדיקה האם הבסיס נתונים כבר נטען קודם ואם כן אז לא טוענים אותו גם האם הפרמטר הזה יהיה true. שאלה 3 - יש מחלקה שבתוכה יש פונקציה שמקבלת את המסר וקוראת לפונקציות אחרת במטרה לראות האם במסר יש מילים שמורות אסורות, אם כן אז יש להחזיר enum של זריקת המסר אחרת קבלת המסר, הקוד כבר כולו כתוב כולל פונקציית קבלת המסר אבל יש בקוד הזה הרבה באגים ובכלל המצב הראשוני שלו שהוא מתרסק אם מריצים אותו. כמה דגשים: יש שם בהתחלה משתנה result שאותו מחזירה הפונקציה אך בשני ה - if העיקריים לא מוצב בו הערך ואת זה יש לתקן, יש משתנה messagedata שלא מקבל ערך בהתחלה. שימו לב שהתיקונים הם אומנם ברובם בפונקציית הקבלת מסר אך יש גם לתקן קצת בפונקציות האחרות, בנוסף בשאלה הזאת מאוד עוזר בסוף להריץ את הטסטר האוטומטי כדי לוודות שכל המסרים קוטלגו כמו שצריך. שאלה 4 - צריך לכתוב 2 פונקציות, אחת היא של קבלת המסרים והשנייה היא החזרה של כל הכתובות השולחות שמהם נשלחו יותר מ - 10% מהמסרים עד עכשיו. הדרך לממש את זה היא באמצעות hashtable וביתר פירוט dictionary ב - #C, כל מפתח (key) יהיה בו כתובת שולח מסוימת וכל ערך יהיה כמה מסרים הכתובת הזאת שלחה, כלומר בעת קבלת מסר חדש בפונקציית הקבלת מסרים יש להעלות את המונה של מפתח כתובת השולח ב - 1 (או כמובן אם זו פעם ראשונה אז יש להוסיף מפתח חדש עם הערך 1) בנוסף יש לשמור מונה פשוט גלובלי ברמת המחלקה שכל פעם שמתקבל מסר חדש אז הוא מוגדל ב - 1. בפונקציית החזרת הכתובות יש פשוט לעשות לולאה שסורקת את כל המפתחות ב - hashtable ועבור כל מפתח בודקת האם הערך שלו לחלק בערך של המונה הכללי גדול שווה מ - 0.1 (כלומר שווה או גדול מ - 10%), אם כן אז מוסיפים אותו לרשימה שאותה בסוף מחזירים בפונקציה. כמה דגשים בכלל לכל חלק א: חשוב להגן על הקוד כמו נמשל בפונקציית קבלת ההודעות לבדוק שההודעה המתקבלת היא לא null ושהמסר בתוכה לא ריק, כדאי גם להשתמש ב - try catch בייחוד במצבים של נמשל פניה לאנטי וירוס החיצוני בשאלה 2 שם אנחנו לא יודעים איך מימשו אותו. חלק ב: בחלק זה בודקים ידיעה והבנה של פקודות תקשורת בסיסיות, קימפול והתקנה בלינוקס, זה נעשה באמצעות מסמך מפורט שבכל שורה אומר תעשו כך ותעשו כך, אתם צריכים לעקוב שורה אחרי שורה במסמך ולבצע בפועל את ההוראות על שתי מכונות וירטואליות של לינוקס שהן באותה הרשת, ברוב ההוראות במסמך גם רשום איזו פקודה יש להקליד, נמשל רשום שיש לבדוק תקשורת על ידי כתיבת ping וכתובת ה - ip של המכונה השניה, אך יש שורות שבהן לא רשומות הפקודות כמו נמשל רושמים שם שיש לקמפל (תוכנה מסוימת שמקודם הורדנו) בדרך הסטנדרטית ואחר כך להתקין אותה אבל לא רושמים איזה פקודות להקליד. אנסה לפרט מה שאני זוכר שיש לעשות שם: דבר ראשון יש לבדוק כתובות ip של שתי המכונות, אחר כך לעשות פינג מהמכונה הראשונה לעצמה, אחר כך מהראשונה לשניה, להוריד קובץ tar/zip מהמכונה השניה לראשונה באמצעות ftp, הקובץ הוא למעשה התקנה של תוכנה בשם pure ftp, יש לפתוח אותו, לקמפל את התוכן שלו, להתקין את התוכנה, להריץ אותה, לעשות kill לתהליך שלה, לחפש בתוך אחד ה - headers שלה מסר מסוים (welcome to), לפתוח את המסר הזה ולהוסיף לו את המילה my, לקמפל שוב ולהתקין את התוכנה מחדש, לפתוח את התוכנה ולראות שהמסר שהיא מציגה בהתחלה השתנה בהצלחה. כמה דגשים: כמו שקודם אמרתי רוב הדברים שיש לעשות רשום במסמך איזה פקודות צריך להקליד כך שאין צורך לזכור פקודות בעל פה, כשמחפשים את המסר שיש לשנות אז לחפש רק את המילים "welcome to" ולא את כל המסר (כי זה נראה לי מסר שמשורשר משני מקומות שונים) אם אני זוכר נכון זה נמצא בקובץ messages_en.h, את הקימפול הסטנדרטי אפשר לעשות עם gcc או make אבל אין צורך לשבור את הראש ולמצוא מה צריך לקמפל אלא יש שם קובץ טקסט שנקרא install, פותחים אותו עם עורך טקסט וישר בשורה הראשונה רשומות 3 פקודות שצריך להריץ, מריצים את 3 הפקודות אחת אחרי השניה והן גם מקמפלות וגם מתקינות את התוכנה, כדי להפעיל את התוכנה אני נכנסתי פשוט לתיקיית הקיצורי דרך לתוכנות מותקנות שהיא אם אני זוכר נכון usr/local/sbin (בכל מקרה כאשר מריצים את 3 הפקודות אז רשום לאיפה הוא מתקין אותה). חלק ג: טוב האמת שכאן אין לי יותר מדי מה לומר וגם אין כל כך איך להתכונן לזה, מדובר במשימת עיצוב גרפי, אגב אין חובה לעשות את החלק הזה אבל מי שעושה אותו יהיה לו יתרון בקבלה לתפקידים שדורשים יכולת עיצוב ממשקים, במשימה מדברים על מערכת שמשמשת לחיפוש עובדים בחברה, נותנים תמונה שבתוכה יש כביכול תוצאת חיפוש אחת שכוללת תמונה של עובדת, כמה פקדים והרבה מידע עליה שנמצא בדרך כלל כתיבות טקסט, התצוגה הראשונית בתמונה לא נראית טוב ודי מבולגנת, המשימה היא לפתוח את התמונה בשלמותה בצייר ולגזור ממנה חלקים שונים כמו נמשל התיבות טקסט ואותן לארגן בתמונה חדשה (חלון צייר שני) כך שבסופו של דבר תתקבל תמונה סופית שונה שמציגה את העובד ופרטיו בצורה הרבה יותר מאורגנת, יפה ושימושית, ניתן לשנות את הגודל של הפקדים, צבעים ובכלל כל דבר כמעט שאפשר לעשות בצייר. כמה דגשים: כדי להתכונן לחלק זה אז למי שלא מכיר אולי כדאי באמת לעבוד קצת עם הצייר, לגזור חלקים מתמונה לשנות גדלים וכ"ו, כדאי לעבוד בצייר במוד זום מוגדל (נמשל 200%), כדאי להתחיל מלחשוב על קבוצות פקדים שונות עם מכנה משותף כמו נמשל כל התיבות שמכילות את פרטי הכתובת ואז פשוט לגזור אותן מהתמונה הראשונה ולשים אותן ביחד יפה בשניה, כאמור הכי טוב לגזור כל פעם דברים מהראשונה וכך לאט לאט התמונה הראשונה מתרקונת ונהיה יותר קל להתסכל עליה ולתכנן מה עושים (זו לפחות הדרך שאני מצאתי בשבילי הכי טובה אך כמובן שיש עוד דרכים). אה ודבר אחרון לסיום נזכרתי במשהו מצחיק, בסוף המבחן הבוחן ניגש לכל אחד ואז שואל אותו האם הוא ראה את המבחן הזה בעבר, מה בדיוק הוא מצפה שיענו לו??? ובכלל נראה לי שכמעט כולם ראו את המבחן הזה בעבר.. בהצלחה ודיר בלק אם מישהו מספר משהו/נותן רמז על המבחן הזה אחרת פשוט צ'ק פוינט ימצאו את מה שרשמתי כאן וישנו את המבחן.. האם צריך לבנות hashtable מ-0? או להשתמש במבנה נתונים קיים?
  • לפני 11 שנים
    ע"י: 1_אורח_כללי
    שים לב לנושא שהוא כתב: QA+TS
  • לפני 11 שנים
    ע"י: 1_אורח_כללי
    אתה עשית מבחנים ל- QA ? כי מה שרשמת הוא שונה ממה שנאמר פה בפורום..
  • לפני 11 שנים
    ע"י: 1_אורח_כללי
    מה שלוכם לכולם...היום הייתי במבחן מיון בצ'ק פוינט. אז ככה.. יש עשרה שאלות על איזה תוכנה של משולשים הכל מוסבר לפני המבחן. ממש קל ופשוט להבנה. אחרי זה יש עשרה שאלות ב-SUBNETTING. חייב לדעת היטב הנושא הזה על בוריה כדי לעבור בהצלחה!!!!! . כמובן כל השאלות הם באנגלית. מבחן טכני מורכב בהגדרת נתב+ אלחוטי וכמה דברים מאוד פשוטים... בהצלחה לכולם!!!
  • לפני 12 שנים
    ע"י: 1_אורח_כללי
    האם המבחנים בג'אווה זהים לאלה ב-C? אם כן, באיזה מובן בודקים יעילות? כיצד ניתן לקצר זמני ריצה של השאלה על 10%, ושאלה על המחרוזות?
  • לפני 12 שנים
    ע"י: 1_אורח_כללי
    למי שכבר עשה את המבחן, אתם זוכרים מה היה זמן הריצה הכולל שלכם? לי יצא 2300~ בJAVA כאשר הרוב מזה זה החלק השני מעניין אותי איפה אני עומד מבחינת הזמן
  • לפני 12 שנים
    ע"י: 1_אורח_כללי
    מישהו יכול לפרט קצת יותר (ב-JAVA אם אפשר) לגבי השלבים השני והשלישי? איך מוצג ה-API? האם יש משהו מעבר? על איזה סוג של באגים מדובר? טיפים יתקבלו בברכה
  • לפני 12 שנים
    ע"י: 1_אורח_כללי
    שאלה למי שעשה את המבחן בC++ אם אני כותב בC++ כמה טוב צריך לדעת OOP ? אני לא זוכר ברמה גבוהה
  • לפני 12 שנים
    ע"י: 1_אורח_כללי
    מי שלא יודע לחפש בעץ בינארי לא הסיק כלום ולא הבין כלום מהתואר שלו שכנראה עשה באוניברסיטת ביר זית או לטביה,אם אתה לא מסכים איתי כנראה שאתה לא מבין עד כמה זה טריוויאלי לחפש בעץ זה משהו הכי בסיסי שיש ומי שלא יודע את זה אין מקומו בחברת תוכנה כלשהיא.
  • לפני 12 שנים
    ע"י: 1_אורח_כללי
    למגיב האחרון אור89 הערה מגעילה מעניין אותי מה "תותח" כמוך עושה בחיים אל תשכח את השיר : "איך שגלגל מסתובב לו בפעם הבאה שתיהיה למטה אהה ולשאלתך אני עם עבודה עם ניסיון של למעלה מ10 שנים אבל אוהב לקרוא על שאלות וראיונות ממקומות אחרים שיהיה לך בהצלחה או שלא ...
  • לפני 12 שנים
    ע"י: 1_אורח_כללי
    תגיד לי אתה לא יודע לעשות חיפוש בעץ איך לעזאזל סיימת לימודים ?
  • לפני 12 שנים
    ע"י: 1_אורח_כללי
    הי, יש מצב לשמוע איזה שאלות יש במבחנים של 4 שעות ? אותם שאלות כמו שפירסמתם ? אם כן, פשוט אפשר להעתיק מהאינטרנט חיפוש בעץ בינארי לא ? איך עושים את הAPI בC ? יש למישהו לינק שיכול לעזור ? מה הבאגים שמצאתם בשאלה 3 ? ומה יש בשאלה 4 ? תודה לכל העונים....
  • לפני 12 שנים
    ע"י: 1_אורח_כללי
    אפשר להוסיף קצת יותר פירוט על החלק הרביעי במבחן הראשון, בו צריך למצוא את ה10%? וגם על המבחן של ה ui, מה בדיוק צריך לעשות שם? והאם השאלות האלה בכלל רלוונטיות נכון לעכשיו.. תודה
  • לפני 12 שנים
    ע"י: יייייעעייי
    משהו הולך לפרסם שאלות ברורות יותר או תשובות?
  • לפני 12 שנים
    ע"י: 1_אורח_כללי
    איך מוצאים אחוזים בתוך HASH ? נשמע לי קשה
  • לפני 12 שנים
    ע"י: 1_אורח_כללי
    בדיוק, מקבלים קובץ C עם תוכנה שאמורה לעבוד אבל יש בה באגים. הבאגים הם יותר רציניים מ-; מיותרים אלא ברמה של בדיקת הקצאות זכרון, חריגה ממערכים, שגיאות לוגיקה וכו'. בעקרון הקוד עצמו מבצע השוואות על סטרינגים. יש שימוש בפויינטרים, אבל לא משהו חריג או מסובך. רוב הפויינטרים הם הודעות שהמערכת כולה עובדת איתן (ובשאלה 2 למשל אתה פשוט מעביר את הפויינטרים לפונקציות ה-API כנדרש).
  • לפני 12 שנים
    ע"י: 1_אורח_כללי
    רציתי גם לשאול, האם יש הרבה שימוש בפויינטרים? לדוגמא בשאלה 2 של ה API ? תודה
  • לפני 12 שנים
    ע"י: 1_אורח_כללי
    חסוס, בשאלה 3, אנחנו פשוט מקבלים קובץ C עם תוכנית שאמורה לעבודה ואנחנו מתקנים שגיאות שנעשו שם בכוונה? (לדוגמא ; מיותרים, חריגה ממערכים וכו'? זה לא עבודה עם סטרינגים והשוואות?)