Lập trình viên đi phỏng vấn

Lập trình viên đi phỏng vấn
Hình ảnh được lấy từ video của kênh “Thạch anh tím quân sự»

Tôi đã làm lập trình viên hệ thống cho Linux trong khoảng 10 năm. Đây là các mô-đun hạt nhân (không gian hạt nhân), nhiều trình tiện ích khác nhau và hoạt động với phần cứng từ không gian người dùng (không gian người dùng), các bộ tải khởi động khác nhau (u-boot, v.v.), chương trình cơ sở của bộ điều khiển và nhiều hơn nữa. Thậm chí có lúc còn xảy ra tình trạng cắt giao diện web. Nhưng thường xuyên hơn là tôi phải ngồi với bàn hàn và tiếp xúc với các nhà thiết kế bảng mạch in. Một trong những vấn đề với công việc như vậy là rất khó để đánh giá mức độ năng lực của bạn, vì bạn có thể biết rất sâu về một nhiệm vụ nhưng lại có thể không biết một nhiệm vụ nào khác. Cách thích hợp duy nhất để hiểu nơi cần đi và xu hướng hiện tại là đi phỏng vấn.

Trong bài viết này, tôi muốn tóm tắt kinh nghiệm phỏng vấn vị trí lập trình viên hệ thống Linux của tôi, chi tiết cụ thể của cuộc phỏng vấn, công việc và cách đánh giá trình độ hiểu biết cá nhân của bạn bằng cách giao tiếp với nhà tuyển dụng tương lai và những điều bạn không nên làm. mong đợi từ nó.

Bài viết sẽ bao gồm một cuộc thi nhỏ có giải thưởng.

Đặc điểm của nghề nghiệp

Một lập trình viên hệ thống, trong lĩnh vực cụ thể mà tôi làm việc, là một nhà tổng quát hoàn chỉnh: Tôi vừa phải viết mã vừa gỡ lỗi phần cứng. Và thường có nhu cầu tự hàn một cái gì đó. Đôi khi, những điều chỉnh của tôi đối với phần cứng sau đó lại được chuyển cho các nhà phát triển. Vì vậy, để làm việc trong lĩnh vực này bạn cần có nền tảng kiến ​​thức khá tốt, cả về lĩnh vực mạch kỹ thuật số và lập trình. Vì điều này, các cuộc phỏng vấn cho vị trí lập trình viên hệ thống thường giống như một cuộc tìm kiếm một chuyên gia điện tử.

Lập trình viên đi phỏng vấn
Một máy trạm điển hình cho một lập trình viên hệ thống.

Ảnh trên cho thấy nơi làm việc điển hình của tôi khi gỡ lỗi trình điều khiển. Bộ phân tích logic hiển thị tính chính xác của các tin nhắn được truyền đi, máy hiện sóng theo dõi hình dạng của các cạnh tín hiệu. Ngoài ra, trình gỡ lỗi jtag không được đưa vào khung, được sử dụng khi các công cụ gỡ lỗi tiêu chuẩn không còn hoạt động được nữa. Và bạn cần có khả năng làm việc với tất cả các thiết bị này.

Điều thường xảy ra là việc hàn lại một số thành phần và tự sửa lỗi cấu trúc liên kết sẽ nhanh hơn và dễ dàng hơn là mang sản phẩm đến trình cài đặt. Và sau đó một trạm hàn cũng chiếm vị trí tại nơi làm việc của bạn.

Một đặc điểm khác của quá trình phát triển ở cấp độ trình điều khiển và phần cứng là Google không trợ giúp. Thường thì bạn phải tìm kiếm thông tin về vấn đề của mình và có ba liên kết, hai trong số đó là câu hỏi của chính bạn trên một diễn đàn nào đó. Hoặc thậm chí tệ hơn, khi bạn bắt gặp một câu hỏi từ chính một anh chàng tội nghiệp đã hỏi nó 5 năm trước trong danh sách gửi thư của kernel và không bao giờ nhận được câu trả lời. Trong công việc này, ngoài những lỗi trong thiết kế cả phần cứng và phần mềm, còn thường xuyên gặp phải lỗi tài liệu - đây có lẽ là những vấn đề nghiêm trọng và khó chịu nhất. Đôi khi các thanh ghi được mô tả không chính xác hoặc không có mô tả nào cho chúng cả. Những vấn đề như vậy chỉ có thể được giải quyết bằng cách đưa các số ngẫu nhiên một cách khoa học vào các sổ đăng ký nhất định (một kiểu đảo ngược). Điều thường xảy ra là bộ xử lý có chứa một số chức năng, nhưng không ai ngoại trừ bạn đã triển khai chức năng này (đặc biệt nếu bộ xử lý mới). Và điều này có nghĩa là đi bộ qua cánh đồng với một cái cào, 70% trong số đó là dành cho trẻ em. Nhưng khi có tài liệu, thậm chí có sai sót thì đây đã là tiến bộ rồi. Điều khá thường xuyên xảy ra là không có tài liệu nào cả, và đó là khi việc đi bộ qua các bãi mìn bắt đầu khi bàn ủi đang cháy. Và vâng, tôi cũng đã giải quyết thành công những vấn đề như vậy.

Phỏng vấn

Ý kiến ​​của tôi là bạn nên đi phỏng vấn ít nhất sáu tháng một lần, ngay cả khi bạn yêu thích công việc của mình và không muốn thay đổi nó. Một cuộc phỏng vấn cho phép bạn hiểu được trình độ của mình với tư cách là một chuyên gia. Tôi tin rằng những cuộc phỏng vấn có giá trị nhất là những cuộc phỏng vấn thất bại. Họ là những người chỉ ra chính xác nhất những điểm nghẽn nào trong kiến ​​thức của bạn cần được cải thiện.

Một tính năng thú vị khác là chất lượng của các cuộc phỏng vấn. Đây là quan sát của tôi, và nó không phải là sự thật, tôi thừa nhận rằng tôi chỉ gặp may thôi. Nếu cuộc phỏng vấn diễn ra theo kịch bản:

  • nói cho chúng tôi biết về bạn;
  • Chúng tôi có những nhiệm vụ như vậy;
  • bạn thích?

Và nếu sau cuộc đối thoại này, các bạn thích nhau và đi làm, thì theo quy luật, công ty và các nhiệm vụ trở nên rất dễ chịu và đầy đủ. Nếu một cuộc phỏng vấn giống như trải qua 12 vòng địa ngục: cuộc phỏng vấn đầu tiên với bộ phận nhân sự, sau đó là cuộc phỏng vấn với một nhóm lập trình viên, sau đó là giám đốc, nhiều bài tập về nhà, v.v., thì theo quy luật, đây là những tổ chức thất bại mà tôi không làm việc rất lâu. Một lần nữa, đây là quan sát cá nhân, nhưng theo quy luật, quá nhiều quan liêu và quy trình tuyển dụng kéo dài cho thấy rằng các quy trình chính xác tương tự cũng diễn ra trong công ty. Các quyết định được đưa ra chậm chạp và không hiệu quả. Cũng có những tình huống ngược lại, khi có những vòng phỏng vấn như địa ngục, và công ty trở nên vĩ đại, và khi sau một cú tát vào cổ tay, công ty lại trở thành một đầm lầy, nhưng những trường hợp này rất hiếm.

Nếu bạn cho rằng kịch bản: gặp gỡ, kể về bản thân và được tuyển dụng chỉ tồn tại ở những công ty nhỏ thì không. Tôi đã thấy điều này ở những công ty rất lớn sử dụng hơn hàng trăm người và có mặt trên thị trường thế giới. Đây là một cơ chế bình thường, đặc biệt nếu bạn có thành tích tốt và có cơ hội gọi điện cho những người sử dụng lao động trước đây để hỏi về bạn.

Đối với tôi, đó là một dấu hiệu rất tốt về một công ty khi họ yêu cầu đưa ra các ví dụ về dự án và mã của họ. Mức độ đào tạo của người nộp đơn được thể hiện ngay lập tức. Và đối với tôi, từ quan điểm tuyển chọn ứng viên, đây là phương pháp tuyển chọn hiệu quả nhất so với phỏng vấn trực tiếp. Trên thực tế, bạn có thể thất bại trong một cuộc phỏng vấn vì phấn khích, hoặc ngược lại, bạn cảm thấy phấn khích. Nhưng trong công việc thực tế, bạn không thể đương đầu với những nhiệm vụ thực tế. Và tôi cũng gặp phải điều này khi tự mình phỏng vấn mọi người. Một chuyên gia đến, tỏ ra xuất sắc, tôi thích anh ấy, anh ấy thích chúng tôi. Và tôi đã phải vật lộn với vấn đề đơn giản nhất trong một tháng, và kết quả là một lập trình viên khác đã giải quyết được nó trong vài ngày. Tôi đã phải chia tay với lập trình viên đó.

Tôi đặc biệt coi trọng nhiệm vụ lập trình trong các cuộc phỏng vấn. Và những vấn đề phải giải quyết ngay trong cuộc họp, khi căng thẳng và bài tập về nhà. Phần đầu tiên cho thấy bạn sẵn sàng giải quyết vấn đề một cách nhanh chóng và chính xác như thế nào trong tình huống căng thẳng và khẩn cấp. Phần thứ hai thể hiện trình độ và khả năng tìm kiếm thông tin, giải quyết các vấn đề hiện tại của bạn.

Công việc thú vị nhất mà tôi từng làm là ở khu phức hợp quốc phòng của nước ta. Trong quá trình làm việc, tôi phải giải quyết những vấn đề đơn giản mà các lập trình viên thương mại chưa từng mơ tới. Siêu máy tính, thiết kế bộ định tuyến, các hệ thống chiến đấu nút khác nhau - điều này cực kỳ thú vị. Khi trong cuộc diễu hành, bạn nhìn thấy một khu phức hợp lưu trữ mã của mình, điều đó thực sự rất tuyệt. Thật kỳ lạ, các cuộc phỏng vấn với những công ty như vậy thường rất đơn giản, theo đúng nghĩa đen là đến, thích, được chấp nhận (có thể là chi tiết cụ thể về quân đội, những người không thích nói quá nhiều), được chồng lên nhau. Những thử thách tôi phải đối mặt ở đó thực sự thú vị và đầy thử thách. Với kinh nghiệm, hóa ra họ rất tốt để học cách trở thành một lập trình viên hệ thống chất lượng cao. Cũng có những bất lợi, và đây thậm chí không phải là mức lương thấp. Hiện tại, mức lương trong khu phức hợp quốc phòng khá khá, có thưởng và phúc lợi. Theo quy định, có rất nhiều quan liêu, thời gian làm việc dài, công việc gấp rút bất tận và làm việc dưới áp lực lớn. Trong một số trường hợp nhất định, không thể loại trừ bí mật, điều này gây thêm một số vấn đề nhất định khi đi du lịch nước ngoài. Tất nhiên, thêm vào đó là sự chuyên chế của các ông chủ, và điều này, than ôi, cũng xảy ra. Mặc dù trải nghiệm làm việc với đại diện khách hàng của tôi cực kỳ thú vị. Đây là ấn tượng chung của ba viện nghiên cứu và công ty khác nhau liên quan đến mệnh lệnh quốc phòng nhà nước.

Nhiệm vụ phỏng vấn

Để tránh những hiểu lầm và để không vạch trần những công ty mà tôi đã phỏng vấn, tôi sẽ không cám dỗ số phận và chỉ ra chi tiết của họ. Nhưng tôi biết ơn vì mỗi cuộc phỏng vấn, vì thời gian mọi người dành cho tôi, vì cơ hội nhìn lại bản thân tôi từ bên ngoài. Tôi chỉ có thể nói rằng nhiệm vụ này dành cho các công ty quốc tế lớn có đại diện ở các quốc gia khác nhau.

Tôi sẽ kể cho bạn điều thú vị nhất: nhiệm vụ nào được giao trong các cuộc phỏng vấn. Nói chung, các câu hỏi phổ biến nhất cho vị trí tuyển dụng của lập trình viên hệ thống và lập trình viên vi điều khiển là các hoạt động bit, trong tất cả các biến thể có thể có. Vì vậy, hãy chuẩn bị cho mình tốt nhất trong lĩnh vực này.

Chủ đề phân cực thứ hai là các biển chỉ dẫn, điều này thực sự sẽ khiến bạn ngạc nhiên. Để họ đánh thức bạn vào lúc nửa đêm và bạn có thể kể và chỉ ra mọi thứ.

Tôi đã lấy trộm các câu hỏi từ một số cuộc phỏng vấn trong đầu và tôi sẽ trình bày chúng ở đây vì tôi thấy chúng khá thú vị. Tôi cố tình không đưa ra câu trả lời cho những câu hỏi này để độc giả có thể tự trả lời những câu hỏi này ở phần bình luận và có chút bột phát khi trải qua một cuộc phỏng vấn thực tế.

Câu hỏi số 1

I. Kiến thức về SI. Các mục sau đây có ý nghĩa gì:

const char * str;

char const * str;

const * char str;

char * const str;

const char const * str;

Tất cả các mục có đúng không?

II. Tại sao chương trình này lại gây ra lỗi phân đoạn?

int main ()
{
       fprintf(0,"hellon");
       fork();
       return(0);
}

III. Để được thông minh.

Có một cây gậy dài một mét. Mười con kiến ​​ngẫu nhiên rơi vào cô, bò về các hướng khác nhau. Tốc độ di chuyển của một con kiến ​​là 1 m/s. Nếu một con kiến ​​gặp một con kiến ​​khác, nó sẽ quay lại và bò về hướng ngược lại. Thời gian tối đa bạn cần đợi để tất cả đàn kiến ​​rơi ra khỏi que là bao nhiêu?

Cuộc phỏng vấn tiếp theo là một thất bại đối với tôi và tôi coi đó là cuộc phỏng vấn hữu ích nhất trong quá trình thực hành lập trình của mình. Nó cho thấy sự kém cỏi sâu sắc của tôi. Trước cuộc phỏng vấn này, tôi đã quen thuộc với từng câu hỏi này và chúng liên tục xuất hiện trong quá trình thực hành của tôi, nhưng không hiểu sao tôi lại không coi trọng chúng và do đó, tôi không hiểu rõ về chúng. Vì vậy, tôi đã thất bại trong kỳ thi này một cách đáng hổ thẹn. Và tôi rất biết ơn vì một thất bại như vậy đã xảy ra; nó khiến tôi tỉnh táo nhất. Bạn nghĩ rằng bạn là một chuyên gia giỏi, bạn biết thiết kế mạch, giao diện và làm việc với kernel. Và sau đó bạn có những câu hỏi thực sự và bạn nổi. Vì vậy hãy xem.

Câu hỏi phỏng vấn số 2

Các vấn đề về phần cứng.

  • Cách sắp xếp các lệnh gọi hệ thống linux bằng hợp ngữ trên bộ xử lý ARM, trên x86. Sự khác biệt là gì?
  • Có những công cụ đồng bộ hóa nào? Công cụ đồng bộ hóa nào có thể được sử dụng trong bối cảnh ngắt, công cụ nào không thể và tại sao?
  • Sự khác biệt giữa xe buýt i2c và xe buýt spi là gì?
  • Tại sao có các đầu cuối trên bus i2c và giá trị của chúng là bao nhiêu?
  • Giao diện RS-232 CHỈ có thể hoạt động trên hai dây: RX và TX không? Ở đây tôi sẽ đưa ra câu trả lời: Hóa ra là tệ, ở mức 9600, nhưng có thể!!!
  • Và bây giờ là câu hỏi thứ hai: tại sao?
  • Cách tốt nhất để sắp xếp đường tín hiệu và nguồn điện trong bo mạch nhiều lớp là gì và tại sao? Nguồn điện bên trong các lớp hay đường tín hiệu bên trong các lớp? (Câu hỏi nói chung hoàn toàn là về thiết kế mạch).
  • Tại sao các đường vi sai có đường ray đi cùng nhau ở khắp mọi nơi?
  • Xe buýt RS-485. Thông thường có các thiết bị đầu cuối trên một dòng như vậy. Tuy nhiên, chúng ta có một mạch hình sao với số lượng mô-đun plug-in thay đổi. Nên sử dụng những phương tiện nào để tránh va chạm, can thiệp?
  • Cây đỏ và cây nhị phân là gì?
  • Làm thế nào để làm việc với cmake?
  • Các câu hỏi về xây dựng yocto Linux.

Mục tiêu của cuộc phỏng vấn này:

1. Viết hàm đảo ngược thành uint32_t tất cả các bit. (làm việc với bit rất phổ biến trong các cuộc phỏng vấn, tôi khuyên bạn nên làm như vậy)
2.

int32_t a = -200;
uint32_t b = 200;
return *(uint32_t) * (&a)) > b;

Hàm này sẽ trả về cái gì? (giải trên giấy, không cần máy tính)

3. Hàm tính trung bình cộng của hai số int32_t.

4. Các phương thức đầu ra trong chương trình là gì, bao gồm. thành một dòng lỗi.

Lần lựa chọn thứ ba diễn ra tương đối gần đây và tôi sẽ không ngạc nhiên nếu vẫn còn một bảng câu hỏi như vậy ở đó nên tôi sẽ không tiết lộ công ty để không làm lộ chúng... Nhưng nói chung tôi sẽ đưa ra một ví dụ trong số các câu hỏi có thể có và nếu bạn nhận ra câu hỏi của mình thì tôi xin chào :).

Câu hỏi phỏng vấn số 3

  1. Một ví dụ về mã duyệt cây được đưa ra, cần phải cho biết những gì đang được thực hiện trong mã này và chỉ ra các lỗi.
  2. Viết một ví dụ về tiện ích ls. Với tùy chọn đơn giản nhất “-l”.
  3. Cho một ví dụ về cách thực hiện liên kết tĩnh và liên kết động. Sự khác biệt là gì?
  4. RS-232 hoạt động như thế nào? Sự khác biệt giữa RS-485 và RS-232 là gì? Sự khác biệt giữa RS-232 và RS-485 theo quan điểm của lập trình viên là gì?
  5. USB hoạt động như thế nào (theo quan điểm của lập trình viên)?
  6. Dịch thuật văn bản kỹ thuật từ tiếng Nga sang tiếng Anh.

Một cuộc phỏng vấn thành công không phải là sự đảm bảo cho công việc thành công

Chương này có lẽ thậm chí không dành cho các lập trình viên (mặc dù dành cho họ cũng vậy), mà dành nhiều hơn cho bộ phận nhân sự. Những công ty phù hợp nhất không xem xét tỉ mỉ kết quả của các cuộc phỏng vấn. Việc mắc sai lầm là điều bình thường; họ thường nhìn vào cách một người biết cách giải quyết vấn đề và lý do.

Một trong những vấn đề mấu chốt là ứng viên giải quyết thành công vấn đề trong quá trình phỏng vấn, thể hiện mình là một chuyên gia xuất sắc nhưng lại thất bại ở nhiệm vụ thực tế đầu tiên. Tôi sẽ không nói dối, điều này cũng đã xảy ra với tôi. Tôi đã vượt qua thành công tất cả các vòng địa ngục, giải quyết tất cả các nhiệm vụ kiểm tra, nhưng trong điều kiện thực tế, công việc trở nên quá khó khăn do đơn giản là thiếu kinh nghiệm. Lên tàu không phải là nhiệm vụ khó khăn nhất. Điều khó khăn nhất là ở lại công ty này.

Vì vậy, tôi tin tưởng hơn những công ty thực hiện các cuộc phỏng vấn đơn giản với ứng viên và nói: sau tháng làm việc đầu tiên, sẽ biết rõ bạn có phù hợp với chúng tôi hay không. Đây là cách tiếp cận phù hợp nhất, vâng, có lẽ hơi tốn kém, nhưng có thể thấy ngay ai là ai.

Có một lựa chọn khác cho cuộc phỏng vấn: khi bạn vượt qua thành công, nhưng dựa trên kết quả của cuộc phỏng vấn, bạn hiểu rằng nhà tuyển dụng hoàn toàn không đủ năng lực. Tôi ngay lập tức từ chối công việc nếu tôi được đề nghị làm việc với tư cách một doanh nhân cá nhân, hứa hẹn thu nhập lớn. Đây là một hình thức trốn thuế đối với một tổ chức đang điều hành, và tại sao những vấn đề của người sử dụng lao động lại khiến tôi, một lập trình viên, phải lo lắng? Một lựa chọn khác là các cơ quan chính phủ khác nhau. Tôi đã có một cuộc phỏng vấn, kết quả là tôi được trả lương cao, nhưng họ nói rằng lập trình viên trước đó đã nghỉ việc, ốm, chết, say sưa do khối lượng công việc và ngày làm việc của bạn bắt đầu lúc 8 giờ sáng. . Từ nơi đó anh cũng chạy đến khiến gót chân lấp lánh. Vâng thưa HR, xin lưu ý rằng các lập trình viên sẵn sàng từ chối ngay cả công việc ngon lành nhất nếu ngày làm việc phải bắt đầu từ sáng sớm.

Cuối cùng, tôi sẽ đưa ra một video xuất sắc về việc lựa chọn lập trình viên, có ảnh chụp màn hình ở đầu bài viết này. Tôi cũng đã có một cuộc phỏng vấn như vậy nhiều lần. Nếu bạn thấy sự chuyên chế ở giai đoạn đặt câu hỏi, thì hãy tôn trọng bản thân, đứng dậy, lấy đồ và rời đi - điều này là bình thường. Nếu bộ phận nhân sự và người quản lý khẳng định họ gây bất lợi cho bạn trong cuộc phỏng vấn, điều này cho thấy rằng công ty này độc hại và bạn không nên làm việc ở đó trừ khi bạn thích những ông chủ không đủ năng lực.

Những phát hiện

Các lập trình viên hãy đi phỏng vấn! Và luôn cố gắng để được thăng tiến. Giả sử nếu bạn nhận được N tiền thì hãy đi phỏng vấn với mức lương ít nhất là N*1,2 hoặc cao hơn là N*1,5. Ngay cả khi bạn không nhận vị trí tuyển dụng này ngay lập tức, bạn sẽ hiểu những gì cần thiết cho mức lương này.
Quan sát của tôi cho thấy kiến ​​​​thức tốt về tiếng Anh, kinh nghiệm đủ phong phú trong ngành và sự tự tin quyết định. Cái sau là phẩm chất chính, như ở mọi nơi trong cuộc sống. Theo quy định, một ứng viên tự tin hơn có thể thể hiện tốt hơn trong một cuộc phỏng vấn, thậm chí mắc nhiều lỗi hơn so với một ứng viên xuất sắc nhưng nhút nhát và chủ động hơn. Chúc may mắn với cuộc phỏng vấn của bạn!

Cuộc thi P/S

Nếu bạn có những ví dụ thú vị về các vấn đề mà bộ phận nhân sự đã gây ra cho bạn, thì vui lòng nhận xét. Chúng tôi đã chuẩn bị một cuộc thi nhỏ - điều kiện rất đơn giản: bạn viết nhiệm vụ bất thường nhất mà bạn gặp phải trong một cuộc phỏng vấn, độc giả đánh giá nó (cộng) và sau một tuần, chúng tôi tổng hợp kết quả và thưởng cho người chiến thắng những món quà thú vị.

Lập trình viên đi phỏng vấn

Lập trình viên đi phỏng vấn

Nguồn: www.habr.com

Thêm một lời nhận xét