工作室后端直通车

听闻有些学弟想内推进工作室,有学长说问我。实际上对于23级的学弟来说,我是你们学长的学长,没那资格内推你,你知道吧。

但是还是来出点题目

如果你觉得你做的东西有资格被内推,可以给学长看看你的项目。请注意我们除了技术方面的内容,也会(而且可能是重点)考察你的其他方面。

下面所有题目的实现不限使用的技术栈。你可以使用Java Spring Boot那一套,也可以用C语言自己写一套,也可以

  • C++ Drogon
  • Rust axum
  • C# ASP.NET
  • Python Flask
  • Go Gin
  • Ruby on Rails
  • NodeJS Express
  • (以上排名不分先后)

第一题

分析市面上各种应用(如支付宝,B站,飞书等)的用户管理系统,给出对应的需求分析。并设计系统架构,一步步按照软件工程方法实现这个用户管理系统。

可能具备的需求:用户注册、登陆、权限控制、角色控制、消息通告(系统内,邮件、手机等)…

可能具备的系统设计:缓存、统一日志记录…

第二题

现在你拥有了一套用户管理系统。请你随便想个应用场景,同样进行需求分析等,基于这一套用户管理系统实现你的上层服务。

举个栗子:基于用户管理服务编写一个todolist管理工具。

请注意应用场景不允许选择上面这个栗子

你的用户管理系统应该可以为上层服务提供基于角色与权限的接口调用限制。比如只允许管理员添加todo类别。

你的用户管理系统必须与上层服务分开编写,两个系统应使用API接口的方式进行调用。

第三题?

后面没有了

看我看我

学长是边玩原神边写的,对于内推题有任何疑问请自己解决(没错)

  • 做项目的过程中有任何问题请尝试自己解决,解决不了的你自己多花点时间还是请自己解决
  • 系统架构方面的东西如果不太清楚可以找点项目看看
  • 对于我来说,要求被内推进工作室的学弟学妹有很强的自己解决问题的能力,所以对于内推,我不会提供太多帮助

103388149

第一部分:手撸你的第一个Java程序

1. 配置 Java 运行环境

使用 AdoptOpenJdk
选择 OpenJdk16 HotSpot 版本

2. Java 的基础语法与数据类型

3. 编写一个程序

查阅资料: Java 16 Api

Code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import java.lang.Integer;
import java.util.HashMap;

public class FacSum{

private static HashMap<Integer, Integer> map = new HashMap<>();

public static void main(String[] args) {
if (args.length != 1) {
System.out.println("The program only takes one and only needs one argument.");
}
int target = Integer.parseInt(args[0]);
int sum = 0;
map.put(1, 1);
map.put(2, 2);
map.put(3, 6);
map.put(4, 24);
for (int i = 1; i <= target; i++) {
sum += fac(i);
}
System.out.println(sum);
}

private static int fac(int num) {
if (map.containsKey(num)) return map.get(num);
int fac = fac(num-1) * num;
map.put(num, fac);
return fac;
}
}

img


关于程序中的错误

  1. 类文件与源文件名不匹配且忘记导包 (我想念 idea 了)
  2. 非 static 方法与字段无法被 static 方法访问
  3. parse 拼写错误
  4. 在数组中,length 为字段并非方法(String 害人不浅)
  5. 传入给 Java 的参数数组并不包含它本身
    img
    img

第二部分:简单的计算器

使用 Intellij Idea
使用正则表达式进行字符串匹配与处理

关于正则
之前有略微了解但并未深入,这次借助各种资源帮助完成了正则表达式的编写:
regex101
Java 正则表达式 | 菜鸟教程
正则表达式的优化: Using alternation or character class for single character matching? - Stack Overflow

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package io.github.jzyfc;

import java.io.*;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class SimpleCalculator {
public static void main(String[] args) throws IOException {
int first, second;
Matcher m;
String calc;
String result = "";
String ret;

// Read the data
System.out.println("请输入要计算的式子或选择保存上一次计算结果(输入s)");
Scanner scanner = new Scanner(System.in);
String newLine = scanner.nextLine();

// Initialize the regex
String pattern = "(\\d+) *([+\\-*/]) *(\\d+)";
Pattern p = Pattern.compile(pattern);

ret = readData();
if (!ret.equals("")) System.out.println("上次的计算结果为:"+ret);
while (!newLine.isEmpty()) {
if (newLine.equals("s")){
if (ret.equals("")) {
System.out.println("上次计算结果为空,请输入要计算的式子");
newLine = scanner.nextLine();
continue;
}
saveData(ret);
return;
}
m = p.matcher(newLine);
if (!m.matches()) {
System.out.println("错误的输入格式");
} else {
first = Integer.parseInt(m.group(1));
second = Integer.parseInt(m.group(3));
calc = m.group(2);
result = switch (calc) {
case "+" -> String.valueOf(first + second);
case "-" -> String.valueOf(first - second);
case "*" -> String.valueOf(first * second);
// calc can only be "/"
default -> first / second + "......" + first % second;
};
ret = String.format("%d%s%d=%s", first, calc, second, result);
System.out.println("计算结果为: " + ret);
}
newLine = scanner.nextLine();
}
}

private static void saveData(String s) throws IOException {
FileWriter fileWriter = new FileWriter("clacSave", false);
fileWriter.write(s);
fileWriter.flush();
fileWriter.close();
}

private static String readData(){
try {
return new BufferedReader(new FileReader("calcSave")).readLine();
} catch (IOException e) {
return "";
}
}
}


第三部分:计算结果存储

使用 FileReader, BufferedReader 与 FileWriter完成了数据的读写操作。
添加了两个方法以完成数据的读写。

遇到的问题

  1. 简单粗暴地处理 IOException 导致程序在无 calcSave 文件时读取数据出错, 后采用 try-catch 捕获异常
  2. 一开始采用正则解析 s 指令, 导致输入 s 之后程在读取数据时分组出错(不存在1、2、3组)。后采用 if 判断
  3. 文件均以 UTF-8 编码存储,导致最后程序乱码, 后添加编译器参数解决 img
    参考资料:CSDN

安装 Git 与 Node.js

Git: 下载地址 注意在安装时要勾选 Add to PATH 选项
Node.js: 下载地址

安装 Hexo

官方文档

  1. 打开 CMD 或 PowerShell 或其他终端(如 Git Bash)

  2. 全局安装 Hexo

    1
    $ npm install -g hexo-cli

开始建站

1
2
3
$ hexo init <folder>
$ cd <folder>
$ npm install

其中 <folder> 为博客存放文件夹

注意
当使用 PowerShell 时,执行 hexo init 时可能会出现如下错误
image
可以运行 Set-ExecutionPolicy RemoteSigned 解决问题
如果担心安全问题,可以在执行完 hexo 相关命令后运行 Set-ExecutionPolicy Default 恢复脚本运行策略

设置 GitHub Pages

虽然本人有自己的服务器,但完全没有前端基础,因此选择 GitHub Pages 提供的静态网页服务。

点击上方链接查看仓库创建指南。

设置 Git 并提交更改

  1. 任意打开一终端,进入博客存放文件夹
  2. 在终端中运行 git clone <你的仓库地址>
  3. 将除你的仓库(一般名为 <your-user-name.github.io>)外的文件夹拖入你的仓库的文件夹
  4. Push 你的更改
    1
    2
    3
    $ git add --all
    $ git commit -m "<写上你的消息>"
    $ git push

    注意
    在第一次使用 Git 时,执行 git commit命令时会出现错误,请根据 git 的提示更新自己的信息

设置 Travis CI 自动构建

跟从 Hexo 文档的指示完成配置。

注意
在新建 .travis.yml 文件时,请将

1
2
node_js:
- 10

中的 “10” 改为 node.js 的最新版本

访问博客

博客 Url 应为 https://yourname.github.io/

0%