Questions and Answers
- Which type cast preserves the mathematical value in all cases?
- i64 as i32
- usize as u64
- i32 as i64
- f64 as f32
- What do the vertical bars represent here?
- a closure
- a thread
- a future
- a block
- Which choice is not a scalar data type?
- integer
- float
- boolean
- tuple
- **\_** cannot be destructured.
- Traits
- Tuples
- Enums
- Structs
- Which `cargo` command checks a program for error without creating a binary executable?
- cargo --version
- cargo init
- cargo build
- cargo check
- The term _box_ and related phrases such as _boxing a value_ are often used when relating to memory layout. What does _box_ refer to?
- It's creating a pointer on the heap that points to a value on the stack.
- It's creating a pointer on the stack that points to a value on the heap.
- It's creating a memory guard around values to prevent illegal access.
- It's an abstraction that refers to ownership. "Boxed" values are clearly labelled.
- What is an alternative way of writing `slice` that produces the same result?
- let slice = &s[len + 2];
- let slice = &s[len - 2];
- let slice = &s.copy(0..2);
- let slice = &s[..2];
- Using the `?` operator at the end of an expression is equivalent to **\_**.
- a match pattern that branches into True or False
- calling ok_error()
- calling panic!()
- a match pattern that may result an early return
- Which is valid syntax for defining an array of i32 values?
- Array
::with_capacity(10) - [i32]
- Array
::new(10) - [i32; 10]
- Array
- What syntax is required to take a mutable reference to T, when used within a function argument?
- \*mut T
- mut ref T
- mut &T
- &mut T
- The smart pointers Rc and Arc provide reference counting. What is the API for incrementing a reference count?
- .add()
- .incr()
- .clone()
- .increment()
- What happens when an error occurs that is being handled by the question mark (?) operator?
- The error is reported and execution continues.
- An exception is raised. The effect(s) of the exception are defined by the error! macro.
- The program panics immediately.
- Rust attempts to convert the error to the local function's error type and return it as Result::Err. If that fails, the program panics.
- Which comment syntax is not legal?
- `/*`
- `#`
- `//!`
- `//`
- In matching patterns, values are ignored with \_.
- `.ignore()`
- `an underscore (_)`
- ..
- skip
- Defining a \_ requires a lifetime parameter.
- function that ends the lifetime of one of its arguments
- struct that contains a reference to a value
- function with a generic argument
- struct that contains a reference to a boxed value
- Which example correctly uses std::collections::HashMap's Entry API to populate counts?
- [ ]
- [x]
- [ ]
- [ ]
- Does the `main` function compile? If so, why? If not, what do you need to change?
- The code does not compile. `let` statements require a refutable pattern. Add `if` before `let`.
- The code compiles. `let` statements sometimes require a refutable pattern.
- The code does not compile. `let` statements requires an irrefutable pattern. Add `if` before `let`.
- The code compiles. `let` do not require a refutable pattern.
- Which statement about lifetimes is false?
- Lifetimes were redundantly specified in previous version of Rust.
- Lifetimes are specified when a struct is holding a reference to a value.
- Lifetimes are specified when certain values must outlive others.
- Lifetimes are always inferred by the compiler.
- When used as a return type, which Rust type plays a similar role to Python's `None`, JavaScript's `null`, or the `void` type in C/C++?
- `!`
- `None`
- `Null`
- `()`
- To convert a `Result` to an `Option`, which method should you use?
- `.as_option()`
- `.ok()`
- `.to_option()`
- `.into()`
- Which statement about the `Clone` and `Copy` traits is false?
- `Copy` is enabled for primitive, built-in types.
- Without `Copy`, Rust applies move semantics to a type's access.
- When using `Clone`, copying data is explicit.
- Until a type implements either `Copy` or `Clone`, its internal data cannot be copied.
- Why does this code _not_ compile?
- The returned `fn` pointer and value need to be represented by another trait.
- Closures are types, so they cannot be returned directly from a function.
- Closures are types and can be returned only if the concrete trait is implemented.
- Closures are represented by traits, so they cannot be a return type.
- What smart pointer is used to allow multiple ownership of a value in various threads?
- `Arc
` - `Box
` - Both `Arc
` and `Rc ` are multithread safe. - `Rc
`
- `Arc
- Which types are _not_ allowed within an enum variant's body?
- zero-sized types
- structs
- trait objects
- floating-point numbers
- Which statement about this code is true?
- Both are character literals.
- `heart_eyed_cat` is an invalid expression.
- `c` is a string literal and `heart_eyed_cat` is a character literal.
- Both are string literals.
- Your application requires a single copy of some data type T to be held in memory that can be accessed by multiple threads. What is the thread-safe wrapper type?
- `Mutex
>` - `Rc
>` - `Arc
>` - `Mutex
>`
- `Mutex
- Which idiom can be used to concatenate the strings `a`, `b`, `c`?
- `String::from(a,b,c)`
- `format!("{}{}{}", a, b, c)`
- `concat(a,b,c)`
- `a + b + c`
- In this function. what level of access is provided to the variable `a`?
- read-only
- read/write
- debug
- Which choice is _not_ valid loop syntax?
- `loop`
- `for`
- `while`
- `do`
- How do you construct a value of `Status` that is initialized to `Waiting`?
- `let s = Enum::new(Status::Waiting);`
- `let s = new Status::Waiting;`
- `let s = Status::Waiting;`
- `let s = Status::new(Waiting);`
- Which statement about enums is false?
- Enums are useful in matching patterns.
- Option is an enum type.
- Enum variants can have different types with associated data.
- the term _enum_ is short for _enummap_
- What does an underscore (\_) indicate when used as pattern?
- It matches everything.
- It matches underscores.
- It matches any value that has a length of 1.
- It matches nothing.
- What is a safe operation on a `std::cell:UnsafeCell
`? - A `&mut T` reference is allowed. However it may not cpexists with any other references. and may be created only in single-threaded code.
- `UnsafeCell
` provides thread-safety. Therefore, creating `&T` references from multiple threads is safe. - The only safe operation is the `.get()` method, which returns only a raw pointer.
- Non. `UnsafeCell
` only allows code that would otherwise need unsafe blocks to be written in safe code.
- Generics are useful when you **\_**.
- need to reduce code duplication by concretizing values and restricting parameters in functions
- need to reduce code duplication by abstracting values further, such as in function parameters
- need a supertrait
- are not sure if you need a specific kind of trait
- How do you create a Rust project on the command-line?
- cargo new
- rustup init
- cargo start
- rust new-project