spring-boot
java framework for web-app development
thread
a complete unit of execution in a process;
threads share code, resources, memory, runtime details, state of process…;
“like a process but within a process” ?
wrapper classes
a way to use data types as objects;
int myInt = 5 -> Integer myInt = 5;
use when working with arrays/iterables, since they can only store objects/instances not raws;
use when intializing something with the value “null” to avoid a compile error
JRE
java runtime environment;
runs on top of OS providing everything a program needs to run:
- classloader for required classes
- verifier to ensure code is accurate
- interpreter
JDK
java development kit; implements specification / provides software for working with Java applications
in a suitably complex system,
there is a certain irreducible number of errors; any attempt to fix observed errors results in the introduction of other errors
microservice architecture
an architectural style in which the system is constructed from communicating microservices; each microservice runs in its own container, usually in cloud based systems
AJAX
Asynchronous JavaScript and XML
react; single responsibility principle
react is commonly used in combination with HTML and CSS, but each language only serves one responsibility:
HTML for presenting information and structure;
CSS for style of information;
JavaScript for interactions/data
ECMA6 is dynamically typed;
variables can…
the interpreter…
Dynamically-typed languages are those (like JavaScript and most others) where
- variables can hold any type of value at any time,
- the interpreter assigns/checks types when code is executed, not during compilation
const
defines a constant reference to a value, not an unchanging value; use const to declare a new variable, array or function
hooks
functions that:
- add state to a function component (useState)
- run code at specific times (useEffect)
allow one to “hook into” react features from function components; allows one to use react without classes
architectural influences
nonfunctional product characteristics;
product lifetime;
software reuse;
number of users;
compatibility;
these all affect how the software is built
nonfunctional product characteristics
security, performance; things that are necessary for a good product, but not the focus of the product.
influence of software reuse
reusing large components from other products saves time and effort, but this constrains architectural choices: design must fit around the software that is being used
influence of number of users
performance will be affected by the number of users at once; build a system that can be scaled easily
influence of software compatibility
allows users to adopt product on a different system; limits architectural choices such as database used
maintainability-performance tradeoff
a maintainable system is made of small parts that can be easily changed, but if many components are communicating with each other, the software will run slower
how to best design security
security vs usability
redundancy
components detect failure -> switch the operation to another component when failure is expected (circuit breakers are a good example);
implementing redundancy increases time and cost of development and adds complexity, possibly introducing bugs
architectural design questions
how should the system be organized?; how should components be distributed and communicate with each other?; what technologies should you use in building the system and what components should be reused?
design guidelines / best practices
single responsibility for each component;
coherent interfaces that change rarely;
avoid duplicating functionality
abstraction
focus on essential elements of a system or component without concern for details;
reduce complexity (of system / UI) so you can
- isolate changes
- improve maintainability
Hello
);