2022焦糖工作室招新

焦糖工作室是干什么的

是一个西点屋

焦糖工作室(Jotang Studio)是电子科技大学信软学院创新工坊的一个学生技术团体,主要活动地点在电子科技大学沙河校区三教507和403

焦糖工作室全部由本科生组成,在这里可以拓宽技术的视野,和小伙伴们一起开展课程安排中没有的技术实践,焦糖的目标是让每一位成员都能得到成长

2022招新活动安排

工作室永远欢迎对技术和团队热爱的新人!无论你是大一还是大二,都可以加入这次技术马拉松赛,并在这个过程中掌握技能和探索自己的方向,相信你自己,很多事情没有那么难。

  1. 为期一个月的技术马拉松赛 从2022.9.6日开始,到2022.10.14日截止
  2. 工作室招新面试阶段:在技术马拉松中达到通过标准的同学可进入工作室面试阶段

如果你不是萌新,可以将简历发送到邮箱admin@jotang.club(邮件命名格式:年级-姓名-简历,如:21-段衍凯-简历),我们将组建专业团队(误)对简历进行评析并在3个工作日内给与答复。

规则

  • 完成任意题目后请将需要提交的内容放到新文件夹(命名格式为:题目序号-姓名,如#2-段衍凯),最终将所有文件打包(命名格式为:年级-姓名-发送日期-做题题号,如:21-段衍凯-9.14-127)并发送至邮箱 admin@jotang.club
  • 题目提交次数不限,以 最后提交版本 为准。 马拉松截止时间为2022.10.14(23:59)
  • 每道题都需要提交记录了学习过程的markdown文件,如果要求代码,请上传至Github并将访问链接一同提交。如果你还不知道什么是Markdown和Github,请先做科普福利题#1 啥是Git#2 Markdown
  • 招新对题目数量不做硬性要求,你可以深入一题,体现你的技术深度,也可以“我全都要”,探索自己的兴趣方向。
  • 如果需要与我们交流(比如题目太简单了,题目出现错误等等),请同样写下你的具体想法发送邮件到上述邮箱,或者在招新群中找到对应的出题人私聊
  • 截止日期后约半个月的时间里,我们会根据 题目的完成度 和在 Markdown文档记录与细节 给出评分表,并将其汇总为一个总评分表,达到通过标准的同学可以进入面试阶段
  • 科普福利向题目是帮助同学们热身和入门学习的,请一定至少选择一道代码技能向题目完成,题目的完成度最重要
  • 当你发现有些帖子打不开或者下载不了,建议更改域名中的“d.jotang.party”为“d.jotang.club”,这是我们论坛迁移的bug,正在修复,请您谅解
  • PS:
    • 诚信是Jotanger的底线,一旦我们发现解答中存在严重的copy现象,无论技术力如何,我们都将拒绝您的加入
    • 在马拉松过程中,如若题目有表述不清或其他问题和疑问,请及时反馈给出题者。出题者在招新群中统一以 2022#题号-姓名 (如2022#1-段衍凯)命名
    • 焦糖时刻欢迎各位萌新在群里提问,也鼓励同学间互帮互助。但焦糖依然希望同学们养成在提问前先自行百度谷歌的习惯,因而对于一些能直接百度出来的答案,焦糖学长们可能不会全部解答,望理解。

题目类型

1 Like

#0 Let’s Warm Up!

你好,欢迎来到这里!这个部分是 JoTang Studio 招新的一系列预热题目!焦糖工作室为2022级的同学精心准备了兴趣引导和前置技能题目。但是不要担心,我们的题目难度已经过严谨考虑和调整,并且我们并不要求全部完成。焦糖工作室希望,你可以通过这些题目,初探开发和软件的世界,并能够发现自己感兴趣的方向。

萌新:这引导看不懂啊?这链接为啥打不开?这些名词啥意思啊?这报错了咋整啊? dalao:Let me Google that for you 萌新:…卒

不要慌嘛,焦糖是一个萌新友好型工作室,我们会先带你点亮前置技能点。

搜索

对于不同领域的问题,需要灵活运用不同的搜索引擎。

比如我们推荐使用 Google 作为通用搜索引擎,使用必应/百度作为中文搜索引擎。

这里推荐一个聚合的搜索引擎网站:虫部落快搜

如果你想掌握更高级的搜索技巧,这篇文章也很简单易懂:搜索引擎的一些高级搜索指令

但除此之外,我们也可以发起针对性的搜索。

比如如果你在编程过程中遇到了奇奇怪怪的难以修复的BUG,你可以考虑使用国内的CSDN论坛搜索,也可以使用StackOverflow它们都是优秀的开发者社区

如果你对于“为什么无法访问 Google”有疑问,欢迎看看我们为你准备的科普文档:深入理解GFW

提问

虽然搜索引擎的效率远逾言辞,但有时,光靠它的能力也有未能解决的问题,我们需要向别人提问。如果是在社区提问,为了更高效地获得可靠的回答,你可以需要一些提问的技巧:

ryanhanwu/How-To-Ask-Questions-The-Smart-Way 本文原文由知名 Hacker Eric S. Raymond 所撰寫,教你如何正確的提出技術問題並獲得你滿意的答 案。 - ryanhanwu/How-To-Ask-Questions-The-Smart-Way

你的任务

  • 迅速获得获得一台计算机的使用权。
  • F**k the GFW.(获取Google等网站的访问权限)
  • 闷声发大财,本题无需提交。

划重点

  1. 如果同学你没有办法回到家中,你可以考虑去网吧(一起来网吧编程!)。如果你不太想去网吧,那么你可以考虑一下购买一块树莓派+外接屏幕和键鼠的方式练习使用Linux系统。如果你想尝试用平板/手机代替电脑。你的下一台电脑,何必是电脑,也欢迎与我们交流。
  2. 我们强烈建议你马上拥有一台个人笔记本,赢在起跑线!赢在人生路!(逃
1 Like

#1 啥是Git

背景

第五次收到某同学用 QQ 发来的的 debug 请求和zip压缩包时,我陷入了沉思,于是有了这道题。

还未接触太多代码的你可能很难意识到Git的作用,因为当前的一道习题对应一个代码文件,而且大多数时候也只是你一个人在编辑,在此时Git并不能带给你颠覆性的开发体验,但是对于多人参与的代码量稍大的项目而言,没有版本控制工具是难以想象的。想象一下下面这些场景:

  • 当你需要编辑一个文件时,如果不想产生冲突,其他人需要避免操作这个文件,要等你完成修改后再把最新版流转给ta。
  • 还是这样的场景,当ta修改了项目后,如果你又要进行编辑,除非ta告诉你,不然很难确定修改的位置,更难评估对你目前任务可能造成的影响。
  • 当你的更改需要进行取舍的时候(甲方:我觉得还是第一版比较好),可能需要在多个版本的完整代码中比对,如果没法复原,这无疑令人绝望。
  • 当你进行的更改导致了严重的bug,或是不得不放弃,你也很难快速地回溯到原先的状态。

显然,没有版本控制系统,这些都会在项目开发过程中频繁出现,严重影响我们的开发效率和身心健康。

所以痛心疾首地安利 Git 之后,希望每一位同学都能够掌握 Git,并且习惯使用它来管理自己的代码。

准备

1. 本地Git操作

照着这份教程慢慢走下去吧~

2. 2. 学习使用Github远程仓库,将本地的项目提交上去吧!

(其实上面的教程也有一部分在讲远程仓库)

image

Github是世界上最大的开源协作社区和在线Git远程仓库托管服务提供商,在2018年被微软收购后,Github的私人远程仓库服务也开启免费了,你可以上传自己的项目代码到远程,世界上的其他人可以搜索到你的代码,和你参与协作。又或者你重装了电脑,可以直接重新从远程仓库下载原本的代码,无需额外用存储设备保存。

除此之外,凝聚了无数人类智慧精华的众多开源项目都在Github上进行版本管理和迭代。如果你很好奇一些技术(比如前端的facebook/reactvuejs/vue 后端的apache/kafkaapache/zookeeper等项目)的当前进展和未来规划,或者发现了代码里的bug,都可以通过提交issue或发起Pull request来加入开源社区的共建!

对开源感兴趣的话,可以看看这本书https://book.douban.com/subject/35716759/

3. (选修) Git进阶

可以看看 Git-Tower 这份精美的教程(反正不要钱)。

(当然你也可以去看官方的 Git-Book 2

有时你会对许多命令的作用感到困惑,比如 rebase,那么你可以试试这个有趣的可视化沙盒式教程 ——https://learngitbranching.js.org/

倒腾一遍会让第一次接触 Git 的你心里踏实许多。

如果你感觉纯命令行让人困惑,想要更直观地操作 Git 分支,可以下载一个 SourceTree 8 试试,可能会友好一些(它是免费的)。

任务

  1. 用本地化Git来管理本次招新马拉松的题目回答项目文件吧!如果你可以写一写遇到的问题或者学习的过程就更好了~
  2. 注册Github账号,并将你在本次招新马拉松中所做的题目提交上去吧!如果commit message 写得比较规范或者项目文件管理比较清晰可以加分哦~(记得建立远程仓库时选public 不然我们看不到)
  3. 进阶题目 有自己的博客是一件多么令人兴奋的事情啊~ ,使用 GitHub pages 免费搭建一个博客吧!(啊?你问我怎么做?请看第0题自行搜索)

如果你更喜欢搭建包揽前后台以及数据库的动态页面博客,比如这样的 36(强行给学姐博客打广告🤣),可以自行探索~

备注

由于GFW的存在,最近两年Github的国内访问速度和稳定性都有明显下降,所以我们推荐你使用一些方法(比如第零题的任务)进行加速。另外, Github也提供了桌面端程序Github Desktop 可以在一定程度上避免上传和下载遇到的奇形怪状问题。

如果实在做不到访问Github来完成题目,也可以将远程代码托管网站换成Gitee

题外话

  • Github 的 private repo(私有存储库)已经对个人用户免费了,所以不用害羞哦!
  • 本题旨在带你了解 Git 和 Github,发现更大的世界。哪怕对 Git 和博客不感兴趣,也希望你能注册并探索一下 Github 这个世界上最大的开发者社区,没事多逛逛 Trending 11 ,star 些你感兴趣的项目。
  • 提交的时候记得附上你的 Github 主页和博客链接哦!

#2 Markdown

背景

多年以后,小原寒再一次打开邮箱,还会想到那个与工作室小伙伴们兴高采烈地打开招新题收件箱的那个遥远的下午,在看到满屏幕的.doc格式的word文档陷入了沉思,欲哭无泪的表情在他脸上久久不能散去(误

不是吧阿sir,你还在用Word?

Markdown 是一种轻量版文本标记语言(萌新:什么是文本标记语言?)

Markdown可以让你用写txt记事本的写法写文章,但却可以生成不亚于word文档的好看的排版,在计算机世界中,遍地是markdown格式的文档,无论是Github里各个项目的README,还是优秀的工程师的博客,都是由Markdown书写,除此之外,markdown在简书、知乎以及很多论坛中得到应用。

Markdown并不是一个软件,你可以使用任何编辑器书写markdown文档

注意:本次技术马拉松中你提交的所有文档都应该是markdown格式哦

一起来学习Markdown吧!

#3 Linux / WSL

题目背景

学期开始,想要加入 Jotang 工作室的小马面对各种招新题,早已跃跃欲试。为了完成招新题,小马先是安装配置了 Python 开发环境;转头捣鼓 Java 时,又配置好了 JDK;配置好了 Go 的开发环境后又去安装了 Node 包管理器。

问题来了:

不同的框架兼容不同版本的开发环境出现兼容问题时,这时小马看着已经变成各种语言各种版本号形状的环境变量参数,早已欲哭无泪。而 Windows 又是平时的生产环境,不方便全盘清空重装,这时要怎么办呢?

这时 WSL2 闪亮登场,他能够在 Windows 环境下虚拟出一个带有完整 Linux 内核的开发环境

问题又来了:

WSL2GUI 配置困难,而且有的同学就是喜欢用带有 GUI 的发行版。命令行虽好,但是同时拥有 GUI 不香吗?

显然此时只有完整的虚拟机能满足小马的需求了,在虚拟机下,小马得到了:

  1. 便于配置各种语言的开发环境
  2. Linux下更方便地处理不同开发环境的版本兼容
  3. 便于试错,配置炸了的话随时可以清空整个环境不用担心生产环境数据丢失
  4. 满足小马的洁癖与强迫症

至此,小马可以开开心心地做各种招新题目,再也不用担心他心爱的 Windows 环境变成各种形状了!

题目内容

任务(二选一)

  1. 安装配置 WSL2 的 Ubuntu 发行版
  2. 在虚拟机软件中安装配置 Ubuntu 发行版

选择哪条分支根据个人兴趣以及需求来即可。

加分项

  1. 通过 VScodeRemote 插件连接至你的虚拟机 / WSL2
  2. 配置好基于 SSH 密钥的免密的远程服务器登陆
  3. 开发出简易的 Shell 小程序

提交内容

  • 每一步的截图
  • 文字说明
  • 个人感想

以上内容通过 Markdown 格式的文档提交

#4 产品设计

题目背景

一个平凡的上午,小毛打开b站开始沉浸式吸猫,这时,猫猫之神降临了焦糖工作室,赐予了小毛一只小猫咪。受到猫猫之神的启发,小毛决定停止摸鱼,设计一款焦糖风格的宠物分享平台app!

任务一

设计该app的图标

  • 具有焦糖特色
  • 创新简洁,工具不限

任务二

为这个app取一个好听的名字,并写一份需求分析文档,说明app的基本功能,业务逻辑等

该app需包含用户发帖分享宠物日常的基本功能,另需增加至少一项其他与宠物相关的功能模块

  • 字数要求:大一3000+,大二4000+
  • 请不要抄袭,我们会对文档内容进行查重,如发现严重抄袭将直接取消参与资格噢~
  • (加分项)你也可以写一篇开发文档

任务三

绘制该app的原型图,机型不限,需具有焦糖特色

任务四(大一加分项,大二必做)

为该app制作一份路演ppt,如果通过了笔试,面试将以模拟路演+答辩的方式进行

参考资料

提交内容

图标设计源文件,导出的.png文件(若使用网络素材,请附上.md文件说明),文档pdf,原型文件及原型各页面截图,(路演ppt)

Tips:

  • 目录参考中出现的目录结构均摘自成员的优秀文档,有些也并不只是需求文档,请大家灵活参考,多多思考
  • 写文档的能力在竞赛,学校学习,工作实习中都很重要,所以虽然这道题入门比较简单,但相应的我们的要求也会比较高,请大家务必用心写噢~

#5 前端

题目要求

如果你是新入门的大一同学,我们推荐从任务一开始不断学习和练习,尽自己的努力尽量提高题目的完成度

如果你已有知识储备,或者你是大二的同学,我们期望你能完成任务二,并尽力达成进阶要求

任务一

选择前端开发,我们首先从HTML和CSS这两个简单的语言开始入门吧。掌握这两样工具,你将有能力制作出属于自己的静态页面。查找相关资料完成学习后,尝试着搭建一个简单的个人介绍页吧!内容包括:

  1. 个人介绍,包括但不限于你的兴趣爱好,你对未来的想法等等
  2. 照片和头像,如果你不愿意放自己的图片可以换成你喜欢的图片哦
  3. 你的学习记录,在这个阶段里你学到的东西,你遇到的困难都可以记录在这里,也可以加上在学习的过程中写的代码

最后使用 Netlify 部署你的页面,让我们能够看到你的作品吧。

参考资料

学习关键字

HTML、CSS、DOM、Netlify

任务二

现在你已经熟悉了网页的基本构成,下面我们尝试学习使用JavaScript进一步完善任务一中的作品,实现一个具有交互功能的页面。

尝试实现以下基本功能

  1. 在任务一中,如果我们上传多张图片,可能会使页面变得杂乱。尝试完成一个展示窗口,可定时播放自己所选择的图片,也可手动点击进行切换,使页面更加整洁。
  2. 在任务一中,我们构建了一个学习记录展示区。下面我们对其完成进一步的优化:
  • 请尝试标记出每条记录的上传时间,并设计按日期排序的功能,便于查看自己的进度情况。
  • 为了方便对记录的管理操作,尝试增加新增删除记录功能。进一步,增加批量删除操作。
  • 个别学习记录内容可能过长,尝试对于大篇幅内容设置展示标题预览点击展开细节功能
  1. 如果能收听到其他人的建议,将更有助于我们的学习。尝试增加评论区板块,使得其他人能发表评论,包括以下功能:
  • 评论者的信息收集验证(如学号、年龄的范围等要求)
  • 筛选查看指定用户信息(如只查看女性评论者或只查看指定年级的评论者等)
  1. 对页面进行个性化,设计不同的配色主题,并提供主题切换功能

tips

  • 由于没有提供服务端,推荐使用浏览器自身的存储能力,如local storage,session storage
  • 本题目没有提供原型图,请同学们自行设计布局与样式,注意考虑用户的交互体验噢
  • 对于一些功能的实现,可能网上已有现成的源码,同学们在开发过程中可以查看学习,但严禁直接copy抄袭,希望大家自己努力,在开发过程中真正获得能力的提升

学习关键字

  • Javascript
  • 浏览器事件
  • 浏览器的的存储机制
    • Local Storage
    • Session Storage
    • Cookies

进阶要求

如果你觉得以上的要求太过于简单,可以在此基础上继续完善:

  • node 环境和浏览器环境都可以运行 js 代码,大致了解这两者的区别
  • 了解 npm 或 yarn 的常用命令,了解 package.json 的作用
  • 使用 Vue、React、Angular 等框架来搭建项目
  • 引用第三方的组件库,让页面更美观,交互的体验更好
  • 设计你所希望实现的功能,实现自己的个人社区
  • 使用 Electron 打包项目,让你的“页面”变成桌面应用程序

参考资料

学习关键字

nodejs、npm、Electron

提交方式

  • 任务一:请提交能够访问的链接
  • 任务二:请提交 github 的地址,并写好 README.md

#6 爬虫

背景

导语:人人都骂东子,但人人都想成为东子

又到了一年一度迎新季,新生选电脑每年都是一个热点话题,但某网站(京东)的信息太过眼花缭乱,为了更加装×地对比网上各类电脑的信息,某高能22级新生快乐地去点亮了我们可爱的爬虫技能(ding~)

网络爬虫 (web crawler),也叫网络蜘蛛(spider),是一种用来自动浏览万维网网络机器人。其目的一般为编纂网络索引 这听起来并不像人话 让我们通俗点解释一下,如果将因特网比作一张错综复杂的交错巨网,那么爬虫就是这张网上的一只只小蜘蛛,这些蜘蛛会将他们探下的路的踪迹和在路上抓到的资源反馈给我们。

总而言之,爬虫就是一段可以自动抓取互联网上对于我们有价值的信息的程序。 既然说到了程序和编程,接下来就开启冒险,让我们来谈谈这次的通关任务吧。

任务

基本任务:爬取链接中的评论,内容包括评论者用户名、评论内容、评论时间,数量不少于500条,保存到本地;

进阶任务一:学习数据库基本的 sql语句 ,能够进行数据的增删改查(可写学习笔记),并将爬取到的内容存入数据库;

进阶任务二:自学《计算机网络——自顶向下方法》第二章前三节,并写学习笔记。教材链接,提取码gc8e;

Tips

  1. 爬虫,Python requests 13re 2bs4 1库 作基本学习, Scrapy 12框架较适合本题;
  2. 爬虫,如果熟悉web或者想少写点代码或者想看可视化界面可以尝试 node-red 5;
  3. 数据库,常用的 MySQL 6 MongoDB 3较为推荐,当然其他数据库肯定也都可;
  4. 不要求全部做出来,基本任务必须完成,进阶任务多多益善(大二学生推荐全部完成)

提交内容

基本任务:将尝试爬取的过程整理到 markdown 中,连同代码 github链接 、爬到的 数据 打包发给我们;

进阶任务一:将学习笔记(可选)整理到 markdown 中,连同代码 github链接数据库运行截图 ,打包发给我们;

进阶任务二:将学习笔记整理到 markdown 中,打包发给我们。

#7 Java后端

背景

众所粥知社交功能是很多软件都在水的一项功能,为了让同学在将来的项目中能够光明正大注水,我希望大家提前了解一下社交功能注水过程中的一些小环节。

任务一:多线程

引入:我们都知道后端开发的网站用户一定不会只有一个人,(竞赛项目除外)。那么在多个甚至大量用户同时访问网站时,除了会出现高并发的性能问题之外,如果你的两个倒霉用户碰巧要发生该死的交互,那么你就不得不来解决这两个用户的需求了。具体到代码中就必须引入多线程了

多线程是后端中难以忽视的一个重要问题,如果处理不好就很容易出现许多恶性bug(比如你的用户在你意想不到的地方发生了该死的交互),为了防止大家在以后学习多线程的过程中破防,我来帮助大家提前破防。
既然我们打算注水社交功能,那么我们可以先在一个java程序中用多个线程来模拟多个用户,所以我们首先需要了解java基础已经多线程相关的知识。

对于看不懂的内容建议直接跳过,只要保证能够完成任务即可,很多多线程的内容涉及大二课程甚至更深层的东西,所以不必太过纠结。
任务:使用多线程来模拟两个用户直接相互发送消息,可以将你预设好的内容存在合适的数据结构中然后让两个线程直接按顺序的发送和接收这些内容并将内容显示在控制台上。
(关于两个用户,我们希望以对象的方式来表示)
注意理解java的面向对象的特点第一个视频中的p60
至于其他内容的学习,建议学会了java基础之后我们在做题的过程中遇到问题再去视频或者百度(Google)中寻找解决方式
注意使用同步或wait(),notify()等方法让线程按照我们希望(重要!)的方式运行。
提交能够运行的代码即可

加分项

掌握java面向对象的特点最好了解与c语言这种面向过程的语言的区别
对java线程同步控制有一定的理解。

任务二:聊天室

虽然我们要做的是社交功能,但是那种单用户间互相联系的聊天方式比较难以实现,同时主流的实现方式都是websocket对同学们来说实践意义不是很大,所以我们退而求其次来一个简单的网页聊天室。
虽然说是聊天室,但是其实只要大家能够做出一个单个信息存取的功能就可以了

要求将实现内容部署到服务器上。白嫖服务器的方法((https://developer.aliyun.com/plan/student))
提供两个url 一个url使用get方式给指定变量赋值,另一个url可以在网页上显示最近一次存放的变量内容
以及你的实现代码。

首先建议同学使用springboot+mybatis-plus,但没有学过springboot的同学使用spring或者servlet+Jdbc或者mybatis都是可以的,不过还是强烈建议大家学习一下springboot,确实能够有效减少工作量。
我们的任务简单来说就是一个用户可以把数据存放到数据库中然后能让其他用户从数据库中取出他存放的数据即可。
如果可以读取历史数据,以及加入删除和逻辑删除并加入恢复功能可以额外加分。
实现方式任意,能够提供url访问即可。

要求将实现内容部署到服务器上,白嫖服务器的方法(https://developer.aliyun.com/plan/student)

以下内容建议有一定基础的同学学习

#8 人工智能

”人工智能为什么好呢,对编程有要求但不高,对数学有要求但也不高,同时还要白唬的能力”

在某期焦糖radio中毛佬如是说到(欢迎b站搜索UP主“焦糖radio”收听)

Background

人脸识别、机器学习、深度学习、……各种与AI有关名词的热度越发高涨;Alpha GO制霸围棋界、物体识别走进千家万户、科大讯飞的自动语音识别、APP基于用户特征的智能推荐,人工智能的强大早已不言而喻。如果你也对人工智能充满兴趣,想要一探计算机利用数据思考、做出决策背后的秘密,不妨跟着我们一步步了解这门充满魅力的科学。AI是一个非常庞大的领域,相信你可以找到somewhere you are really devoted to.

完成度要求

严格来说没有硬性要求(多多益善手动狗头),只是希望能看到同学们的学习能力与理解、应用程度,以下是一些建议和希望。

  • 对于没有基础的大一同学,建议从Task1到Field1逐步学习,若有余力可以对Field2、Field3做一些了解。
  • 对于有些基础的大二同学,希望能在完成Task1和Field1的基础上,任选Field2或Field3其一探究,当然也欢迎有大佬能全部做完orz
  • 不论完成度如何,请仔细阅读每小题的提交内容,并且提供一个可访问的GitHub地址,里面应当有你想要提交的**.md文件、截图、源代码**。

TASK1

提交内容

  1. 使用你喜欢的资料大致了解机器学习,关注重点概念与基本思想,并将学习笔记写入一个markdown文件。
  2. 然后完成以下代码补全题,将补全后的代码存为一个名为iris的python文件。
  3. 将代码执行结果记录在markdown文件中。(注意markdown中插入图片能否在其他设备上访问!!!)
  4. 将文件归纳到名为Task1的文件夹中。

开始之前,请你先稍稍了解神经网络的基本概念以及pytorch又是什么~~

重点关注对象:(还有别的你觉得有趣得内容也写上哦)

  • 监督学习/无监督学习 分类器/预测器

  • 独热码/向量化 神经元/输入层/隐藏层/输出层/卷积 激活函数/权重/权重更新

  • 梯度/学习率/损失函数/过拟合 训练集/测试集/神经网络性能评价指标…

好啦,基本的概念在你的脑海里开始生根发芽了,那就开始机器学习的"hello world"吧!

在自己动手之前还有个小小的问题有待解决——环境搭建

我们需要在自己的电脑上搭建一个python环境(建议python=3.7),可以使用anaconda搭建虚拟环境,配置下面项目所需要深度学习框架。

在神奇的泥电校园有一种神奇的名为iris的小草,它分为A、B、C这三个品种,每棵草都有四个典型属性,tsundere studio某个醉心花草的人采集了一百五十棵草,并记录下了每棵草的属性和品种,制作成了一个数据集。接下来,我们的任务便是补充一段代码,让你的专属神经网络学会根据属性判断小草的品种哦~~

代码框架地址:百度网盘 请输入提取码

代码中标有 “?” 便是需要填充代码的地方。当然也可以尝试自己修改神经网络结构看看效果如何(加分项~)。

虽然说大部分同学可能没有专门学习过python,但深度学习代码所需要的语法并不难,并且python本身简洁的特性也降低了初学者运用的难度,稍加学习语法也能handle!

参考资料

  • Python神经网络编程(塔里克·拉希德)的第一章。这是一本有趣的科普读物,可以花一两个小时阅读第一章了解基本的思想

  • 吴恩达机器学习课程,吴恩达深度学习课程(面向b站大学学习) 暂时不需要全部看完 前几节就够辽~~

  • 如何通俗易懂地讲解卷积https://www.zhihu.com/answer/637156871

  • 如何利用conda进行python环境管理

  • 莫烦python Pytorch神经网络

  • 廖雪峰的Python教程

  • 零基础入门Python

TIPS

  • python的语法其实相当简单,大一的同学不用担心,稍微学习一下就能运用,不要放弃啊😭
  • 配置环境可能遇到非常多小问题,善用搜索引擎,耐心解决。

TASK2

Field 1 Computer Vision

视觉对人类可太重要啦,作为AI怎能不升级出这个技能点呢!计算机是怎么处理图像信息的?计算机视觉(Computer Vision)将回答这个问题

在做题之前我们可以先了解了解以下问题:

  • 计算机以怎样的方式存储一张图片,又是怎样显示它的?
  • 作为一名 programmer,我们在代码中采用什么数据结构将图片读入?
  • 如今CV领域已然发展得非常成熟,有哪些研究领域(目标检测、图像生成……)?
  • 了解一个非常重要的库OpenCV

相信前面的小问题一定难不倒你!那先在就让我们尝试复现一个有趣的计算机视觉项目吧!需要注意的是本项目使用的是keras框架,尽量重新搭建一个新环境,避免和上道题目的环境版本产生冲突。(不同项目使用独立的环境是版本管理的好习惯)

识别自己的表情符号!在这个项目中,我们可以利用摄像头实时识别人脸的表情种类。可能发现全是英文觉得有点哈人hhh。阅读英文文本是我们的一项必备技能噢,冷静下来看并不难理解。相信通过本题,你可以更好的理解深度学习模型的工作流程与效果。

题目要求

我们的任务是复现这个开源项目,下面是几点要求:

  1. 我们在复现时可能会发现一些代码的错误,库版本不兼容的问题,这些都是复现工作的常见问题,尝试自己解决他们吧。

  2. 基本要求是成功运行train.py,将训练的结果的评价指标记录下来。

  3. 我们发现执行本项目的gui.py很可能无法显示gui界面,如果你也遇到了此类问题,尝试对它进行修改,使之实现识别表情符号的功能。这其实和深度学习算法没有什么关系。主要是调用cv2的函数,使摄像头捕捉图像,传到train.py训练好的模型中做出分类。(因此本要求作为加分项,不硬性要求)

  4. 如果成功运行了gui.py,控制表情,让摄像头识别到尽可能多的emoji种类吧!(同上为选做)

  5. 没有成功完善gui.py也没有关系,尽可能看懂train.py的源码并回答——它是如何载入数据,如何设计trainer,采用怎样的网络结构?

提交内容

  1. 相信在环境配置和修改过程中遇到了很多令人抓狂的问题吧,记录在markdown文件中,分享让痛苦减半~
  2. 尽量给修改后的源码加上注释,比如遇到了什么问题,如何修改的之类。形成自己的python文件。
  3. 将复现成功的画面截图下来,我们一起分享喜悦!(尽可能多种表情识别成功的截图)
  4. 将对第五个问题的回答记录在markdown文件中。
  5. 上述文件统一在一个名为Task2_1的文件夹中。

参考资料

TIPS

  • 不明白的库函数、网络结构,用好搜索引擎大概率能找到答案。

Field 2 Natural Language Processing

自然语言处理是一门融语言学、计算机科学、数学于一体的科学。这一领域的研究主要是为了让计算机能够像人一样听懂、处理和生成“自然语言”,即人们日常用于交流的各种媒介,例如文字、语音、旋律等等,综合来看他们有一种特点,那就是他们是以序列的形式传递信息的,这也是为什么NLP能作为一个独立的深度学习分支发展至今。

☆☆☆☆☆注:该题可能题目略长,还请同学们不要一看感觉害怕就划走了哈,该题重点在工程实现上,不需要学习太多的数学理论,所以只要各位好好读题,理清关系,相信各位一定能慢慢攻克本题的,而到那时我相信你也能大致了解一个炼丹项目究竟需要做些什么了。

(咳咳,正文开始)

​ 澳焦银行作为一个“大公司”,每年都会有相关的交易或者营收账务记录和报表,但是如此大量的财务报表和账务记录会让潜在的“投资者”难以非常方便地了解和分析企业的财务状况,这样澳焦银行就割不了韭菜(bushi就不能帮助大老板们合理管理他们的闲置资金,不能为他们创造更多的利润和回报了。我们工作室准备实现一个自动问答的AI(FinQA),当老板们想了解澳焦的相关财务状况而提出一个有关公司财务状况的简单数学逻辑问题时,比如 :

what is the the interest expense in 2020?

该AI可以自动的根据问题读取公司的所有财务记录和报表,从中筛选出需要的内容和数据,并最终形成一个program序列,例如:

divide(100, 100), divide(3.8, #0)

这里做一些解释,#0表示第一个操作得到的结果#1表示第二个操作得到的结果以此类推。这样一个program序列经过一些传统算法的识别和计算,就可以自动的得到上述问题的答案,即3.8。

​ 该任务因为比较复杂且工程量大,我们将其勾画成一个分步任务来实现,基于一篇名为FinQA: A Dataset of Numerical Reasoning over Financial Data的论文,首先我们有一个retriever来筛选需要的内容和数据(在此我们暂且不管他的实现,我们已经为各位做了初步的数据清洗,为各位筛选出了需要的数据,详情可见题目最后提供的数据集),然后我们需要构建一个generator读取需要的内容和数据来实现program序列的形成,在本次考核中,我们只将重点放在generator这一模块的部分实现上。

​ generator的构建中我们除了论文提供的文本生成方案之外,还自行构建了很多种其他方案,其中一种方案也是一个分步方案(分类+序列标注),考虑到题量问题,我们主要考察他的第一步也就是分类,它的第一步是根据文本和数据进行一个operation组成方式的分类(concat_operation),举个栗子,比如上文的program: divide(100, 100), divide(3.8, #0),我们可以把它当作一个“divide0_divide1“的组合,不妨把这种格式的组合叫做concat_op,而“divide0_divide1“这个符号表示这个程序第一位是divide,第二位也是divde,这样我们就可以确定一个程序的大致模板。假设数据集涵盖的concat_op有100种,那我们只要将需要的文本内容 + 问的问题打包输入给一个模型,并且模型能够相对正确的从100种concat_op中选出一种组合,那么我们这一步的任务就完成了。

题目基本要求(数据清洗):

人工智能本质还是属于一门数据科学,优质的数据来源以及完善的数据清洗是一个炼丹项目能否炼成的第一道难关。我们将相关论文源码进行了一部分的删改,各位仅需完善代码即可,但我们的方案并不完全基于论文方案,所以会有一些额外的代码要写。本题需要各位同学完成以下两个基本要求:

  1. 下载题目最后给的百度云盘链接中的NLP-Part 1,自己写一个 statistics.py 文件,用来统计train数据集中的所有concat_op类别,并整合成一个数组。

  2. 学习研究并完善数据清洗部分代码(prepro.py)(从文件第115行开始),尝试将你之前用来统计concat_op所有类别的算法代码插入其中,使得prepro.py在进行数据预处理的时候能够对数据集中的每个program进行分析和识别,生成与之对应的concat_op。

进阶要求(炼丹开始啦):

我们在研究的过程中得知一个非常牛逼的神器————Bert模型,Bert全称为 Bidirectional Encoder Representation from Transformers,Bert凭借其出色的性能让如今NLP领域几乎成为Bert+时代,使用bert模型可以让你的项目达到一个比较优秀的分类效果。

在本题中你需要完成:

  • 下载题目最后给的百度云盘链接中的NLP-Part 2,学习pytorch相关用法,实现一个基于bert的文本分类模型,将它引入你的model.py中并尝试跑通它。也可以网上搜寻相关源码,但需要修改相关参数还有输入量哦。

    • 注意运行本代码是使用文档内的sh脚本,脚本需要先修改他的权限为可执行,之后才能执行使用。具体使用的话,如果是windows本地环境那么需要安装git,使用git bash后在弹窗内使用脚本即可。如果用的网上的linux服务器,那么直接使用即可。
    • 运行的时候可能会遇到apex包的安装问题,这个包用一般的pip安装是没用的,我在项目包中放了一个apex的本地安装包,需要各位同学自行本地安装(如何安装查查博客吧)
  • 继续完善整个项目,研究并完善trainer.py部分代码,自行完成accuracy函数(文件第18行位置)的编写(计算准确率),并尝试提高模型准确率到70%以上,推荐萌新们可以使用矩池云、Colab或者kaggle等在线训练平台进行训练(如果是土豪爷爷自己有3080的当我没说)

    • 注意你的服务器是否有使用显卡进行计算,观察你的GPU使用率等等,如果你的计算过于缓慢,有可能因为你的代码问题导致服务器在使用CPU超频计算。

提交要求

  1. 完整的项目代码(放在一个名为fenlei的文件夹中)。
  2. 一个markdown说明文档,包括但不限于以下部分:
    • 整体项目的各模块的大致介绍,各部分代码的思路走向以及大体作用。
    • 你所修改的代码部分的说明
    • 你在研究源码&&调试中所遇问题和解决方案。
    • 如果你已经做到了进阶要求中的训练部分,请附上你的训练过程图和最终的accuracy结果截图
  3. 上述文件统一放在一个名为Task2_2的文件夹中。

参考资料


Field 3 Graph Neural Network

CV和NLP处理的都是结构化数据,而Graph和他们很不一样。此图非图像的图,回想离散数学中的“图”,这是一种非结构化的数据。现实世界许多数据都是非结构化的,例如社交网络、复杂的文件系统、分子结构等等,如何处理这类数据对我们实现产品精准推荐、分子结构预测等现实问题大有帮助。我们使用APP时收到的很多相关推荐,内容推送,广告投放等等很可能背后用到的都是图神经网络噢。

由于接下来的任务需要用到GPU,搭建环境的方式有两种(推荐后者):

  • 如果你的电脑拥有独显,那么可以在自己的电脑上搭建一个深度学习所需的python环境(建议python=3.7),并且配置好显卡版本对应的CUDA(血泪教训😭)。可以使用anaconda搭建虚拟环境,深度学习框架墙裂建议使用Pytorch!!!
  • 如果没有独显,那就需要借助各种人工开放平台啦,例如colab、矩池云(还有很多很多,随便使用哪一个啦,并没有要求) 可别被这些名字吓住噢,其实配置起来并不麻烦,不仅免费,而且速度可不是一般游戏本显卡能比的。掌握此类平台也会让你日后的研究工作更加便捷,一劳永逸,何乐而不为呢。

在进一步了解之前,可以先理解以下几个问题:

  • 如何将现实生活中的数据抽象为图?例如引文网络、社交网络、分子结构……
  • 我们是采用什么数据结构来完整存储一个图的信息的。
  • 图神经网络的输入和输出是什么,它的作用是什么(类似普通的神经网络)

由于graph的非结构特性,如何高效提取其中的信息一直是个大问题。直到卷积神经网络在graph上运用成功,GCN正式成为主流(见参考资料3)。

我们常说深度学习,那么它的重点应该在于深,似乎网络层数越深,提取语义信息的能力越好。但实践发现并非如此,随着深度增加,神经网络的表现并不是单增的,甚至到达一定深度后效果越来越差。这是为什么呢?

我们回到Graph领域。作为深度学习在图领域的一种范式,GCN的网络深度越深越好吗?随着深度增加会不会出现什么问题?

为了回答这些问题,我们找到了一篇经典论文Tackling Over-Smoothing for General Graph Convolutional Networks.

论文中冗杂的数学证明和理论假设大可全部跳过,重点关注他提出的几个结论性论述:

  • 过平滑是什么?为什么GCN加深会导致过平滑?
  • 文中提出的DropEdge机制是如何工作的?能概述即可。
  • TABLE 2 的实验结果说明了什么?(随深度增加,Original和DropEdge的accuracy变化情况)

题目要求

为了更好体会过平滑的影响,我们来复现论文中的一部分实验吧!

没有完全看懂这篇论文也不必担心,明白它大概在做什么便足够。

  1. 弄懂GCN里面的几个比较常见的数据集(论文中采用了三个引文网络数据集)。我们后续的实验在Cora数据集上开展,请尽量搞懂原始数据集里面的 ‘y’ , ‘ty’ , ‘ally’ , ‘x’ , ‘tx’ , ‘allx’ , ‘graph’ 是什么。(需要离散数学中图论的一点点知识)
  2. 基于GCN的节点分类. 理解GCN的框架和代码结构,这是下面实验的基础。
  3. 在Cora数据集上,网络采用Original GCN进行实验,通过修改GCN层数,类似TABLE 2中探究GCN深度对节点分类准确率的影响。
  4. 同样在Cora数据集上,探究加入DropEdge机制后,GCN深度对准确率的影响。

进阶要求

(不得不说这次AI模块的题量有点大,如果你成功做到了这已经非常不错了orz,以下部分为选做

如果上述要求都轻松完成的话,不妨让我们做些进一步的探究:

  1. 解决过平滑问题的研究其实一直在进行,尝试调研还有哪些研究过平滑问题的paper,简述他们的method。
  2. Simple and Deep Graph Convolutional Networks. 这篇文章提出的GCNII方法基本上解决了网络层数加深导致的过平滑问题。同样尝试在Cora数据集上复现它的实验,并简述它的模型结构。

提交内容

  1. 包含但不限于——对题目要求中各个问题回答的markdown文件,希望能看到你的思考。
  2. 复现论文实验的源代码。
  3. 实验结果的记录表格,并将你的结论记录在markdown文件中。
  4. 上述文件统一在一个名为Task2_3的文件夹中。

参考资料

TIPS

  • 有很多功能强大的库函数,善于使用他们来减少代码量。
  • 参考资料非常有用,同时也要善用搜索引擎,提高自己检索信息的能力。
  • 整体代码量其实很小,重在自己的理解与思考,加油吧少年!

NOTICE

万事开头难,初看可能觉得满篇是不熟悉的名词,一旦入门就会发现并没有那么高深。努力学习,认真答题,我们会看到你的态度!

如果大一同学觉得题目有点难,欢迎私信我要些提示,不要放弃😭;

关于题目有任何疑问可以联系我:3175595221@qq.com;

同时也感谢郑嘉睦和杨欣瑞同学的友情参与,对Field2有问题的可以联系:2944334243@qq.com

#9 数据库

一、初识数据库

小fufu是一只可爱的fufu。但在平时繁重的课业995之余,她每周末还要给实验室打工而不能出来玩。

今天,老板又给了她一个任务——将十万条计算机中的数据进行管理和一些简单操作,并且要尽可能快。

小fufu脸上的笑容逐渐消失,但她想起来她哥曾经说过的话:

当你有一条数据时,你可以把它记在脑子里;

当你有十条数据时,你可以把它记在纸条上;

当你有百条数据时,你可以把它记在小本上;

当你有万条数据时,你开始考虑用计算机了;

当你面对更多数据,你需要一个更强大的东西——数据库;

请自行下载并配置好一种数据库(如MySQL或Postgresql),并自行测试若干语句以确保配置成功。

记录下你的完成过程和遇到的问题及解决方案

二、使用数据库

小fufu下载并配置好了数据库,但是新的问题来了——她不会用。

面对这个陌生的软件,fufu陷入了沉思。

但这个时候,她又想起了那个男人的一句话——当你面对一个崭新的问题时,请RTFM*(Read The Friendly Manual)*

于是她选择上b站搜索自己喜欢的网课,并顺利完成了实验室的任务,可以出去玩啦!

请自行寻找网课或教材,学习SQL语句的使用方法,然后完成以下任务:

开发一个房产信息管理系统实现居民的房产信息管理。 在该房产信息管理系统中, 请设计一个数据库 EstateDB,其中包括业主表(Owner) 、 房产表(Estate) 、 产权登记表(Registration) 。 各数据表的字段结构定义见下表

以上数据表定义了各表的字段组成、 字段名称、 字段编码、 字段数据类型、 字段数据是否允许空及属性列的约束等信息, 并确定了数据库表结构及其数据完整性约束。 编写SQL语句完成对该数据库创建与数据操作处理, 具体要求如下。
(1) 编写并运行SQL语句, 创建数据库EstateDB。
(2) 编写并运行SQL语句, 在数据库EstateDB中创建上述3个数据库表, 并定义其完整性约束。 (3) 准备样本数据, 编写并运行SQL语句, 在上述3个数据库表中添加数据。
(4) 编写并运行SQL语句, 查询类别为“商铺” 的房产信息。
(5) 编写并运行SQL语句, 查询竣工日期为2018年12月1日后, 产权面积90平方米以上的“住宅” 的房产信息。
(6) 编写并运行SQL语句, 查询个人在各地购买住宅两套以上的业主基本信息。
(7) 编写并运行SQL语句, 查询个人在特定城市购买住宅两套以上的业主基本信息。
(8) 编写并运行SQL语句, 统计2018年度某城市的各类房产销售面积。
(9) 编写并运行SQL语句, 统计2018年度某城市的各类房产销售金额。
(10) 创建SQL视图, 通过视图查询指定身份证号下, 该业主的购置房产信息(房产编号、 房产名称、 房产类型、 产权面积、 购买金额、 购买日期、 房产楼盘、 房产城市) , 并按日期降序排列。 (11) 创建SQL视图, 分组统计2018年度各城市的住宅销售套数与总销售金额。

请记录下学习笔记、解题的过程以及心得,如果你探索了更多类型的SQL语句,你会获得分数的奖励。

三、研究数据库(大一同学选做)

在经历过这次的学习后,小fufu发现数据库是一个非常有用的东西。

出于好奇和对知识的热忱,小fufu决定继续深入了解。

于是,fufu向哥哥求助。

但是,那个男人非常不讲武德的甩给她一篇论文,并说——

“看懂了这篇论文再来找我”

小fufu很生气,你能帮帮她吗?

持久化键值(KV)存储采用LSM树作为管理KV对的核心数据结构,但存在较严重的写入和读取放大问题。现有对LSM树的优化通常会在设计上做出一定取舍,无法同时实现写入,读取和范围查询的性能提升。 为了解决该问题,DiffKV基于KV分离,差异化管理Key和Value的有序性。 DiffKV使用传统的LSM树以完全有序来管理Key,同时以松耦合协同的方式管理Value,使得Value具有按需部分有序的性质以维持高效的范围查询性能。

请阅读以下论文,并完成学习笔记。

https://www.usenix.org/conference/atc21/presentation/li-yongkun

友情提示:

开始时你可能会觉得很困难,但是请坚持下去。

因为在这个过程中遇到的一切困难,都是你未来的宝贵财富。

如果进入了面试,你的面试内容将会是准备一个15分钟以内的PPT,并向我们讲解这篇工作的内容。

#10 网络安全

写个背景

盘仔刚从坑里爬出来,感叹到:“这里怎么这么多坑。”说罢,盘仔走向下一个集装箱。这个集装箱里放了世界上最好的语言,盘仔在其中玩得不亦乐乎。走出这个端口,盘仔惊呼:“这就是CTF!”

做点什么

你可能会问:

什么是ctf?

有什么靶场平台?

有推荐的书籍吗?

  • 《白帽子讲Web安全》: 是很全面的一本好书涉及的方面比较全,在对应的文件夹中附带了一些思维导图,可以帮助来阅读这本书。

  • 《Web安全深度剖析》 :这本书主要是对各种类型的web安全漏洞做了介绍,并且也涵盖了渗透测试手法,很基础和实践的一本书。

  • 《CTF特训营:技术详解,解题方法与竞赛技巧》,《从0到1:CTFer成长之路》:都是打CTF能看的书,前面那本我忘了,后面那本是NU1L战队写的。

  • 《内网安全攻防:渗透测试实战指南》:打内网看的。

  • 《黑客秘笈:渗透测试使用指南》:也是关于渗透测试讲的很全面的一本书。

  • 《加密与解密》:二进制方向必看书,问谁基本都会推荐的。

  • 《Machine Learning and Security》:比较系统的介绍了机器学习和安全之间的联系和实操。

  • 《数据驱动安全》:安全数据分析入门。

题目在哪

AegisStudio(网站先不上,后续可能有改动)

可以来群里问问噢: 771785252

先恰个 签到题 ,让自己 熟(榜)悉(上)一(有)下(名)