Skip to content

Lyle-Lyle/lettytechprep

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 

Repository files navigation

License Stars Issues

Project Overview 📖

This project is a coding interview prep platform based on Next.js server-side rendering, Spring Boot, Redis, MySQL, and Elasticsearch. Its live version is available at https://www.mianshiya.com and currently only operates in China. This repository implements the platform's core features, including the ability for administrators to create question banks, questions, and solutions, and to associate multiple questions with a question bank in bulk. Users can register, log in, search questions with full-text search, practice coding problems online, and view their practice history in a calendar format.

The platform enhances performance through the use of a connection pool, hot key detection, caching, and advanced data structures. Security is bolstered by rate limiting, circuit breakers, dynamic IP black/whitelisting, conflict detection for simultaneous logins, and multi-level anti-scraping strategies.

UI 📸

img

img

img

Question detail:

img

Sign in

img

Admin:

img

img

Development Process

The project follows a step-by-step development strategy, divided into three phases:

  1. In the first phase, the focus is on developing a basic coding platform using Next.js for server-side rendering and rapid development with Spring Boot applications. The main goal is to implement basic CRUD operations.

img

2)In the second phase, the project expanded its functionality by incorporating several mainstream enterprise backend technologies, such as Redis caching and advanced data structures, Elasticsearch search engine, Druid connection pool, concurrent programming, and Hotkey detection. image

image

3)In the third phase, the project focused on optimizing security with implementations such as traffic control and circuit breaking using Sentinel, dynamic IP blacklisting/whitelisting with Nacos, conflict detection for simultaneous logins using Sa-Token, and multi-level anti-scraping strategies based on Redis. The final goal was to launch the project and ensure its availability.

Technical Architecture

If using a diagram to summarize the technical architecture of this webisite, it would be presented as shown in the following image

5a24d0c2d412d90094e7a220bf5d140e

Features

Core features of the project:

Backend Development

  • CRUD operations of all pages

Frontend Development

  • Pages Development (Login, Registration, Management Pages, Homepage, Problem-Solving Page and Search Page)

User Functionality Expansion

  • Problem-Solving History Calendar
  • BitMap and Performance Optimization
  • Question Full-Text Search
  • Elasticsearch Data Synchronization

Admin Functionality Expansion

  • Bulk Management of Questions
  • Batch Processing Optimization
  • Druid Connection Pool
  • Automatic Caching of Popular Question Banks
  • Hotkey detection

Traffic Security Optimization

  • Introduce Sentinel
  • Single Interface Rate Limiting and Circuit Breaking
  • Hot Parameter Rate Limiting and Circuit Breaking
  • Sentinel Rule Persistence (BloomFilter + Configuration Center)
  • Introduce Nacos
  • Dynamic IP Blacklisting
  • Conflict Detection for Simultaneous Logins(Sa-Token)
  • Anti-Scraping Solution Design
  • Multi-Level Anti-Scraping Based on Redis

Tech Stack 🚀

Backend

Java Spring Boot + Maven mutil-module build
MySQL + MyBatis-Plus + MyBatis X
Redis + Caffeine Redission (Distributed Locking) + BitMap + BloomFilter
⭐️ Elasticsearch
⭐️ Druid (database connection pool)
⭐️ Sa-Token (Access control)
⭐️ HotKey
⭐️ Sentinel (Traffic control)
⭐️ Nacos (configuration center)

Frontend

React 18
⭐️ Next.js Server-side render framwork
⭐️ Redux (state management)
Ant Design (UI libaray)
⭐️ ESLint + Prettier + TypeScript

TODO List

  • Using Nacos Configuration Center to Store and Manage IP Blacklists
  • Custom Annotation for Hot Key Detection
  • Encapsulating Rate Limiting Component as a Spring Boot Starter
  • Notification for Concurrent Login Conflict

Contributing 🤝

Contributions are welcome! Follow these steps:

  • Fork this repository
  • Create a new branch (git checkout -b feature/your-feature)
  • Commit your changes (git commit -m 'Add some feature')
  • Push to the branch (git push origin feature/your-feature)
  • Open a Pull Request

License 📄

This project is licensed under the MIT License.

About

A one-stop website for solving tech interview problems for programmers

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published