Tillbaka till Manuell QA
1. HTTP & Webb-grunder
1. Vad är HTTP?
HTTP (Hypertext Transfer Protocol) är protokollet som används för att överföra data över webben. Det definierar hur meddelanden formateras och överförs, och hur webbserverar och webbläsare ska svara på olika kommandon.
2. Vad är skillnaden mellan HTTP och HTTPS?
HTTPS (Hypertext Transfer Protocol Secure) är den säkra versionen av HTTP. Den använder SSL/TLS-kryptering för att skydda data som överförs mellan klienten och servern.
3. Hur skickar HTTPS förfrågningar säkert?
HTTPS använder TLS (Transport Layer Security) eller SSL (Secure Sockets Layer) för att kryptera data. Det innebär en handskakningsprocess där servern presenterar ett certifikat för att bevisa sin identitet, och sedan upprättas en säker, krypterad session.
4. Hur klassificeras HTTP-statuskoder (1xx, 2xx, 3xx, 4xx, 5xx)?
1xx: Informativ (Begäran mottagen, process fortsätter). 2xx: Framgång (Begäran mottagen, förstådd och accepterad). 3xx: Omdirigering (Ytterligare åtgärd måste vidtas). 4xx: Klientfel (Begäran innehåller felaktig syntax eller kan inte uppfyllas). 5xx: Serverfel (Servern misslyckades med att uppfylla en till synes giltig begäran).
5. Vad är JSON och hur används det?
JSON (JavaScript Object Notation) är ett lättviktigt format för datautbyte. Det är enkelt för människor att läsa och skriva och enkelt för maskiner att analysera och generera. Det används vanligtvis för att överföra data i webbapplikationer (t.ex. skicka data från servern till klienten).
6. Vad är skillnaden mellan cookies och cache?
Cookies är små textfiler som lagras på klientsidan och används för att spåra användarsessioner och preferenser. Cache är tillfällig lagring som används för att lagra webbsidresurser (bilder, skript) för att snabba upp laddningstider vid efterföljande besök.
Vad är ett testorakel?
En mekanism, skild från själva programmet, som används för att avgöra om resultatet av en testkörning är korrekt (t.ex. en specifikation, ett separat program eller mänsklig bedömning).
Vad kan man förvänta sig av en Coderbyte live challenge-bedömning?
En Coderbyte live challenge innehåller vanligtvis teoretiska flervalsfrågor följt av kodningsövningar. Kodningsdelen kan täcka algoritmer, JavaScript, React eller andra tekniker beroende på vilket företag som administrerar testet. Det finns många genomgångar och exempel på YouTube som hjälper dig att förbereda dig.
Om x personer är på ett möte och varje person skakar hand med alla andra exakt en gång, hur många handskakningar sker totalt?
Det totala antalet handskakningar är x*(x-1)/2. Var och en av de x personerna skakar hand med (x-1) andra, vilket ger x*(x-1) ordnade par. Eftersom varje handskakning involverar två personer divideras resultatet med 2. Detta motsvarar kombinationsformeln C(x, 2) = x! / (2! * (x-2)!).
Vad kan man vanligtvis förvänta sig vid en live coding-intervju?
Live coding-intervjuer består vanligtvis av en kort teknisk utmaning som är utformad för att observera hur kandidaten resonerar kring ett problem, snarare än att testa perfektion. Vanliga format inkluderar: lösa ett algoritm- eller datastrukturproblem, implementera en liten feature eller mikrotjänst, bygga en enkel frontend-komponent, eller debugga och fixa befintlig kod. I många fall tillhandahåller intervjuaren ett befintligt repo tillsammans med en README som beskriver kraven, och kandidaten ombeds lägga till en ny funktion från grunden — ofta utan hjälp av AI-verktyg. Huvudmålet är att utvärdera resonemang och problemlösningsförmåga under realistiska förhållanden.
Givet ett dictionary med tjänster där varje tjänst har ett fält `dur` (varaktighet i tidsenheter) och en lista `deps` (beroendenas namn), skriv en funktion som hittar den kritiska vägen — den längsta kedjan av beroende tjänster — och returnerar dess totala varaktighet tillsammans med listan av tjänster som bildar flaskhalsen. Exempelindata: ```python services = { "db": { "dur": 5, "deps": [] }, "cache": { "dur": 2, "deps": [] }, "api": { "dur": 3, "deps": ["db", "cache"] }, "gateway": { "dur": 4, "deps": ["api"] } } ```
Modellera tjänstgrafen som ett träd och tillämpa en djupet-först-sökning (DFS). För varje tjänst beräknas rekursivt dess totala färdigställandetid som dess egen varaktighet plus den maximala färdigställandetiden bland dess beroenden. Under genomgången registreras vilken beroendegren som gav maximal tid för att kunna rekonstruera den kritiska vägen.
python
def FindCriticalPath(services):
time = 0
bottleNeck = []
def getTimeOfService(name, services, path):
serv = services[name]
duration = serv['dur']
if len(serv['deps']) == 0:
return duration
maxTime = 0
maxDep = ''
for d in serv['deps']:
tempTime = getTimeOfService(d, services, path)
if tempTime > maxTime:
maxTime = tempTime
maxDep = d
path.append(maxDep)
return duration + maxTime
for key in services:
path = []
tempTime = getTimeOfService(key, services, path)
path.append(key)
if tempTime > time:
time = tempTime
bottleNeck = path
return (time, bottleNeck)
För det givna exemplet beror gateway på api, som i sin tur beror på db (5) och cache (2). Den längsta beroendegrenar går via db med tid 5, vilket ger api en tid på 3 + 5 = 8 och gateway en tid på 4 + 8 = 12. Den kritiska vägen är ["db", "api", "gateway"] med en total varaktighet på 12.Hur bedöms kandidater på sin användning av AI-verktyg under tekniska intervjuer och hemuppgifter, och hur bör man svara på relaterade frågor?
I nyare tekniska intervjuer tillfrågas kandidater ofta om de använder AI-verktyg, vilka de använder och hur de använder dem. Det viktigaste utvärderingskriteriet är inte enbart om du använder AI, utan om du använder det medvetet och med full förståelse för den kod det genererar. Vissa hemuppgifter kräver uttryckligen att man lämnar in en AI_PROCESS.md-fil som dokumenterar hur AI användes under projektet. Ett starkt svar visar att du utnyttjar AI för att påskynda uppgifter du redan förstår, att du granskar och förstår varje rad genererad kod, och att du inte okritiskt accepterar AI-genererat resultat utan noggrann utvärdering.
Vilka typer av uppgifter brukar förekomma i live coding-intervjuer, och hur bör en kandidat förbereda sig?
Live coding-uppgifter tenderar att variera avsevärt mellan företag och intervjuare — det är vanligt att stöta på ett helt annat problem vid varje tillfälle. Exempel på uppgifter som har förekommit i intervjuer inkluderar: implementera Fibonacci-sekvensen, hitta den kortaste vägen till en nod i en graf eller ett träd, samt strängmanipuleringsproblem (t.ex. givet en sträng, räkna hur många gånger ett specifikt ord kan bildas av dess tecken). För att förbereda sig effektivt rekommenderas det att öva på problem av medel- till hög svårighetsgrad på plattformar som LeetCode eller HackerRank, fokusera på att täcka edge cases och alltid sträva efter den mest optimala lösningen.
Vilka råd finns det för att förbereda sig inför en teknisk intervju på plattformen HackerRank?
Några praktiska tips: (1) Ha två datorer tillgängliga om möjligt, så att du kan slå upp dokumentation eller testa kod lokalt medan du löser uppgiften på plattformen. (2) Bekanta dig med HackerRank genom att gå igenom plattformens egna tutorials innan den faktiska intervjun. (3) Repetera de vanligaste algoritmerna och datastruktursmönstren (t.ex. sortering, sökning, sliding window, grafer) och öva på minst ett par medium-nivå-övningar från varje kategori i förväg.
Hur integrerar du AI-verktyg i ditt utvecklings- eller testarbetsflöde?
AI-verktyg kan utnyttjas på flera sätt: (1) För repetitiva uppgifter som att generera mocks, DTO:er, testdata eller boilerplate-moduler — hantera ett fåtal metoder eller funktioner i taget för att hålla resultatet lättgranskat. (2) För att påskynda dokumentation, inklusive designguider, PRD:er och testplaner med ett specifikationsdrivet utvecklingssätt. (3) För att snabba upp generering av enhets- och integrationstester. (4) På en mer avancerad nivå kan man implementera orkestreragentar som delegerar deluppgifter till specialiserade subagenter. Claude och Cursor är vanliga exempel på verktyg. Svarets djup kan anpassas beroende på om rollen explicit kräver AI-kunskaper.
Under en teknisk HR-intervju visas du ett pseudokodavsnitt och du ombeds svara: vad beräknar den här funktionen och vad är dess tidskomplexitet? Hur går du tillväga?
För att identifiera vad en funktion beräknar, spåra dess logik steg för steg och lägg märke till vilka operationer som utförs på indata. Till exempel är en funktion som summerar alla element i en samling och sedan dividerar med antalet element en beräkning av det aritmetiska medelvärdet. För att bestämma tidskomplexiteten, räkna hur många gånger kärnoperationerna körs i förhållande till indatastorleken n. Om funktionen besöker varje element exakt en gång i en enda loop är tidskomplexiteten O(n) — linjär tid — eftersom arbetet ökar proportionellt med storleken på indata.