In the last few months, I was looking for a new job as a software developer.

I attended various interviews, talked to a lot of diverse people, had to solve different tasks, answered plenty of questions, and asked at least as many.

In this post, I will share with you what I have learned, and tell you some useful tips for doing well at your interview to get the job of your dreams.

I won’t give you an exhaustive list of technical questions, brainteasers, and riddles. Instead, I’ll tell you how to make the most sense out of them.

Horizontal tree by Piet Mondrian

Software Today

Software…


Configuration properties is a great feature in Spring Boot. In a monolithic long-time running application, we often want to change the application settings. Those changes must be persisted to survive the application restart.

We can use environment post-processing for that. This post describes how.

Color King (cut) by František Kupka

Let’s start slowly; consider a simple class with configuration properties:

@ConfigurationProperties("hello")
@Getter
@Setter
class HelloConfigurationProperties {
private String greeting = "Hello!";
}

The property of greeting is used to print a greeting message from a REST controller:

@RestController
@RequestMapping("/hello")
@AllArgsConstructor
class HelloController {
private String greeting; @GetMapping
public String sayHello() {
return this.greeting;
}
}

After…


Serialization is a great thing and a revolutionary feature of Java from the early days, but it does have some flaws. Among others, there are serious security issues I want to address in this post.

The problem

A typical example of a security issue is a communication via network using serialized Java objects. When the server is not secured against serialization exploits, it is theoretically possible to execute any command on the server:

client> curl -XPOST -H "Content-Type: application/x-java-serialized-object" http://127.0.0.1:8080/service/toupper --data-binary @exploit.serserver> ls -l /HACKED
-rw-rw-r-- 1 tomas admin 2770 Okt 12 07:40 /HACKED

Oops. This is not good. The command…


Frameworks are good stuff, at least for middle to big enterprise applications. One doesn’t want to reinvent the wheel. Aspects like security, caching, monitoring are hard and it’s easy to get them wrong if implemented from scratch.

On the other hand, there are valid use cases where you probably don’t need all this advanced stuff. Examples can be a personal webpage, blog, product catalog etc.

For a lot of simple cases a static web generator is the right way to go, but you do want something interactive on your web like search, form or comments, a static page is just…


Why is object-oriented programming still the best we have and how can it help us build well-designed microservices?

It is 2021, IT has already eaten almost the whole world and we have developed tools that make paradigms from the 60s such as OOP seriously outdated, right? Well, not really.

Beautiful objects by Joan Miro (Blue II)

At least in the mainstream, object-oriented design offers the most beneficial approach for software development from code to system architecture. However, only when done right.

By merely using the keywords object or class we do not create object-oriented code. …


Useless and impractical, yet beautiful, esoteric programming languages.

Esoteric programming languages, esolangs for short, are computer programming languages created mostly just for fun. They are usually very impractical, hard to write or even read, but always funny, lovely, weird, or in some other way interesting.

Some esolangs are meant as an exploration of alternative ways to design programming languages; many are created merely as a joke.

Esolangs can be thematic (for instance, imitating Shakespeare’s plays or cooking recipes) and tend to be minimalistic, some experiment with exotic techniques such as two-dimensional code or coding in colors.

Many esolangs are Turing-complete, but there are a lot of interesting languages…


Getting started with WebAssembly.

This is the first part of a series about programming in WebAssembly (Wasm) for beginners. The goal is to give you the first impression of what Wasm is and how it can be beneficial for your own projects. The further the series goes the deeper we will delve into the topic.

I suppose you have already heard about WebAssembly; how performant, lightweight, secure, and overall promising it is. Otherwise, you probably would not be reading this text right now, would you? …


A series of learning texts covering the first steps with WebAssembly for complete beginners.

Learning WebAssembly Series by Tomas Tulka
Learning WebAssembly Series by Tomas Tulka

Some time ago I started learning WebAssembly as an absolute beginner. It has been an exciting but not so simple journey.

I decided to publish my continuous and probably neverending notices to make your learning path a little easier.

Here is the actual list of already finished posts. I will constantly update and extend it.

Hello, World of Wasm!

Let’s try WebAssembly for the first time. …


Spring Boot philosophy is to develop applications by composing independent, modular and highly configurable components.

Spring Boot provides smart and simple mechanisms and conventions for building such components, that could be easily applied in custom projects.

In this post, we will explore those ideas, and show how to create domain-oriented custom components the Spring Boot way.

Spring by Kazimir Malevich

What Is Spring Boot

Spring Boot takes an opinionated view of the Spring platform and third-party libraries. This means, all necessary dependencies are included and pre-configured, and there is none or very little additional configuration most Spring Boot applications need to add.

Dependencies are consistent with each other…


As I was finishing my blog post about defining service boundaries, I had a very strong feeling that there must be some abstract concept of what I was trying to explain using actual examples…

Of course, there is! It is the concept of cohesion and coupling that I will discuss in this post.

In the rain (cut) by Franz Marc

I will start with some definitions:

Cohesion: the degree to which the elements inside a module belong together.
Coupling: the degree of interdependence between software modules.

High cohesion and loose coupling are the most important principles in software engineering. …

Tomas Tulka

Software developer and occasional blogger: https://blog.ttulka.com

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store