jeffreyqjf / zjueva-tech-joinus-internal

zjueva-tech-joinus-internal
5 stars 0 forks source link

技术小组纳新试题

请在issue中中说明部门和姓名,或者创建一个README.md,并在其中说明部门和姓名

以下共有8题,题目难度和类型也不相同,你可以按照自己的情况选取若干题目完成,三至四题即可。其中第0题包含了题目解答上传的途径,因此必须完成。在解题过程中,你可以搜索相关资料,但请不要与其他人交流。

这些题目旨在了解各位的即时学习能力以及面向文档的学习能力,每道题目对于你来说都可能是完全陌生的,我们不需要你有多么优秀的基础,但我们欣赏你努力解题的过程。

如果在努力尝试后仍未能完全解答,可以谈一谈你对这些题目的理解,也可以将你对题目的探索过程作为附件提交,我们会酌情加分。

技术小组的纳新提交将于2024年10月18日23:59截止,逾期不候哦\~

Have fun coding\~

0. 来签到啦!- Git

作为一位(准)开发人员,你会遇到很多很多与他人合作完成项目的场景。你也许听说过“这个项目我Fork了”“这个项目我Star了”“我提交了一个PR”这样的说法,其实这都与Git息息相关。

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。它是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

你的任务

  1. 新建一个Git远程仓库,并保证技术小组管理员可以访问到你的仓库,托管平台不限。
  2. 使用你的学号作为密钥,将管理员发送给你的一串密文进行解密,并将解密结果放在一个文本文件里,和其他题目的作答分别放在以题目序号命名的文件夹中,推送到你自己的远程仓库。文件格式不限。
  3. 技术小组的纳新试题也会同步放在ZJU Git,Github以及Gitea托管平台,当你完成时,请在纳新试题仓库提出issue,并附上你的个人仓库链接。

明文的加密过程

  1. 明文固定4位,密钥固定学号后4位
  2. 将明文与学号对应位置的字符先转化为整数,再相乘,将结果转换为16进制
  3. 将4个独立的运算结果之间以"/"分割,再整合为一个字符串(密文)
  4. 如果搞不清楚这个运算过程,下面有一个利用Python实现的加密示例:
# 明文固定4位,密钥为你的学号后4位
encrypt = lambda clear, key: "".join([hex(ord(clear[i]) * ord(key[i]))[2:] + '/' for i in range(4)])[:-1]

你可能会用到的Git命令:

附加题

如果你实在无法通过Git将代码上传到你的个人仓库,请于2024年10月18日23:59之前打包发送到jeffreyqjfing\@gmail.com,邮件标题格式为 姓名-学号-部门-技术小组纳新

参考资料

1. 集装箱? - Docker

Docker是一种容器化技术,可以快速构建、测试和部署应用程序,相比于传统的运维,使用Docker可以解决“为什么在我的机器上跑得起来,在你的机器上不行呢?”等等一系列问题,同时也能够充分利用系统资源。当有一个DockerFile的时候,甚至不用去了解项目就可以部署它,那么,这么好用的东西...

你的任务

一些可能需要用到的命令:

相关的教程可以参考: Docker教程

2. 我来造轮子 - Bash

编写一个bash脚本search_file.sh,要求:

如:

Please input file extension (q to quit): 
Please input directory to search (q to quit):

注意:环境变量$HOME就是家目录的绝对路径。在终端中,可以用echo $HOME查看家目录的绝对路径。在bash脚本中,同样使用$HOME来指代家目录的绝对路径。

$ echo $HOME
/c/Users/<user name>     # git bash
/home/<user name>        # linux

示例:将以家目录开头的目录替换为\~开头:

/home/fracher/code/test.c   ->   ~/code/test.c

附加要求

可以参考的项目

另编

Vim之父 Bram Moolenaar 于2023年8月3日去世。让我们深切悼念这位开发者,他为自己的人生写下了最后一句 ":wq"。

3. 网页小实践 - Frontend

请制作一个本地网页,实现一些简单的效果。要求如下:

功能要求:

外观样式要求:

文件组织要求:


样例:

  1. 网页刚刚加载

  1. 在文本框中输入"3"并点击"生成"按钮

  1. 左键单击最左侧的小方块

  1. 再次点击"生成"按钮


一些可能有助于完成项目的小提示:

4. 204什么情况?- Backend

根据传统,老东西们会在204门口的电闸上贴上一个便利贴,写着“都别动!动会死!”。因为协会在自闭间有三台服务器,其中一台服务器上运行着EVA File、EVA Wiki等各种重要的网络服务。如果断电了,协会的部分网络服务无法正常运行,也有可能会损伤服务器硬件。但是,如果碰到了突发情况,又没有人在204,如何方便得知204服务器运行的状态呢?

我们可以在另一台较可靠的服务器(如云服务器)上搭建一个简单的服务端,并让204的服务器定时向云服务器发送请求。如果云服务器那端验证是204服务器发送过来的请求,那么就更新时间戳。如果过了一定时间(如:5分钟)没有来自204服务器的请求,那么就说明204的服务器可能出了问题,需要去检查情况了。

现在,就请你根据以上描述搭建一个简单的云端监测服务吧!

你的任务

在本地搭建一个服务端,并完成以下需求:

需求 需求描述 HTTP路由
检验网络连通性 服务端在接收到客户端发来请求后返回成功提示 [GET] /ping
更新时间戳 服务端在接收到待检测服务器发送的请求后返回更新情况 [POST]/check
查询更新时间 服务端在接收到客户端发送的服务器名称后返回上一次更新时间、以及是否失联 [POST]/status

在后续的返回值格式描述中,我们将略去通用部分,只描述数据主体(即 data 部分)的格式。

附加题

一些需要注意的事

本题不做语言限制,你可以用任何你喜欢的编程语言完成这一题。如果你没有头绪的话,可以试试 Go的Gin框架,或者Nodejs的express包,Python与C#也是一个不错的选择。C++也不是不行 服务只需要在本地运行,不必上传至服务器,提交时提交源码即可。

参考资料

5.原来是拟合 - Pytorch

在大家写实验报告的时候不可避免的会遇到拟合实验数据的曲线,小钱同学由于不会使用Excel拟合曲线,导致每次实验报告都被打低分。他下定决心要找出能最好拟合实验数据的曲线,于是他想到了神经网络...

你的任务

现在,请你使用pytorch设计并训练一个神经网络,可以拟合实验数据的一系列点,例如符合 y = 3x ± 0.5 分布的一系列散列的点,要求:

一些可能有助于完成项目的小提示:

附加题

  1. 训练一个卷积神经网络,数据集为MINST数据集(需自行下载),识别的准确率需要达到80%以上,提供内容同上,将原来训练效果的图片改为准确率的截图。
  2. 试试不依赖神经网络, 编写 Python 代码用传统的统计方法拟合实验数据, 并讨论一下这种方法与使用神经网络进行拟合的区别。

6.网络蜘蛛侠 - spider

小钱同学是一个医学专业的小e,很多时候需要搜索文献,但是人工手动搜索文献效率太低了,小钱同学就想着能不能通过一个自动程序来将相关的搜索结果以 文献标题:文献链接 保存为为一个.txt的文件中。

你的任务

A CAR enhancer increases the activity and persistence of CAR T cells : https://www.nature.com/articles/s41587-024-02339-4


这样两行,搜索的关键词可以自定义,如`CAR-T`。
-  你所需要提交的包括一个.txt文件和相应的源代码(建议使用python)。

### 一些可能有助于完成项目的小提示:

-  某些网站可能存在反爬虫的策略,为了更好的得到数据,可以使用chromedriver + python中的`selenium`包 来模仿用户行为,selenium相关教程可以参考[这个网站](https://selenium-python-zh.readthedocs.io/en/latest/getting-started.html "这个网站")。
-  Nature的web源代码可能比较多,可以在查看网页源代码的同时使用ctrl + F 来搜索自己感兴趣的的地方(比如网址)。
-  在page source 中获取自己感兴趣的内容(文献标题与文献链接),可以使用 `BeautifulSoup` 包来解析,也可以使用正则表达式来匹配,BeautifulSoup相关教程可以参考[这个网站](https://beautifulsoup.readthedocs.io/zh-cn/v4.4.0/ "这个网站").

### 附加题

1. 实现从一页相关的搜索结果拓展到10页,将10页中的`文献标题:文献链接`内容都下载下来。
2. 实现不仅仅只获取文献链接,将文献链接所指的PDF也下载到本地。

# 7. 今天你加密了吗? - NGINX

不少 Web 项目为了降低代码复杂度或是便于维护, 会避免在项目源码中支持 HTTPS (SSL/TLS 加密)。为了安全地提供服务,我们一般会使用带有 HTTPS 的反向代理。
你的任务是为知名的 Web 服务器/反向代理软件 NGINX 编写配置文件片段(具体地说,是一个 server 块),让 NGINX 将访问本机 443 端口的 HTTPS 流量反向代理到 http://localhost:12345
请提交相应的配置文件片段。

### 附加题:
1. 为你的反向代理配置 HSTS,并将访问本机 80 端口的 HTTP 请求重定向到 443 端口上的 HTTPS 服务器
2. 修改配置文件,禁用已经并不安全的加密/摘要算法

### 提示:

1. 你不需要提供 SSL 证书,对于测试用途,你可以选择创建一张自签名证书,也可以使用 let's encrypt 等服务(假如你有一个域名)
2. 测试时被反代的域名可以自行选择(比如 zdbk.zju.edu.cn),但你提交的配置文件中应当正确配置为题目中提到的地址

可能有帮助的教程:\
[菜鸟教程](https://www.runoob.com/w3cnote/nginx-setup-intro.html "菜鸟教程")\
[官方文档](https://nginx.org/en/docs/ "官方文档")

# 8.看不懂的字符就是让人觉得很奇怪啦 - misc

王同学在协会自闭间自闭的时候,屏幕上突然出现了一行字母:

`RVZBe1czMWMwbUVfVG9fekp1RVY0X1QzY2hAPz8/Pz99Ck1ENTo5NDY4NkM1N0U1MTIzNDkyOEIzNDQ5MjRGOTkyRDlDOQ==`

王同学感到好疑惑,但又感觉结尾的`=`有点眼熟,好像他学过的某种算法。

### 你的任务:

通过对上面这段字符作适当的处理,你可以得到一段有意义的字符,大致如`ZJUEVA{xxxxxxx}`的形式。请确保最后的结果不包含`?`,处理方法不限,如果你在解题过程中使用了任何工具,请将使用的工具(网站、代码)放到你的解题文档当中(如果是网站的话请截图解题过程,如果是代码的话直接贴到文档里即可)。

### 提示:

1. 注意结尾的`=`,这是一个很明显的标志。
2. 我会推荐你使用python来解决这一道题。

# X. 喜欢您来 - And You

感谢你看到这里!

如果你有什么觉得足够有趣,并且实现难度等同或超过上述题目的项目,我们也非常欢迎你自行提交项目仓库链接与项目说明。

期待你的表现!