Golang Developer Career Matrices
Golang | ||||||
Concurrency (2020) | Not required | Not required | Knows what is goroutine and how to create it.
Knows what are channels and types of channels. Can create a channel, write and read from it.
Knows what is "select" and how use it. Knows about order of cases in "select". Knows how to close a channel and detect closing.
Knows how to use time.Sleep().
Knows what race conditions are. Knows how to work with sync.Mutex, sync.RWMutex, sync.WaitGroup, sync.Once. | Including all requirements from previous proficiency scales.
Knows what is goroutine context switching and when it happens. Knows goroutine leak and how detect it.
Knows what will be if we will try to write and read from a closed and nil channels. Knows how to validate channel direction.
Know how to work with atomic functions.
Know how to use GOMAXPROCS.
Knows how to work with time.Ticker() and why we have to close it.
Knows how to work with time.Timer() and time.AfterFunc(). Can stop or reset them. | Including all requirements from previous proficiency scales.
Can explain the difference between Concurrency and Parallelism.
Understands how the Golang scheduler works. Knows about global and local queues.
Knows some main concurrency patterns (Fan-in, Fan-out, Worker...).
Understands how a channel works inside.
Can work with sync.Pool, sync.Map and sync.Cond. Can explain where they should be used. | Including all requirements from previous proficiency scales.
Can explain the difference between Concurrency and Parallelism.
Understands how the Golang scheduler works. Knows about global and local queues.
Knows some main concurrency patterns (Fan-in, Fan-out, Worker...).
Understands how a channel works inside.
Can work with sync.Pool, sync.Map and sync.Cond. Can explain where they should be used. |
Arrays, Slices, Map (2020) | Knows how to create array, map, and slice. Can use literals and make() function for this. Knows how to add data to these structures.
Knows difference between array and slice. Knows how to get a slice from a slice. Can explain memory sharing between two slices.
Knows what can be used as a key for a map. Understands that structure field in a map cannot be changed directly.
Knows difference between len() and cap(). | Knows how to create array, map, and slice. Can use literals and make() function for this. Knows how to add data to these structures.
Knows difference between array and slice. Knows how to get a slice from a slice. Can explain memory sharing between two slices.
Knows what can be used as a key for a map. Understands that structure field in a map cannot be changed directly.
Knows difference between len() and cap(). | Including all requirements from previous proficiency scales.
Knows how to check is key exists in a map. Understands that system, not free memory after deleting an element. Know that structure in a map cannot be changed directly.
Knows blank values of slice and map. Also their behavior.
Knows two ways how to sort slice (sort.Slice() and sort.Interface).
Knows about randomization elements in map. Can provide an example how to find unique values using a map. | Including all requirements from previous proficiency scales.
Knows how to check is key exists in a map. Understands that system, not free memory after deleting an element. Know that structure in a map cannot be changed directly.
Knows blank values of slice and map. Also their behavior.
Knows two ways how to sort slice (sort.Slice() and sort.Interface).
Knows about randomization elements in map. Can provide an example how to find unique values using a map. | Including all requirements from previous proficiency scales.
Knows how to check is key exists in a map. Understands that system, not free memory after deleting an element. Know that structure in a map cannot be changed directly.
Knows blank values of slice and map. Also their behavior.
Knows two ways how to sort slice (sort.Slice() and sort.Interface).
Knows about randomization elements in map. Can provide an example how to find unique values using a map. | Including all requirements from previous proficiency scales.
Familiar with full slice expressions. Knows how to use function copy().
Has a deep understanding of internal behavior of array, slice and map. |
Execution flow (2020) | Knows all flow control statements: for, if, else and switch. Also knows about "continue", "break" and "fallthrough". Knows how to work with "range".
Knows how to create function. Knows what is multiple and named result.
Understands the difference between error and panic. Understands what will be if panic will not be handled in a goroutine. | Knows all flow control statements: for, if, else and switch. Also knows about "continue", "break" and "fallthrough". Knows how to work with "range".
Knows how to create function. Knows what is multiple and named result.
Understands the difference between error and panic. Understands what will be if panic will not be handled in a goroutine. | Including all requirements from previous proficiency scales.
Knows about anonymous functions, function closures and recursive. Can answer about the scope of variables when using closures.
Knows what is defer(). Knows about defers ordering and how using this construction has effects on performance.
Know what is goto. Can explain in what cases it be used and why it can bad practice.
Knows how to handle panic. Knows what can be in arguments for panic() function. | Including all requirements from previous proficiency scales.
Knows about anonymous functions, function closures and recursive. Can answer about the scope of variables when using closures.
Knows what is defer(). Knows about defers ordering and how using this construction has effects on performance.
Know what is goto. Can explain in what cases it be used and why it can bad practice.
Knows how to handle panic. Knows what can be in arguments for panic() function. | Including all requirements from previous proficiency scales.
Knows about anonymous functions, function closures and recursive. Can answer about the scope of variables when using closures.
Knows what is defer(). Knows about defers ordering and how using this construction has effects on performance.
Know what is goto. Can explain in what cases it be used and why it can bad practice.
Knows how to handle panic. Knows what can be in arguments for panic() function. | Including all requirements from previous proficiency scales.
Knows how to work with Context. Knows how to add values to context and how to use custom type for creating unique keys.
Know all common implementation of this functionality (Background(), TODO(), WithCancel()). Can explain the difference between WithDeadline() and WithTimeout().
Familiar with full slice expressions. Knows how to use function copy().
Has a deep understanding of internal behavior of array, slice and map.
Knows what is inlining. What functions can be inlined and what effect it has. |
Project & Dependencies (2020) | Not required | Has basic understanding of packages. Knows how import works. Knows about main() function and main package.
Knows the difference exported and non exported names.
Knows about GOPATH and how it is used. Knows about special folder "vendor" and can explain priority of use. | Including all requirements from previous proficiency scales.
Knows what circular import is and how to avoid it. Knows about special package "internal". Familiar with import aliases, relative, blank and "." (dot) imports. Can explain why the last is bad practice.
Knows about function init(), how many functions can be in one package, when it is executed and dark side of it.
Knows how to use specific version of dependencies in "go mod", update replace and clear non-used packages.
Knows what is cross-compilation. | Including all requirements from previous proficiency scales.
Knows what circular import is and how to avoid it. Knows about special package "internal". Familiar with import aliases, relative, blank and "." (dot) imports. Can explain why the last is bad practice.
Knows about function init(), how many functions can be in one package, when it is executed and dark side of it.
Knows how to use specific version of dependencies in "go mod", update replace and clear non-used packages.
Knows what is cross-compilation. | Including all requirements from previous proficiency scales.
Familiar with the internal tool for code generation (go generate).
Can explain how to use build constraints (build tags).
Has understanding what is SSA presentation.
Familiar with plugins in Go. | Including all requirements from previous proficiency scales.
Familiar with the internal tool for code generation (go generate).
Can explain how to use build constraints (build tags).
Has understanding what is SSA presentation.
Familiar with plugins in Go. |
Reflection (2020) | Not required | Not required | Knows base operations with reflect.DeepEqual() and reflect.TypeOf() | Knows base operations with reflect.DeepEqual() and reflect.TypeOf() | Including all requirements from previous proficiency scales.
Knows how to take the type of element from an array, slice or map. Can get information about the structure methods (name, type, tag).
Knows difference between Type and Kind. | Including all requirements from previous proficiency scales.
Understands what is DWARF, how to disable it and what effect will be in result.
Can explain how to change a value using reflection. Knows about settability (CanSet() ). |
Time (2020) | Not required | Can get current time. Knows how to pause process. | Including all requirements from previous proficiency scales.
Has experience with parsing and formatting date. Knows how to make operation with time duration (adding, subtraction, comparing, t.truncate). | Including all requirements from previous proficiency scales.
Has experience with parsing and formatting date. Knows how to make operation with time duration (adding, subtraction, comparing, t.truncate). | Including all requirements from previous proficiency scales.
Knows about differences between Locations and timezone. Can convert date from one location to another.
Knows about monotonic time. | Including all requirements from previous proficiency scales.
Knows about differences between Locations and timezone. Can convert date from one location to another.
Knows about monotonic time. |
Variables & Types (2020) | Not required | Knows all basic types (int, int*, uint, uint*, float*, string, byte, bool....) and zero value for all them.
Understands what is constant, what types support constant and how it can be used. Familiar with iota keyword.
Understands what a pointer is. When it has to be used and when it should be avoided. Knows default value of pointer. Has a basic understanding of GC.
Knows what is struct is and how to add methods to it.
Has a basic understanding of what is an interface. Knows about the empty interface.
Familiar with internal tool for string formatting. | Knows all basic types (int, int*, uint, uint*, float*, string, byte, bool....) and zero value for all them.
Understands what is constant, what types support constant and how it can be used. Familiar with iota keyword.
Understands what a pointer is. When it has to be used and when it should be avoided. Knows default value of pointer. Has a basic understanding of GC.
Knows what is struct is and how to add methods to it.
Has a basic understanding of what is an interface. Knows about the empty interface.
Familiar with internal tool for string formatting. | Including all requirements from previous proficiency scales.
Knows several ways of type validation of variable. Has good understanding how convert one type to another. Knows side effects of conversion of one type to another and math division two integer.
Knows how to create new type based on another.
Knows what is structure embedding. Can explain how to use it.
Knows what a type alias is.
Has to experience in creating own interfaces. Knows how to check is variable implement specific interface. Understands interface inheritance. Knows popular interfaces Stringer, Reader, Writer.
Understands choosing a value or pointer method receiver.
Knows what will be as result of iteration by string. Can explain what is rune. | Including all requirements from previous proficiency scales.
Knows several ways of type validation of variable. Has good understanding how convert one type to another. Knows side effects of conversion of one type to another and math division two integer.
Knows how to create new type based on another.
Knows what is structure embedding. Can explain how to use it.
Knows what a type alias is.
Has to experience in creating own interfaces. Knows how to check is variable implement specific interface. Understands interface inheritance. Knows popular interfaces Stringer, Reader, Writer.
Understands choosing a value or pointer method receiver.
Knows what will be as result of iteration by string. Can explain what is rune. | Including all requirements from previous proficiency scales.
Understands what are alignment and padding fields in the structure.
Candidate can explain when they have an effect.
Understands what escape analysis is and what effect it has.What is escape analysis and what effect it has? Understands difference between stack and heap.
Understands Golang memory model. Can explain how Garbage collector in Go. Knows how to disable and tune GC and what affect this has.
Knows about unsafe.Pointer(). Can give an example of usage and side effects.
Understands internal implementation of interfaces. |
Tests (2020) | Not required | Not required | Knows how to create tests and run it. Knows about sub tests. | Including all requirements from previous proficiency scales.
Can run tests with different filters. Knows how calculate test coverage. Knows how to find race condition.
Knows several solutions of mock. Can mock implementation and network request. | Including all requirements from previous proficiency scales.
Knows how to create benchmarks and run it. Know different profiling by memory and CPU. Knows about b.StopTimer(), b.StartTimer() and b.ResetTimer() functions. Can explain the result of the test. | Including all requirements from previous proficiency scales.
Knows how to create benchmarks and run it. Know different profiling by memory and CPU. Knows about b.StopTimer(), b.StartTimer() and b.ResetTimer() functions. Can explain the result of the test. |
Comments
Post a Comment