Trip to Google

Updated
ისე მოხდა, რომ ორი კვირის წინ google-ში ამოვყავი თავი :) პოლონეთში, კრაკოვში მათი ოფისია. ხუთი ტექნიკური ინტევიუ ხუთ საათს გრძელდებოდა და საკმაოდ საინტერესო და სახალისო აღმოჩნდა ჩემთვის. აზარტულია, როცა რაიმეს ცოდნაში გცდიან. თუმცა მათი საბოლოო გადაწყვეტილება უკვე მივიღე და თბილისში ვაგრძელებ ჩემს ”მოღვაწეობას” :D

კიდევ უფრო სასიხარულო იყო ჩემთვის რომ ჩვენიანებთან გავატარე ის ერთი კვირა და ეხლა ცოტა ხანი კიდევ არ მომენატრებიან :D ვინც არ იცის რას ვგულისხმობ, ლეკვა და რაჭველა (აწ უკვე გუგლერები) ცოტა ხნის წინ გადასახლდნენ იქ.

ტექნიკური ინტერვიუების დეტალებზე მე მგონი ყველასთან სათითაოდ ვისაუბრე დაწვრილებით :D მაგრამ თუ ვინმეს აინტერესებს, აქაც დავწერ..

შთაბეჭდილებების გაზიარება არც ისე კარგად გამომდის ხოლმე :) ამიტომ რამდენიმე ფოტო…

google

google

teo_rachvela_lekva

teo_rachvela_lekva

lekva_elle_rachvela

ეეეი.. ეხლა დავინახე თითები უკან

Update:

ხუთმა ინტერვიუმ ხუთ სხვადასხვა ადამიანთან ჩაიარა და სხვადასხვა თემის ირგვლივ სვამდნენ შეკითხვებს. პასუხი თუ კოდს შეიცავდა ფურცელზე ან დაფაზე იყო დასაწერი.

Coding შეკითხვები იყო შემდეგი (მე ჯავაზე ვწერდი, თუმცა შეიძლება C++-ზეც):

1. დასაწერი იყო მეთოდი, რომელსაც გადაეცემა პარამეტრად List ტიპის ობიექტი და მეთოდმა უნდა დააბრუნოს ამ ლისტიდან random ობიექტი. random-ისთვის შეიძლებოდა ჯავას Random კლასის გამოყენება.

მეთოდის დაწერის შემდეგ მოვიდა კითხვა, თუ როგორ გავტესტავდი ამ მეთოდს. და კიდევ, თუ რატომ იქრეშებოდა ჩემი დაწერილი მეთოდი ძალიან იშვიათ შემთხვევებში. კოდი ასეთია:

Object getRandom(List list){

if (list == null || list.size() ==0)  do something;

int next = Random.nextInt(list.size());

return list.get(next);

}

2. დასაწერი იყო კეშის ზოგადი ინტერფეისი (ზოგადი ანუ, არა ერთი კონკრეტული ტიპის ობიექტების შესანახად, არამედ ჯენერიკებით) და შემდეგ ამ ინტერფეისის ერთ-ერთი რეალიზაცია.

3. დასაწერი იყო მეთოდი, რომელსაც პარამეტრად გადაეცემა ინდექსი (0-დან) და აბრუნებს შემდეგი სახის სტრიქონს: 0-ის შემთხვევაში A, 1 – B, ასე სანამ ინგლისური ალფაბიტი არ ამოიწურება. შემდეგ იქნება AA, AB….  AAA, AAB, AAC…

მაგალითად როგორც ექსელშია გადანომრილი სვეტები.

4. დასაწერი იყო Iterator-ის კლასი (next და hasNext მეთოდები), რომელიც დადის არა კოლექციის შიგნით, არამედ კოლექციების კოლექციაში. ანუ, რომ წარმოვიდგინოთ გადაბმული კოლექციები.

ალგორითმებზე შეკითხვები:

ერთი იყო სტრიქონის ანაგრამებზე, ჰეშირებას და ინდექს სორტზე, ხოლო მეორეში მოცემული იყო დიდი ტექსტი (სიტყვების მიმდევრობა) და ასევე მოცემული იყო სიტყვების მასივი (არც ისე დიდი). ამ დიდ ტექსტში უნდა მეპოვა ისეთი უმოკლესი ფრაგმენტი (სიტყვების რაოდენობით), რომელიც შეიცავდა მასივში არსებულ ყველა სიტყვას.

კიდევ ერთი კითხვა იყო ალგორითმებთან კავშირში: 10მბ ზომის ფაილი უნდა დამეკოპირებინა ერთი მანქანიდან 10000 მანქანაზე, ოღონდ სწრაფად. და ჩათვლილი იყო, რომ დისკიდან წაკითხვის და დისკზე წაკითხვის სიჩქარეა 100მბ/წმ, ხოლო ქსელში მონაცემების გადაცემის სიჩქარე – 1000 მეგაბიტი წამში. ასევე სანამ ფაილი ბოლომდე არ ჩაიწერება ერთ ადგილას არ შეიძლება იმ ადგილიდან მისი გადაწერა სხვაგან. და კიდევ ერთი კომპიუტერიდან რამდენიმეზე პარალელურად გაშვებული გადაწერა მაინც ცალცალკე დაითვლება, იმიტომ რომ არ შეუძლია ქსელში დაუკავშირდეს რამდენიმეს ერთად და ისე გადაუწეროს.

low level კითხვებში იყო ასეთი რამეები:

1. რა არის ბაიტის მაქსიმალური მნიშვნელობა?

2. როგორ შევინახოთ ბაიტში დიდი რიცხვი? მაგალითად 1000 ან 100 000

3. როგორ არის წარმოდგენილი float ტიპის მნიშვნელობა მეხსიერებაში?

4. როგორ არის ჯავაში რეალიზებული ArrayList? და საერთოდ როგორ ხდება დინამიური მასივის მართვა მეხსიერებაში

იყო კიდევ ერთი ასეთი შეკითხვა, რომელიც არ ვიცი რა ტიპში შედის..

ვთქვათ, მობილურის ერთ-ერთ ოპერატორს უნდა გაუკეთო sms-ების შესანახი ბაზა, რაიმე storage, რომელსაც შემდეგ აპლიკაციები გამოიყენებენ. რა მეხსიერებას (სერვერები) გამოყოფდი ამ sms-ების შესანახად?

მე მგონი სულ ეს იყო :D

Tips: ძიების გამარტივება Google-ში

უფრო კონკრეტულად რომ მივუთითოთ, რას ვეძებთ, Google-ს აქვს სპეციალური ოპერატორები (შეიძლება იყოს სიტყვები ან პუნქტუაციის ნიშნები).  

[ ] ფრჩხილებში ძებნის მაგალითებია მითითებული.

 

OR  - ’ან’. [Google OR Yahoo] შედეგად გამოიტანს საიტებს, რომელიც ან მხოლოდ სიტყვა Google-ს შეიცავს ან მხოლოდ Yahoo-ს. OR აუცილებლად მთავრული ასოებით უნდა ეწეროს. 

 

” ”  - ბრჭყალები ფრაზის მოსაძებნად გამოიყენება. გუგლი ზუსტი თანმიმდევრობით ეძებს იმ სიტყვების ერთობლიობას, რასაც ბრჭყალებში ჩავსვამთ. [lyrics "You'll remember me when the west wind moves"]

 

 (-) – მინუსი გამორიცხავს. [fields of gold -Sting] 

 

(+) – ზუსტად ისე მოძებნის სიტყვას, როგორც არის და არა მის სინონიმებს, როგორც ამას გუგლი აკეთებს ხოლმე. [+რეცეპტი ცხელი +შოკოლადი] ამ მაგალითის შედეგად გამოსულ საიტებზე აუცილებლად იქნება სიტყვები ’რეცეპტი’ და ’შოკოლადი’.

 

(*) – ვარსკვლავები შეგვიძლია ჩავწეროთ ფრაზაში იმ სიტყვების მაგივრად, რომლებიც არ ვიცით. [the * brown fox jumps over a * dog]

 

 

site: ეძებს მხოლოდ მითითებული  დომეინის ფარგლებში. [სტატია site:samurai.ge] ამის შედეგად მივიღებთ საიტებს, რომელზეც ნახსენებია სიტყვა ’სტატია’ და აუცილებლად არის samurai.ge დომენზე. [სტატია site:ge] ეს კი მოძებნის ყველა საიტზე, რომელიც ge დომენზეა.

 

filetype:  ეძებს განსაზღვრული ტიპის დოკუმენტებს

 

link: ეძებს იმ საიტებს რომლებზეც მითითებული საიტის ლინკია. 

[link:amazon.com] გამოიყვანს იმ საიტებს, რომლებზეც ამაზონზე გასასვლელი ბმული დევს.

 

intitle: გუგლი ეძებს საიტის სათაურებში. [google intitle:analytics] შედეგად მივიღებთ საიტებს, რომელთა სათაურში აუცილებლად არის სიტყვა ‘analytics’. ხოლო თუ გვინდა რომ ყველა საძიებო სიტყვა იყოს სათაურში, მაშინ [intitle:google intitle:analytics]  ან ვიყენებთ allintitle-ს.  [allintitle: google analytics]

 

inurl: ეს ჩემი საყვარელია :) სიტყვებს ეძებს საიტის url-ში (მისამართში). [inurl:rapidshare inurl:ebook] ან [allinurl: rapidshare ebook]

 

define: იძლევა სიტყვის განსაზღვრებას, სინონიმებს, მაგალითებს, ა.შ [define:samurai]

cache: აბრუნებს გუგლის მიერ კეშირებულ გვერდს

 

recommended
Google guide – making searching even easier
Unofficial Google advanced search