உங்கள் அடுத்த முழு-அடுக்கு நேர்காணலில் தேர்ச்சி பெறுங்கள். இந்த விரிவான வழிகாட்டி உலகளாவிய பார்வையாளர்களுக்காக முகப்பு, பின்தளம், தரவுத்தளங்கள், டெவொப்ஸ் மற்றும் கணினி வடிவமைப்பு குறித்த முக்கிய கேள்விகளை உள்ளடக்கியது.
முழு-அடுக்கு நேர்காணலில் வெற்றி பெறுவது: பொதுவான கேள்விகளுக்கான ஒரு உலகளாவிய டெவலப்பரின் வழிகாட்டி
தொழில்நுட்பத் துறையில் மிகவும் ஆற்றல் வாய்ந்த மற்றும் சவாலான பாத்திரங்களில் முழு-அடுக்கு டெவலப்பரின் பங்கும் ஒன்றாகும். பயனரின் உலாவியில் இருந்து தொடங்கி தரவுத்தளம் மற்றும் வரிசைப்படுத்தல் உள்கட்டமைப்பு வரை பரவியுள்ள திறன்களின் ஒரு தனித்துவமான கலவை இதற்குத் தேவைப்படுகிறது. இதன் விளைவாக, ஒரு முழு-அடுக்கு பதவிக்கான நேர்காணல் செயல்முறை மிகவும் கடுமையானதாக இருக்கும், இது உங்கள் அறிவின் அகலம் மற்றும் ஆழத்தை சோதிக்கும் வகையில் வடிவமைக்கப்பட்டுள்ளது. நீங்கள் உங்கள் முதல் வேலையைப் பெறும் ஒரு இளநிலை டெவலப்பராக இருந்தாலும் சரி அல்லது ஒரு புதிய சவாலைத் தேடும் அனுபவமுள்ள நிபுணராக இருந்தாலும் சரி, தயாரிப்பே வெற்றிக்கு முக்கியமாகும்.
இந்த விரிவான வழிகாட்டி உலகளாவிய டெவலப்பர்களுக்காக வடிவமைக்கப்பட்டுள்ளது. நாங்கள் நீங்கள் எதிர்கொள்ளக்கூடிய பொதுவான நேர்காணல் கேள்விகளைப் பிரித்து, ஒவ்வொரு கேள்விக்கும் பின்னால் உள்ள ஏன் என்பதை ஆராய்வோம். கேள்விகளுக்குப் பதிலளிப்பது மட்டுமல்லாமல், ஒரு உண்மையான முழு-அடுக்கு நிபுணராக உங்கள் மதிப்பை வெளிப்படுத்த தேவையான மனநிலையையும் அறிவையும் உங்களுக்கு வழங்குவதே எங்கள் குறிக்கோள்.
முழு-அடுக்கு மனநிலை: நேர்காணல் செய்பவர்கள் உண்மையில் எதைத் தேடுகிறார்கள்
குறிப்பிட்ட கேள்விகளுக்குள் செல்வதற்கு முன், நேர்காணல் செய்பவரின் கண்ணோட்டத்தைப் புரிந்துகொள்வது அவசியம். அவர்கள் ஒரு சரிபார்ப்புப் பட்டியலில் உள்ள பெட்டிகளை மட்டும் டிக் செய்வதில்லை. அவர்கள் உங்கள் திறனை மதிப்பிடுகிறார்கள்:
- சிக்கல்களைத் தீர்ப்பது: சிக்கலான பிரச்சனைகளை நிர்வகிக்கக்கூடிய பகுதிகளாகப் பிரித்து, தெளிவான தீர்வை உங்களால் வெளிப்படுத்த முடியுமா?
- முழுமையாக சிந்திப்பது: முகப்பில் ஏற்படும் ஒரு மாற்றம் பின்தளத்தை எவ்வாறு பாதிக்கலாம், அல்லது ஒரு தரவுத்தளத் தேர்வு செயல்திறன் மற்றும் அளவிடுதலை எவ்வாறு பாதிக்கிறது என்பதை நீங்கள் புரிந்துகொள்கிறீர்களா?
- திறம்பட தொடர்புகொள்வது: தொழில்நுட்ப மற்றும் தொழில்நுட்பம் அல்லாத பங்குதாரர்களுக்கு தொழில்நுட்பக் கருத்துக்களை உங்களால் தெளிவாக விளக்க முடியுமா? பல களங்களை இணைக்கும் ஒரு பாத்திரத்தில் இது இன்றியமையாதது.
- கற்றுக்கொண்டு மாற்றியமைப்பது: தொழில்நுட்ப உலகம் தொடர்ந்து மாறிக்கொண்டே இருக்கிறது. நீங்கள் கற்றுக்கொள்வதில் ஆர்வம் உள்ளவர் என்பதையும், தற்போதைய நிலவரப்படி இருக்க ஒரு உத்தி வைத்திருப்பதையும் நேர்காணல் செய்பவர்கள் காண விரும்புகிறார்கள்.
- சமரசங்களை ஏற்றுக்கொள்வது: மென்பொருள் பொறியியலில் ஒரே ஒரு "சரியான" பதில் அரிதாகவே உள்ளது. ஒரு வலிமையான வேட்பாளர் வெவ்வேறு அணுகுமுறைகளின் நன்மை தீமைகளைப் பற்றி விவாதிக்க முடியும் (எ.கா., செயல்திறன் மற்றும் மேம்பாட்டு வேகம், SQL மற்றும் NoSQL).
நேர்காணல் முழுவதும் இந்த குணங்களை வெளிப்படுத்துவதே உங்கள் குறிக்கோள். ஒவ்வொரு கேள்வியையும் உங்கள் திறமைகள் மற்றும் அனுபவத்தைப் பற்றிய ஒரு கதையைச் சொல்ல ஒரு வாய்ப்பாக நினைத்துப் பாருங்கள்.
பிரிவு 1: நடத்தை மற்றும் அடிப்படை கேள்விகள்
பெரும்பாலும் நேர்காணலைத் தொடங்கும் இந்தக் கேள்விகள், உங்கள் ஆளுமை, ஆர்வம் மற்றும் தகவல் தொடர்பு பாணி ஆகியவற்றைப் பற்றிய ஒரு உணர்வை நேர்காணல் செய்பவருக்கு வழங்குகின்றன. இவற்றை குறைத்து மதிப்பிடாதீர்கள்.
1. "நீங்கள் பணியாற்றிய ஒரு சவாலான திட்டம் பற்றி கூறுங்கள்."
அவர்கள் என்ன கேட்கிறார்கள்: "சிக்கலான சூழ்நிலைகளைக் கையாளவும், பொறுப்பேற்கவும், நிஜ உலகப் பிரச்சனைகளைத் தீர்க்கவும் உங்களால் முடியும் என்பதைக் காட்டுங்கள்."
பதிலளிப்பது எப்படி: STAR முறையை (சூழ்நிலை, பணி, செயல், விளைவு) பயன்படுத்தவும்.
- சூழ்நிலை: திட்டத்தையும் அதன் வணிகச் சூழலையும் சுருக்கமாக விவரிக்கவும். (எ.கா., "நாங்கள் ஒரு இ-காமர்ஸ் தளத்திற்கு நிகழ்நேர பகுப்பாய்வு டாஷ்போர்டை உருவாக்கிக் கொண்டிருந்தோம்.")
- பணி: உங்கள் குறிப்பிட்ட பங்கையும் நீங்கள் சந்தித்த சவாலையும் விளக்கவும். (எ.கா., "குறைந்த தாமதத்துடன் ஒரு நாளைக்கு மில்லியன் கணக்கான பயனர் நிகழ்வுகளைச் செயலாக்கி ஒருங்கிணைக்க பின்தள சேவையை வடிவமைத்து செயல்படுத்துவதே எனது பணி. தரவுத்தளத்தை அதிகமாகச் சுமை ஏற்றாமல், தரவு நிகழ்நேரத்திற்கு அருகில் இருப்பதை உறுதி செய்வதே முக்கிய சவாலாக இருந்தது.")
- செயல்: நீங்கள் எடுத்த நடவடிக்கைகளை விவரிக்கவும். இங்குதான் நீங்கள் தொழில்நுட்பத் தேர்வுகள், கட்டமைப்பு மற்றும் ஒத்துழைப்பு பற்றிப் பேசுவீர்கள். (எ.கா., "நிகழ்வு உட்கிரகித்தலை செயலாக்கத்திலிருந்து பிரிக்க RabbitMQ போன்ற ஒரு செய்தி வரிசையைப் பயன்படுத்தத் தேர்ந்தெடுத்தேன். Node.js இல் ஒரு நுகர்வோர் சேவையை உருவாக்கினேன், அது செய்திகளைத் தொகுப்புகளாகச் செயலாக்கி, ஒருங்கிணைந்த முடிவுகளை PostgreSQL தரவுத்தளத்தில் எழுதும். மிகவும் அடிக்கடி கேட்கப்படும் வினவல்களை உடனடியாக வழங்க Redis உடன் கேச்சிங்கையும் செயல்படுத்தினேன்.")
- விளைவு: முடிவை அளவிடவும். உங்கள் வேலையின் தாக்கம் என்ன? (எ.கா., "இதன் விளைவாக, டாஷ்போர்டு ஏற்றுதல் நேரங்களை 70% குறைத்தோம், மேலும் செயல்திறன் குறையாமல் 5 மடங்கு அதிகரித்த போக்குவரத்தைக் கையாள முடிந்தது. இது பகுப்பாய்வு அம்சங்களுடன் பயனர் ஈடுபாட்டை 15% அதிகரித்தது.")
2. "சமீபத்திய தொழில்நுட்பங்கள் மற்றும் போக்குகளுடன் நீங்கள் எப்படி புதுப்பித்துக் கொள்கிறீர்கள்?"
அவர்கள் என்ன கேட்கிறார்கள்: "உங்கள் தொழில்முறை வளர்ச்சியில் நீங்கள் ஆர்வமாகவும் முன்முயற்சியுடனும் இருக்கிறீர்களா?"
பதிலளிப்பது எப்படி: குறிப்பாகக் கூறுங்கள். உண்மையான ஆர்வத்தைக் காட்டும் பல்வேறு ஆதாரங்களைக் குறிப்பிடவும்.
- வலைப்பதிவுகள் மற்றும் செய்திமடல்கள்: புகழ்பெற்ற ஆதாரங்களைக் குறிப்பிடவும் (எ.கா., Smashing Magazine, CSS-Tricks, Netflix அல்லது Uber போன்ற நிறுவனங்களின் அதிகாரப்பூர்வ தொழில்நுட்ப வலைப்பதிவுகள், JavaScript Weekly போன்ற செய்திமடல்கள்).
- சமூகங்கள்: Stack Overflow, Reddit (எ.கா., r/webdev, r/programming), அல்லது உள்ளூர் டெவலப்பர் சந்திப்புகள் போன்ற தளங்களில் உங்கள் பங்கேற்பைப் பற்றிப் பேசுங்கள்.
- பக்கத் திட்டங்கள்: இது ஒரு சக்திவாய்ந்த அறிகுறி. ஒரு புதிய தொழில்நுட்பத்துடன் நீங்கள் பரிசோதனை செய்த ஒரு சிறிய திட்டத்தை விவரிக்கவும் (எ.கா., "Svelte மற்றும் Supabase ஆகியவற்றின் டெவலப்பர் அனுபவத்தைப் புரிந்துகொள்ள நான் ஒரு சிறிய செயலியை உருவாக்கி வருகிறேன்.").
- பாட்காஸ்ட்கள் அல்லது படிப்புகள்: தொடர்புடைய பாட்காஸ்ட்களைக் குறிப்பிடுவது (எ.கா., Syntax.fm, Software Engineering Daily) அல்லது சமீபத்திய ஆன்லைன் படிப்புகள் நீங்கள் கற்பதில் நேரத்தை முதலீடு செய்வதைக் காட்டுகிறது.
3. "ஒரு சக ஊழியருடன் உங்களுக்கு ஏற்பட்ட ஒரு தொழில்நுட்ப கருத்து வேறுபாட்டை விவரிக்கவும். அதை எப்படித் தீர்த்தீர்கள்?"
அவர்கள் என்ன கேட்கிறார்கள்: "உங்களால் தொழில் ரீதியாக ஒத்துழைத்து, உங்கள் சொந்த அகங்காரத்தை விட திட்டத்தின் வெற்றிக்கு முன்னுரிமை அளிக்க முடியுமா?"
பதிலளிப்பது எப்படி: தரவு சார்ந்த, மரியாதையான அணுகுமுறையில் கவனம் செலுத்துங்கள். மற்றவரைக் குறை கூறுவதைத் தவிர்க்கவும். சிறந்த கதை ஒரு சமரசத்துடன் அல்லது கருத்தின் அடிப்படையில் அல்லாமல், ஆதாரத்தின் அடிப்படையில் எடுக்கப்பட்ட ஒரு முடிவுடன் முடிவடைகிறது.
உதாரணம்: "ஒரு புதிய சேவைக்கு GraphQL அல்லது ஒரு பாரம்பரிய REST API-ஐப் பயன்படுத்துவதா என்று நானும் என் சக ஊழியரும் விவாதித்துக் கொண்டிருந்தோம். எளிமைக்காக என் விருப்பம் REST ஆக இருந்தது, அதேசமயம் அவர் GraphQL-இன் நெகிழ்வுத்தன்மைக்கு வாதிட்டார். அதைத் தீர்க்க, இரண்டு அணுகுமுறைகளையும் பயன்படுத்தி சில முக்கிய அம்சங்களுக்கான சிறிய செயல்முறைச் சான்றுகளை (POCs) உருவாக்க முடிவு செய்தோம். பின்னர் டெவலப்பர் அனுபவம், செயல்திறன் மற்றும் நீண்ட காலப் பராமரிப்பு ஆகியவற்றில் கவனம் செலுத்தி, நன்மை தீமைகளை குழுவிடம் வழங்கினோம். இறுதியில், எங்கள் மொபைல் பயன்பாட்டிலிருந்து நெட்வொர்க் கோரிக்கைகளின் எண்ணிக்கையை அது எவ்வாறு குறைக்கும் என்பதை POC நிரூபித்ததால், குழு GraphQL-ஐத் தேர்ந்தெடுத்தது. அந்தச் செயல்பாட்டில் GraphQL-இன் நன்மைகள் பற்றி நான் நிறைய கற்றுக்கொண்டேன்."
பிரிவு 2: முகப்பு மேம்பாடு குறித்த கேள்விகள்
இந்த பிரிவு உள்ளுணர்வு, அணுகக்கூடிய மற்றும் செயல்திறன் மிக்க பயனர் இடைமுகங்களை உருவாக்கும் உங்கள் திறனை சோதிக்கிறது. உங்கள் பலம் பின்தளமாக இருந்தாலும், நீங்கள் இங்கேயும் திறமையானவராக இருக்க வேண்டும் என்று எதிர்பார்க்கப்படுகிறது.
HTML & CSS
1. "செமாண்டிக் HTML என்றால் என்ன, அது ஏன் முக்கியம்?"
செமாண்டிக் HTML அதன் தோற்றத்தை மட்டும் குறிக்காமல் (<div>
அல்லது <span>
போன்றவை), உள்ளடக்கத்தின் பொருள் மற்றும் கட்டமைப்பை விவரிக்கும் குறிச்சொற்களைப் பயன்படுத்துகிறது (எ.கா., <header>
, <nav>
, <main>
, <article>
, <footer>
) என்று விளக்கவும். அதன் முக்கியத்துவம் இதில்தான் உள்ளது:
அணுகல்தன்மை: ஸ்கிரீன் ரீடர்கள் இந்தக் குறிச்சொற்களைப் பயன்படுத்தி பார்வை குறைபாடுள்ள பயனர்கள் பக்கத்தில் செல்ல உதவுகின்றன.
SEO: தேடுபொறிகள் உள்ளடக்கத்தை நன்கு புரிந்துகொள்ள இவற்றைப் பயன்படுத்துகின்றன, இது தரவரிசையை மேம்படுத்தும்.
பராமரிப்புத்திறன்: இது மற்ற டெவலப்பர்கள் குறியீட்டைப் படிக்கவும் புரிந்துகொள்ளவும் எளிதாக்குகிறது.
2. "CSS பாக்ஸ் மாடலை விளக்க முடியுமா?"
ஆவண மரத்தில் உள்ள கூறுகளுக்காக உருவாக்கப்படும் செவ்வகப் பெட்டிகளை விவரிக்கவும். ஒவ்வொரு பெட்டிக்கும் நான்கு விளிம்புகள் உள்ளன: உள்ளடக்க விளிம்பு (content edge), பேடிங் விளிம்பு (padding edge), பார்டர் விளிம்பு (border edge), மற்றும் மார்ஜின் விளிம்பு (margin edge). நீங்கள் box-sizing
பண்பையும் விளக்க முடியும், குறிப்பாக content-box
(இயல்புநிலை) மற்றும் border-box
(பேடிங் மற்றும் பார்டரை தனிமத்தின் மொத்த அகலம் மற்றும் உயரத்தில் சேர்ப்பதால் பல டெவலப்பர்கள் இதை விரும்புகிறார்கள்) ஆகியவற்றுக்கு இடையேயான வேறுபாட்டை விளக்க வேண்டும்.
3. "ஃபிளெக்ஸ்பாக்ஸிற்குப் பதிலாக CSS கிரிட்டை எப்போது பயன்படுத்துவீர்கள்?"
இந்தக் கேள்வி நவீன லேஅவுட் நுட்பங்களைப் பற்றிய உங்கள் புரிதலை சோதிக்கிறது. ஒரு நல்ல பதில்:
ஃபிளெக்ஸ்பாக்ஸ் ஒரு பரிமாண லேஅவுட்களுக்கு ஏற்றது - ஒரு வரிசை அல்லது ஒரு நெடுவரிசை. ஒரு வழிசெலுத்தல் பட்டியில் பொருட்களை சீரமைப்பது அல்லது ஒரு கொள்கலனில் பொருட்களை விநியோகிப்பது பற்றி சிந்தியுங்கள்.
கிரிட் இரு பரிமாண லேஅவுட்களுக்காக வடிவமைக்கப்பட்டுள்ளது - ஒரே நேரத்தில் வரிசைகள் மற்றும் நெடுவரிசைகள். ஒரு கேலரி அல்லது ஒரு வலைப்பக்கத்தின் ஒட்டுமொத்த கட்டமைப்பு போன்ற சிக்கலான பக்க லேஅவுட்களை உருவாக்குவதற்கு இது சரியானது.
JavaScript
1. "ஜாவாஸ்கிரிப்டில் உள்ள க்ளோஷர்களை விளக்கவும். ஒரு நடைமுறை உதாரணம் கொடுக்க முடியுமா?"
ஒரு க்ளோஷர் என்பது அது உருவாக்கப்பட்ட சூழலை நினைவில் வைத்திருக்கும் ஒரு செயல்பாடு. அதற்கு அதன் சொந்த நோக்கம், வெளிப்புற செயல்பாட்டின் நோக்கம் மற்றும் உலகளாவிய நோக்கத்திற்கான அணுகல் உள்ளது.
உலகளாவிய நோக்கத்தை மாசுபடுத்தாத ஒரு கவுண்டர் செயல்பாடு ஒரு உன்னதமான எடுத்துக்காட்டு:
function createCounter() {
let count = 0;
return function() {
count++;
return count;
};
}
const counter1 = createCounter();
console.log(counter1()); // 1
console.log(counter1()); // 2
const counter2 = createCounter(); // A new, separate closure
console.log(counter2()); // 1
தரவு தனியுரிமை மற்றும் கால்பேக்குகள் உட்பட ஜாவாஸ்கிரிப்டில் பல வடிவங்களுக்கு க்ளோஷர்கள் அடிப்படையானவை.
2. "`Promise.all` மற்றும் `Promise.race` க்கு என்ன வித்தியாசம்?"
Promise.all(iterable)
: பிராமிஸ்களின் ஒரு தொகுப்பை எடுத்துக்கொண்டு ஒரு புதிய பிராமிஸை வழங்குகிறது. உள்ளீட்டு பிராமிஸ்கள் அனைத்தும் தீர்க்கப்படும்போது, அவற்றின் முடிவுகளின் வரிசையுடன் இந்த புதிய பிராமிஸ் தீர்க்கப்படுகிறது. உள்ளீட்டு பிராமிஸ்களில் ஏதேனும் ஒன்று நிராகரிக்கப்பட்டால் அது நிராகரிக்கப்படும்.
Promise.race(iterable)
: இதுவும் பிராமிஸ்களின் ஒரு தொகுப்பை எடுத்துக்கொள்கிறது. இது தொகுப்பில் உள்ள முதல் பிராமிஸ் தீர்க்கப்பட்டவுடன் அல்லது நிராகரிக்கப்பட்டவுடன், அந்த பிராமிஸின் மதிப்பு அல்லது காரணத்துடன் ஒரு புதிய பிராமிஸைத் தருகிறது.
3. "`async/await` ஐ விளக்கி, அது பிராமிஸ்களுடன் எவ்வாறு தொடர்புடையது என்று கூறவும்."
async/await
என்பது பிராமிஸ்களின் மேல் கட்டப்பட்ட ஒரு தொடரியல் சர்க்கரை. இது ஒத்திசைவற்ற குறியீட்டை ஒத்திசைவான குறியீட்டைப் போல தோற்றமளிக்கும் மற்றும் செயல்படும் வகையில் எழுத உங்களை அனுமதிக்கிறது, இதனால் அதைப் படிக்கவும் புரிந்துகொள்ளவும் எளிதாகிறது.
- ஒரு செயல்பாட்டு அறிவிப்புக்கு முன்
async
என்ற முக்கியச்சொல் அதை மறைமுகமாக ஒரு பிராமிஸை வழங்க வைக்கிறது. await
என்ற முக்கியச்சொல் ஒருasync
செயல்பாட்டிற்குள் மட்டுமே பயன்படுத்தப்பட முடியும். இது செயல்பாட்டின் செயலாக்கத்தை இடைநிறுத்தி, ஒரு பிராமிஸ் தீர்க்கப்படும் வரை காத்திருந்து, பின்னர் செயல்பாட்டைத் தொடர்கிறது மற்றும் தீர்க்கப்பட்ட மதிப்பை வழங்குகிறது.
.then()
சங்கிலியை ஒரு சுத்தமான async/await
செயல்பாடாக எவ்வாறு மாற்றுவீர்கள் என்பதைக் காட்டுங்கள்.
கட்டமைப்புகள் (React, Vue, Angular, போன்றவை)
இங்குள்ள கேள்விகள் வேலை വിവரணத்தில் பட்டியலிடப்பட்டுள்ள கட்டமைப்புக்கு குறிப்பிட்டதாக இருக்கும். நீங்கள் நன்கு அறிந்த ஒன்றைப் பற்றி விவாதிக்கத் தயாராக இருங்கள்.
1. (React) "Virtual DOM என்றால் என்ன, அது ஏன் நன்மை பயக்கும்?"
Virtual DOM (VDOM) என்பது ஒரு நிரலாக்கக் கருத்து, இதில் ஒரு UI-இன் மெய்நிகர் பிரதிநிதித்துவம் நினைவகத்தில் வைக்கப்பட்டு "உண்மையான" DOM உடன் ஒத்திசைக்கப்படுகிறது. ஒரு கூறுகளின் நிலை மாறும்போது, ஒரு புதிய VDOM பிரதிநிதித்துவம் உருவாக்கப்படுகிறது. React பின்னர் இந்த புதிய VDOM-ஐ முந்தையதுடன் ஒப்பிடுகிறது (இந்த செயல்முறைக்கு "diffing" என்று பெயர்). இது உண்மையான DOM-இல் இந்த மாற்றங்களைச் செய்வதற்கான மிகவும் திறமையான வழியைக் கணக்கிடுகிறது, நேரடி கையாளுதல்களைக் குறைக்கிறது, இது பெரும்பாலும் செயல்திறன் தடையாக இருக்கும்.
2. (பொது) "ஒரு பெரிய பயன்பாட்டில் நிலையை (state) எவ்வாறு நிர்வகிப்பீர்கள்?"
இது ஒரு முக்கியமான கேள்வி. உங்கள் பதில் எளிய தீர்வுகளிலிருந்து சிக்கலான தீர்வுகளுக்கு முன்னேற வேண்டும்.
- கூறு நிலை (Component State): பகிரத் தேவையில்லாத எளிய UI நிலைக்கு (எ.கா., ஒரு கீழ்தோன்றும் பட்டியல் திறந்திருக்கிறதா), உள்ளூர் கூறு நிலை (React-இன்
useState
போன்றவை) போதுமானது. - Prop Drilling: ஒரு பெற்றோர் மற்றும் சில உள்ளமைக்கப்பட்ட குழந்தைகளுக்கு இடையில் நிலையைப் பகிர்வதற்கு, ப்ராப்ஸ்களைக் கீழே அனுப்புவது நல்லது, ஆனால் ஆழமான படிநிலைகளில் இது சிக்கலாகிறது.
- Context API (React): ஒவ்வொரு மட்டத்திலும் ப்ராப்ஸ்களை கைமுறையாகக் கீழே அனுப்பாமல், கூறு மரம் வழியாக தரவைக் கடத்துவதற்கான ஒரு உள்ளமைக்கப்பட்ட வழி. தீம்கள் அல்லது பயனர் அங்கீகாரம் போன்ற உலகளாவிய தரவுகளின் குறைந்த அதிர்வெண் புதுப்பிப்புகளுக்கு நல்லது.
- நிலை மேலாண்மை நூலகங்கள் (Redux, Zustand, Vuex, Pinia): சிக்கலான, அடிக்கடி புதுப்பிக்கப்படும், மற்றும் பகிரப்பட்ட பயன்பாட்டு நிலைக்கு, இந்த நூலகங்கள் ஒரு மையப்படுத்தப்பட்ட ஸ்டோர் மற்றும் கணிக்கக்கூடிய நிலை புதுப்பிப்பு வடிவங்களை வழங்குகின்றன. முக்கிய கருத்துக்களை விளக்குங்கள்: உண்மையின் ஒற்றை ஆதாரம் (ஸ்டோர்), என்ன நடந்தது என்பதை விவரிக்க செயல்களை அனுப்புதல், மற்றும் நிலையைப் புதுப்பிக்க தூய செயல்பாடுகளை (reducers) பயன்படுத்துதல்.
பிரிவு 3: பின்தள மேம்பாடு குறித்த கேள்விகள்
இங்கே, கவனம் சர்வர், APIகள் மற்றும் தரவு நிலைத்தன்மைக்கு மாறுகிறது. நீங்கள் வலுவான, அளவிடக்கூடிய மற்றும் பாதுகாப்பான சேவைகளை உருவாக்க முடியும் என்பதை நேர்காணல் செய்பவர்கள் அறிய விரும்புகிறார்கள்.
APIs & கட்டமைப்பு
1. "ஒரு RESTful API-யின் கொள்கைகள் என்ன?"
REST (Representational State Transfer) என்பது ஒரு கட்டடக்கலை பாணி. ஒரு உண்மையான RESTful API பல கட்டுப்பாடுகளைப் பின்பற்றுகிறது:
- கிளையன்ட்-சர்வர் கட்டமைப்பு: UI (கிளையன்ட்) மற்றும் தரவு சேமிப்பகம் (சர்வர்) ஆகியவற்றுக்கு இடையேயான கவலைகளைப் பிரித்தல்.
- நிலையற்ற தன்மை: கிளையன்ட்டிலிருந்து சர்வருக்கு வரும் ஒவ்வொரு கோரிக்கையும், கோரிக்கையைப் புரிந்துகொண்டு முடிக்கத் தேவையான அனைத்து தகவல்களையும் கொண்டிருக்க வேண்டும். சர்வர் கோரிக்கைகளுக்கு இடையில் எந்த கிளையன்ட் சூழலையும் சேமிக்கக்கூடாது.
- கேச் செய்யக்கூடிய தன்மை: பதில்கள் தங்களை கேச் செய்யக்கூடியவை அல்லது இல்லை என்று வரையறுக்க வேண்டும், ताकि கிளையன்ட்கள் காலாவதியான தரவை மீண்டும் பயன்படுத்துவதைத் தடுக்க.
- அடுக்கு அமைப்பு: ஒரு கிளையன்ட் பொதுவாக அது இறுதி சர்வருடன் நேரடியாக இணைக்கப்பட்டுள்ளதா அல்லது வழியில் ஒரு இடைத்தரகருடன் (சுமை சமநிலைப்படுத்தி அல்லது கேச் போன்றவை) இணைக்கப்பட்டுள்ளதா என்பதைச் சொல்ல முடியாது.
- சீரான இடைமுகம்: இது முக்கிய கட்டுப்பாடு, இதில் வள அடிப்படையிலான URL-கள் (எ.கா.,
/users/123
), அந்த வளங்களில் செயல்களைச் செய்ய நிலையான HTTP முறைகளைப் பயன்படுத்துதல் (GET
,POST
,PUT
,DELETE
), மற்றும் வளங்களின் பிரதிநிதித்துவங்கள் (JSON போன்றவை) ஆகியவை அடங்கும்.
2. "REST-க்கு பதிலாக GraphQL-ஐ எப்போது பயன்படுத்துவீர்கள்?"
இது நவீன API முன்னுதாரணங்கள் பற்றிய உங்கள் விழிப்புணர்வை சோதிக்கிறது.
REST-ஐப் பயன்படுத்தவும்: உங்களிடம் எளிய, நன்கு வரையறுக்கப்பட்ட வளங்கள் இருக்கும்போது, மற்றும் ஒரு நிலையான, கேச் செய்யக்கூடிய மற்றும் நேரடியான API போதுமானதாக இருக்கும். இது பரவலாகப் புரிந்து கொள்ளப்பட்டுள்ளது மற்றும் ஒரு பெரிய சுற்றுச்சூழல் அமைப்பைக் கொண்டுள்ளது.
GraphQL-ஐப் பயன்படுத்தவும்:
- அதிகமாகப் பெறுதல்/குறைவாகப் பெறுவதைத் தவிர்த்தல்: கிளையன்ட்கள் தங்களுக்குத் தேவையான தரவை மட்டுமே கோர முடியும், அதற்கு மேல் எதுவும் இல்லை. இது மெதுவான நெட்வொர்க்குகளில் உள்ள மொபைல் கிளையன்ட்களுக்கு மிகவும் பயனுள்ளதாக இருக்கும்.
- சிக்கலான தரவு உறவுகள்: உங்களிடம் ஒரு வரைபடம் போன்ற தரவு மாதிரி இருந்தால் (எ.கா., பயனர்கள், பதிவுகள், கருத்துகள், விருப்பங்களைக் கொண்ட ஒரு சமூக வலைப்பின்னல்) மற்றும் ஒரே கோரிக்கையில் உள்ளமைக்கப்பட்ட தரவைப் பெற வேண்டும்.
- வளர்ந்து வரும் API-கள்: முகப்பு அணிகள் பின்தள மாற்றங்களுக்காகக் காத்திருக்காமல் தங்கள் வினவல்களில் புதிய புலங்களைச் சேர்க்கலாம்.
3. "ஒரு API-ஐ எவ்வாறு பாதுகாப்பீர்கள்?"
பல அடுக்கு பாதுகாப்பை உள்ளடக்கவும்:
- அங்கீகாரம்: பயனர் யார் என்பதைச் சரிபார்த்தல். JWT (JSON Web Tokens) போன்ற பொதுவான முறைகளைப் பற்றி விவாதிக்கவும், இதில் ஒரு கிளையன்ட் உள்நுழைந்த பிறகு ஒரு டோக்கனைப் பெற்று, அதைத் தொடர்ச்சியான கோரிக்கைகளின் `Authorization` தலைப்பில் சேர்க்கிறது. மூன்றாம் தரப்பு அங்கீகாரத்திற்காக OAuth 2.0-ஐயும் குறிப்பிடவும்.
- அதிகாரமளித்தல்: அங்கீகரிக்கப்பட்ட பயனர் என்ன செய்ய அனுமதிக்கப்படுகிறார் என்பதைச் சரிபார்த்தல். பங்கு அடிப்படையிலான அணுகல் கட்டுப்பாட்டை (RBAC) பற்றி விவாதிக்கவும், இதில் ஒரு பயனரின் அனுமதிகள் அவருக்கு ஒதுக்கப்பட்ட பங்கை அடிப்படையாகக் கொண்டவை (எ.கா., நிர்வாகி, ஆசிரியர், பார்வையாளர்).
- தரவு சரிபார்ப்பு: SQL ஊசி மற்றும் குறுக்கு-தள ஸ்கிரிப்டிங் (XSS) போன்ற தாக்குதல்களைத் தடுக்க சர்வர் பக்கத்தில் கிளையன்ட்டிலிருந்து உள்ளீட்டை எப்போதும் சரிபார்த்து சுத்தப்படுத்தவும்.
- HTTPS/TLS: நடுவில் மனிதர் தாக்குதல்களைத் தடுக்க பயணத்தில் உள்ள அனைத்து தரவையும் குறியாக்கம் செய்தல்.
- விகித வரம்பிடல்: ஒரு குறிப்பிட்ட காலத்திற்குள் ஒரு கிளையன்ட் செய்யக்கூடிய கோரிக்கைகளின் எண்ணிக்கையைக் கட்டுப்படுத்துவதன் மூலம் உங்கள் API-ஐ சேவை மறுப்பு (DoS) தாக்குதல்கள் அல்லது துஷ்பிரயோகத்திலிருந்து பாதுகாத்தல்.
தரவுத்தளங்கள்
1. "ஒரு SQL மற்றும் ஒரு NoSQL தரவுத்தளத்திற்கு என்ன வித்தியாசம்? ஒன்றை மற்றொன்றிற்கு மேல் எப்போது தேர்ந்தெடுப்பீர்கள்?"
இது ஒரு அடிப்படை முழு-அடுக்கு கேள்வி.
SQL (தொடர்புடைய தரவுத்தளங்கள்) PostgreSQL, MySQL போன்றவை:
- கட்டமைப்பு: தரவு ஒரு முன்வரையறுக்கப்பட்ட திட்டத்துடன் (வரிசைகள் மற்றும் நெடுவரிசைகள்) அட்டவணைகளில் சேமிக்கப்படுகிறது.
- பலங்கள்: உறவுகள் முக்கியமான கட்டமைக்கப்பட்ட தரவுகளுக்கு சிறந்தது. அவை தரவு ஒருமைப்பாட்டைச் செயல்படுத்துகின்றன மற்றும் JOIN களுடன் சிக்கலான வினவல்களை ஆதரிக்கின்றன. அவை ACID (அணுவியல், நிலைத்தன்மை, தனிமைப்படுத்தல், ஆயுள்) இணக்கமானவை, நம்பகமான பரிவர்த்தனைகளை உறுதி செய்கின்றன.
- பயன்பாட்டு வழக்குகள்: இ-காமர்ஸ் தளங்கள், நிதி பயன்பாடுகள், தரவு நிலைத்தன்மை மிக முக்கியமான எந்தவொரு அமைப்பும்.
- கட்டமைப்பு: ஆவணம் சார்ந்த, விசை-மதிப்பு, பரந்த-நெடுவரிசை அல்லது வரைபடம் சார்ந்ததாக இருக்கலாம். அவை பொதுவாக ஒரு மாறும் அல்லது நெகிழ்வான திட்டத்தைக் கொண்டுள்ளன.
- பலங்கள்: கட்டமைக்கப்படாத அல்லது அரை-கட்டமைக்கப்பட்ட தரவுகளுக்கு சிறந்தது. அவை பொதுவாக கிடைமட்டமாக மிக நன்றாக அளவிடப்படுகின்றன மற்றும் குறிப்பிட்ட அணுகல் வடிவங்களுக்கு உயர் செயல்திறனை வழங்குகின்றன. அவை பெரும்பாலும் BASE (அடிப்படையில் கிடைக்கும், மென்மையான நிலை, இறுதியில் நிலைத்தன்மை) மாதிரியைப் பின்பற்றுகின்றன.
- பயன்பாட்டு வழக்குகள்: பெரிய தரவு பயன்பாடுகள், நிகழ்நேர பகுப்பாய்வு, உள்ளடக்க மேலாண்மை அமைப்புகள், IoT தரவு.
2. "தரவுத்தள குறியீடு (index) என்றால் என்ன, செயல்திறனுக்கு அது ஏன் முக்கியம்?"
ஒரு குறியீடு என்பது ஒரு தரவு அமைப்பு (பொதுவாக ஒரு B-மரம்) ஆகும், இது ஒரு தரவுத்தள அட்டவணையில் தரவு மீட்டெடுப்பு நடவடிக்கைகளின் வேகத்தை மேம்படுத்துகிறது, கூடுதல் எழுதுதல்கள் மற்றும் சேமிப்பக இடத்தின் விலையில். ஒரு குறியீடு இல்லாமல், தரவுத்தளம் தொடர்புடைய வரிசைகளைக் கண்டுபிடிக்க முழு அட்டவணையையும் ஸ்கேன் செய்ய வேண்டும் ("முழு அட்டவணை ஸ்கேன்"). ஒரு குறிப்பிட்ட நெடுவரிசையில் ஒரு குறியீட்டுடன் (எ.கா., `user_email`), தரவுத்தளம் குறியீட்டில் மதிப்பைத் தேடி, தொடர்புடைய தரவின் இருப்பிடத்திற்கு நேரடியாகச் செல்ல முடியும், இது மிகவும் வேகமானது. சமரசத்தைப் பற்றி விவாதிக்கவும்: குறியீடுகள் `SELECT` வினவல்களை வேகப்படுத்துகின்றன, ஆனால் `INSERT`, `UPDATE`, மற்றும் `DELETE` செயல்பாடுகளை மெதுவாக்கலாம், ஏனெனில் குறியீடும் புதுப்பிக்கப்பட வேண்டும்.
பிரிவு 4: "முழு-அடுக்கு" பசை: DevOps, சோதனை & கணினி வடிவமைப்பு
இங்குதான் மூத்த வேட்பாளர்கள் உண்மையிலேயே பிரகாசிக்கிறார்கள். இந்தக் கேள்விகள் குறியீடு எழுதுவதிலிருந்து அதை அளவீட்டில் வரிசைப்படுத்துவது மற்றும் பராமரிப்பது வரை முழு மென்பொருள் மேம்பாட்டு வாழ்க்கைச் சுழற்சியைப் பற்றி சிந்திக்கும் உங்கள் திறனை சோதிக்கின்றன.
DevOps & CI/CD
1. "CI/CD என்றால் என்ன, அதைச் செயல்படுத்த நீங்கள் என்ன கருவிகளைப் பயன்படுத்தியுள்ளீர்கள்?"
CI (தொடர்ச்சியான ஒருங்கிணைப்பு) என்பது அனைத்து டெவலப்பர்களின் வேலை செய்யும் குறியீட்டின் நகல்களை அடிக்கடி ஒரு பகிரப்பட்ட பிரதான வரிக்கு இணைக்கும் நடைமுறையாகும். ஒவ்வொரு ஒருங்கிணைப்பும் ஒரு தானியங்கு உருவாக்கம் (மற்றும் தானியங்கு சோதனைகள்) மூலம் சரிபார்க்கப்படுகிறது, ताकि ஒருங்கிணைப்புப் பிழைகளை விரைவில் கண்டறிய முடியும்.
CD (தொடர்ச்சியான விநியோகம்/வரிசைப்படுத்தல்) என்பது உருவாக்கும் கட்டத்திற்குப் பிறகு அனைத்து குறியீட்டு மாற்றங்களையும் ஒரு சோதனை மற்றும்/அல்லது உற்பத்திச் சூழலுக்கு தானாக வரிசைப்படுத்தும் நடைமுறையாகும்.
நன்மைகளை விளக்கவும்: வேகமான வெளியீட்டுச் சுழற்சிகள், மேம்பட்ட டெவலப்பர் உற்பத்தித்திறன், மற்றும் குறைந்த-ஆபத்துள்ள வெளியீடுகள். நீங்கள் பயன்படுத்திய கருவிகளைக் குறிப்பிடவும், அதாவது Jenkins, GitLab CI, GitHub Actions, அல்லது CircleCI.
2. "டாக்கர் (Docker) என்றால் என்ன, அதை நீங்கள் எப்படிப் பயன்படுத்தியுள்ளீர்கள்?"
டாக்கரை கொள்கலன்களில் பயன்பாடுகளை உருவாக்குதல், அனுப்புதல் மற்றும் இயக்குவதற்கான ஒரு தளமாக விளக்கவும். ஒரு கொள்கலன் குறியீடு மற்றும் அதன் அனைத்து சார்புகளையும் தொகுக்கிறது, எனவே பயன்பாடு ஒரு கணினி சூழலில் இருந்து மற்றொன்றுக்கு விரைவாகவும் நம்பகத்தன்மையுடனும் இயங்குகிறது. அதை நீங்கள் எவ்வாறு பயன்படுத்தியுள்ளீர்கள் என்பதைக் குறிப்பிடவும்:
மேம்பாட்டுச் சூழல்களைத் தரப்படுத்துதல்: குழுவில் உள்ள ஒவ்வொரு டெவலப்பரும் ஒரே சார்புகளுடன் வேலை செய்வதை உறுதி செய்தல்.
வரிசைப்படுத்தலை எளிதாக்குதல்: ஒரு கையடக்க கலைப்பொருளை (ஒரு படம்) உருவாக்குதல், அது டாக்கர் நிறுவப்பட்ட எங்கும், ஒரு உள்ளூர் இயந்திரத்திலிருந்து ஒரு கிளவுட் VM வரை இயக்கப்படலாம்.
மைக்ரோசர்வீஸ்களை இயக்குதல்: ஒவ்வொரு சேவையும் அதன் சொந்த தனிமைப்படுத்தப்பட்ட கொள்கலனில் இயங்க முடியும்.
கணினி வடிவமைப்பு
நடுத்தர நிலை முதல் மூத்த நிலை வரையிலான பாத்திரங்களுக்கு, நீங்கள் ஒரு பரந்த, திறந்த-முடிவு கணினி வடிவமைப்பு கேள்வியைப் பெறுவீர்கள். 30 நிமிடங்களில் ஒரு சரியான, விரிவான கட்டமைப்பை உருவாக்குவது குறிக்கோள் அல்ல, ஆனால் உங்கள் சிந்தனை செயல்முறையை வெளிப்படுத்துவதே குறிக்கோள்.
உதாரணக் கேள்வி: "TinyURL போன்ற ஒரு URL சுருக்கும் சேவையை வடிவமைக்கவும்."
ஒரு கட்டமைக்கப்பட்ட அணுகுமுறையைப் பின்பற்றவும்:
- தேவைகளை தெளிவுபடுத்துங்கள் (செயல்பாட்டு மற்றும் செயல்பாடு அல்லாத):
- செயல்பாட்டு: பயனர்கள் ஒரு நீண்ட URL-ஐ உள்ளிட்டு ஒரு குறுகிய URL-ஐப் பெறலாம். பயனர்கள் குறுகிய URL-ஐ அணுகும்போது, அவர்கள் அசல் நீண்ட URL-க்கு திருப்பி விடப்படுகிறார்கள். பயனர்கள் தனிப்பயன் குறுகிய URL-களைக் கொண்டிருக்கலாம்.
- செயல்பாடு அல்லாத: சேவை அதிக அளவில் கிடைக்க வேண்டும் (செயலிழப்பு இல்லை). திருப்பிவிடுதல்கள் மிக வேகமாக இருக்க வேண்டும் (குறைந்த தாமதம்). குறுகிய URL-கள் யூகிக்க முடியாததாக இருக்க வேண்டும். கணினி மில்லியன் கணக்கான URL-களையும் திருப்பிவிடுதல்களையும் கையாளும் வகையில் அளவிடக்கூடியதாக இருக்க வேண்டும்.
- உயர்-நிலை வடிவமைப்பு (வரைபடம்):
முக்கிய கூறுகளை வரையவும். இது அநேகமாக ஒரு கிளையன்ட் (வலை உலாவி), ஒரு வலை சர்வர்/API கேட்வே, ஒரு பயன்பாட்டு சேவை மற்றும் ஒரு தரவுத்தளத்தை உள்ளடக்கும்.
- API இறுதிப்புள்ளிகள்:
POST /api/v1/url
உடன்{"longUrl": "http://..."}
போன்ற ஒரு அமைப்பைக் கொண்டு ஒரு குறுகிய URL-ஐ உருவாக்கலாம்.GET /{shortUrlCode}
திருப்பிவிடுதலைக் கையாள.
- தரவுத்தள திட்டம் (Schema):
தரவுத்தளத் தேர்வைப் பற்றி விவாதிக்கவும். Redis அல்லது DynamoDB போன்ற ஒரு NoSQL விசை-மதிப்பு ஸ்டோர்
shortUrlCode -> longUrl
மேப்பிங்கிற்கு அதன் வேகமான வாசிப்பு செயல்திறன் காரணமாக சிறப்பாக இருக்கும். நீங்கள் ஒரு SQL தரவுத்தளத்தையும் ஒருUrls(short_code, long_url, created_at)
போன்ற அட்டவணையுடன் பயன்படுத்தலாம், அங்கு `short_code` முதன்மை விசையாகவும் குறியிடப்பட்டதாகவும் இருக்கும். - முக்கிய தர்க்கம் (குறுகிய URL-ஐ உருவாக்குதல்):
`shortUrlCode`-ஐ எப்படி உருவாக்குவீர்கள்? விருப்பங்களைப் பற்றி விவாதிக்கவும்:
a) நீண்ட URL-ஐ ஹாஷ் செய்தல் (எ.கா., MD5) மற்றும் முதல் 6-7 எழுத்துக்களை எடுத்தல். மோதல்கள் பற்றி என்ன?
b) ஒவ்வொரு புதிய URL-க்கும் அதிகரிக்கும் ஒரு கவுண்டரைப் பயன்படுத்தி, பின்னர் அதை ஒரு குறுகிய எண்ணெழுத்து சரத்தைப் பெற base-62 குறியாக்கம் செய்தல். இது தனித்துவத்தை உறுதி செய்கிறது. - கணினியை அளவிடுதல்:
இங்குதான் நீங்கள் முக்கிய புள்ளிகளைப் பெறுவீர்கள். விவாதிக்கவும்:
- சுமை சமநிலைப்படுத்திகள்: பல வலை சேவையகங்களில் போக்குவரத்தை விநியோகிக்க.
- கேச்சிங்: பல URL-கள் அடிக்கடி கோரப்படுவதால்,
shortUrlCode -> longUrl
மேப்பிங்கை Redis அல்லது Memcached போன்ற ஒரு விநியோகிக்கப்பட்ட கேச்சில் சேமிப்பது தரவுத்தளச் சுமையைக் கணிசமாகக் குறைத்து, திருப்பிவிடுதல் வேகத்தை மேம்படுத்தும். - தரவுத்தள அளவிடுதல்: திருப்பிவிடுதல்களுக்கான அதிக வாசிப்புப் போக்குவரத்தைக் கையாள வாசிப்புப் பிரதிகளைப் பற்றி விவாதிக்கவும் மற்றும் கணினி பெரியதாக வளர்ந்தால் எழுதுதல்-கனமான சுமைகளுக்கு ஷார்டிங் செய்யவும்.
- உள்ளடக்க விநியோக நெட்வொர்க் (CDN): இன்னும் வேகமான உலகளாவிய பதிலுக்கு, திருப்பிவிடுதல் தர்க்கம் விளிம்பு இடங்களுக்குத் தள்ளப்படலாம்.
முடிவுரை: உங்கள் வெற்றிக்கான பாதை
ஒரு முழு-அடுக்கு டெவலப்பர் நேர்காணலை வழிநடத்துவது ஒரு மராத்தான், ஒரு ஸ்பிரிண்ட் அல்ல. இது உங்கள் கூட்டு மனப்பான்மை முதல் உங்கள் ஆழ்ந்த தொழில்நுட்ப அறிவு வரை உங்கள் திறன்களின் முழு அளவையும் சோதிக்கிறது. பதில்களை மனப்பாடம் செய்வது அல்ல, அவற்றின் பின்னணியில் உள்ள கொள்கைகளைப் புரிந்துகொள்வதே முக்கியம்.
உங்கள் சிந்தனை செயல்முறையை வெளிப்படுத்தப் பயிற்சி செய்யுங்கள். ஒவ்வொரு தொழில்நுட்பத் தேர்வுக்கும், "ஏன்" என்பதை விளக்கி, சமரசங்களைப் பற்றி விவாதிக்கத் தயாராக இருங்கள். உங்கள் திறன்களுக்குச் சான்றாக உங்கள் கடந்தகால திட்டங்களைப் பயன்படுத்தவும். எல்லாவற்றிற்கும் மேலாக, சிறந்த மென்பொருளை உருவாக்குவதில் உங்கள் ஆர்வம் பிரகாசிக்கட்டும்.
இந்த பல்வேறு பகுதிகளில்—நடத்தை, முகப்பு, பின்தளம் மற்றும் கணினி சிந்தனை—தயார்படுத்துவதன் மூலம், உலகின் எந்தப் பகுதியில் வாய்ப்பு இருந்தாலும், ஒரு நவீன முழு-அடுக்கு பாத்திரத்தின் சவால்களைச் சமாளிக்கத் தயாராக இருக்கும் ஒரு திறமையான, நன்கு வட்டமான பொறியியலாளராக உங்களை நிலைநிறுத்துகிறீர்கள். வாழ்த்துக்கள்!