The purpose of the interview is to determine level of hard and soft skills and to check that person fits team mentally.
- prefer open questions: ie. questions without one correct answer.
- when asking binary questions, mix yes and no questions. Don't coerce everything into yes or no.
- ask not only about what, but also about when and why explanations.
- greeting and small-talk
- project introduction
- soft skills (past experience, English level, etc.)
- hard skills
- Q&A
- Role on previous project (what was doing, team size, what learned, etc)
- How frequently was your product released? Your involvement in the releases?
- Development methodology (Scrum, Kanban, Warefrall). When to use what?
- QA process (code review, code intelligence, CI/CD)
- Good/bad practices
- Ideal QA/delivery process (Jira, VCS, CI/CD)
- Notable tools
- Testing pyramid
- Test documentation
- Functional vs integration vs e2e tests
- What's easier to test: monolithic application or microservices?
- Who should be responsible for quality?
- Who should test?
- When should automation start?
- Shift left/right
- Provide test cases for application with an input field that accepts 0 - 10 numbers (inclusive). Decimals are allowed and will be rounded to the whole number using mathematical rounding. Application saves Integer in the DB.
- OOP (4 principles, basic use cases)
- Design Patterns
- Anti-patterns
- Clean code (SOLID, GRASP, DRY, YAGNI)
- Algorithms (Big O notation, basic algorithms)
- Multiple inheritance
- Composition/aggregation vs inheritance
- Method vs function
- Test framework design/architecture (basic approaches, organization, must-use patterns)
- Metrics: limiting test run time and resource utilization/test run optimization
- Configs
- Data preparation and cleaning
- Logs
- Reporting
- CI integration
- Tool integration
- primitives/objects
- mutable/immutable
- var (if Java 11)
- interfaces vs abstract classes
- annotations
- override/overload
- collections
- list/set/map
- hash map/hash set
- stream
- lambdas
- optional
- generics
- equals and hashCode
- deep clone/shallow clone
- exceptions (checked/unchecked/errors)
- try/catch/finally
- static (method, variable)
- final (class, method, variable)
- access modifiers (default for class, interface)
- constructor/initializer
- JMM (heap/stack, garbage collectors, happens before, reordering, JIT)
- multithreading (asynchronous execution, reactor, locks, synchronization, thread pool, executor service, future)
- jUnit/TestNG/... (testability, mock vs stub vs spy, annotations, configuration, parallel run, parametrization)
- Maven/Gradle/... (role, configuration, dependencies, plugins, phases)
- code style/quality (PEP8 / PEP20)
- mutable/immutable data types
- constructors (how to implement?)
- tuple vs list vs set
- list/dict comprehension
- the difference between v2 and v3
- is vs ==
- lambdas
- generators vs iterators
- dict
- decorators
- magic methods
- type hints
- arguments (*args, **kwargs)
- global/nonlocal
- is Python interpreted or compiled
- slicing (list, str)
- how to reverse iterable object
- try/catch/finally
- keyword pass
- keyword with (context manager)
- keyword yield
- copy/deepcopy
- keywords break/continue/pass
- venv/pipenv
- _var and __var (protected vs private)
- multithreading/asynchronous code
- GIL
- The main idea behind Spring (IoC, Proxy)
- Differences between Spring (MVC) and Spring Boot
- Main annotations and their roles
- Bean scopes (default bean scope)
- Bean cyclic dependency
- JDBC/Hibernate/Spring Data
- Entity
- Entity relations
- N+1 problem
- fixtures
- fixture scopes
- parallelism
- hooks
- parametrization
- marks
- page object
- waits (interaction between implicit and explicit during waiting for object to disappear)
- remote driver
- selectors
- findElement/findElements return type in case of failure
- StaleElementException
- On what part of element will Selenium click?
- Element not clickable at point
- Download/upload file
- JS executor
- Actions
- basic auth (http)
- avoid login in every new test
- Parametrized locator
- DOM
- Differences / and //
- Differences . and ..
- Wildcard *
- Keyword contains
- Search by text
- Get parent element
- relation to HTTP
- methods
- differences between GET and POST
- differences between PUT and POST
- PATCH, HEAD, OPTIONS
- idempotency
- query string (what is used for, limitations)
- components (verb, header, body, etc)
- supported markup languages
- status codes
- streaming (WebSockets / HTTP2)
- SOA vs DDD
- REST
- gRPC/Protobuf
- Kubernetes
- Docker
- Service discovery
- Cloud-agnostic tools
- Graceful degradation
- Circuit breaker
- Saga
- fetch vs pull
- merge vs rebase
- merge conflict
- force-push (what --force-with-lease does?)
- revert commit
- squash
- stash
- reset (—mixed, --hard, --soft)
- merge —abort
- fork
- SQL/noSQL
- noSQL DB types (key-value, document-oriented, wide-column, time series)
- basic syntax
- joins
- subqueries
- group by / having
- distinct
- union
- indexes
- transactions (isolation levels)
- normalization
- Transaction isolation level
- CAP theorem
- ACID
- container vs image
- networking (network types, ports, discovery)
- containerization vs virtualization
- Dockerfile: FROM, ADD, COPY, RUN, CMD, ENTRYPOINT
- docker pull/info/stats/images
- latest tag
- data persistency (volumes, mounts, permissions)
- compose
- swarm
- address vs netmask
- ISO/OSI
- bridging vs routing vs switching
- protocols (tcp, udp, icmp)
- routing (BGP, OSPF)
- DHCP
- ARP
- VPN and VLAN
- packet anatomy
- Jobs
- Pipelines
- Jenkinsfile
- Built-in environment variables
- Useful plugins
- logs
- change permissions
- open file (read/update)
- create/rename/remove/copy file
- default env variable value :-
- stop process
- find file
- cloud native technology benefits
- lift and shift issues
- cloud issues
- IaaC (Cloud Formation, Terraform, Pulumi)
- Serverless
- Conflicts inside the team
- Project estimation
- Team velocity and performance
- Firing people
- What to do if a team member refuses to work?
- Team stabilization/working with attrition and demotivation/burnout
- Mock vs stub vs spy
- Wiremock / MockServer and similar (mock TCP server)
- BDD (example of BDD test, when to use / not use)
- JSON / XML
- CI/CD (Jenkins/GitLab, integration, jobs, pipelines)
- GitHub actions
- Linux (command line, ssh, find/locate, pipes, editors, resource monitoring, logs, access rights)
- NoSQL (time-series DBs, keys, nesting, hot keys, deduplication, normalization)
- Message queues (RabbitMQ, Kafka, concepts, delivery guarantee)
- VCS (Git, Mercurial) (branches, pull-requests, rebase vs merge, cherry-pick, hooks, git flow)
- Code Intelligence (SonarQube, CheckStyle, FindBugs, pyLint)
- Code Coverage (JaCoCo, Cobertura)
- Cloud (cloud-native, infrastructure as a code)
- Docker & K8s (Dockerfile, docker build context, docker-compose, networks, sharing resources, k8s: pod, service, deployment)
- Performance (tools, concepts, isolation, bottlenecks, metrics, percentiles)
- Monitoring (Graphite, InfluxDB, Grafana)
- Reporting (Allure, ReportPortal)
- write recursive poller / classic poller
- write counter method for dict
- write simple decorator to track a time spent for method
- write method which check that int list contains only even values
- write method which check that string json has correct open-close brackets
- Get text of elements (ex. table) and create a dict with it (extra: build a model for this)
<html>
<body>
<table>
<tr>
<th>First name</th>
<th>Last name</th>
<th>Age</th>
</tr>
<tr>
<td>Jill</td>
<td>Smith</td>
<td>50</td>
</tr>
<tr>
<td>Eve</td>
<td>Jackson</td>
<td>94</td>
</tr>
</table>
</body>
</html>
- Fill all the inputs in the form
<html>
<body>
<div class="form">
<div class="input">
<label>Input - 1</label><br>
<input class="form_input" name="1" type="text">
</div>
</div>
<div class="input">
<label>Input - 2</label><br>
<input class="form_input" name="2" type="text">
</div>
</div>
<div class="input">
<label>Input - n</label><br>
<input class="form_input" name="n" type="text">
</div>
</div>
</div>
</body>
</html>
- Click behind the loader (what will be? how to avoid?)
- Login with API (how to implement?)
- Write/describe a simple page object
- Write/describe BasePage methods
- Get ids of users who entered in September from the API response
[
{
"id": "_4FG12Y7U6",
"company": "Avionics Inc.",
"firstname": "John",
"lastname": "Doe",
"entered": "2013-06-12T10:00:00Z"
},
{
"id": "_4FG12Y7TX",
"company": "Avis World Headquarters",
"firstname": "Steve",
"lastname": "Herbin",
"entered": "2013-09-10T10:00:00Z"
},
{
"id": "_4FG12Y7TV",
"company": "BGP Productions",
"firstname": "German",
"lastname": "Vicencio",
"entered": "2013-09-30T12:46:40Z"
}
]
- Write/describe BaseApi methods
- Write UPDATE request
- Write INSERT request
- JOIN (types? differences? write request)
- Write request with COUNT
- Write request with GROUP BY
- Write request with HAVING
- Unique values (DISTINCT)
- Transactions
- Basic programming language course (OOP + Design patterns + Data structures + Code standards/conventions)
- Test framework (TestNG/JUnit - Java Pytest - Python)
- Selenium
- Page Object
- API automation
- DB automation
- Git
- Build systems (Maven/Gradle - Java pip/pipenv - Python)
- Jenkins
- Docker
- CodeCoverage/CodeIntelligence