2019 焦糖工作室招新

焦糖工作室?能吃吗?

焦糖工作室是一个由电子科技大学学生组成的学生技术团队,致力于弥补学院不能提供给大家的技术教育,使每个同学获得更好的发展机遇。

工作室的生命周期

焦糖工作室固定产出2个成形项目/每学年,每个项目的生命周期为两年(或更长)。每个项目一般在参与成员大二上立项,在大二下的各类比赛中不断完善,在大三上交给新一届的大二同学进行迭代。

为什么要举办这样的招新技术马拉松?

通过精心设计的技术马拉松路线,帮助大一、大二的同学掌握基本技能,并探索自己感兴趣的方向,更快走出第一步。


规则

  • 完成题目后可以提交至 recruit@jotang.party xyzhang626@foxmail.com ,邮件主题格式: 题目序号-姓名 。 例如: #2-曹勇聪。截止日期为 2019.10.22 PM 22:00
  • 题目可以多次提交,后续提交的结果会覆盖之前的。
  • 如果需要与我们交流(比如题目太简单了,题目出现错误等等),请同样发送邮件到上述邮箱。

题目类型

  • 科普福利向(面向萌新),如年年都有的科学上网、搭博客等,偏教程风格。
  • 代码技能向(面向有一定基础的同学),包括各个方向需要掌握的技能,偏实战风格。

题目索引

科普福利向:

翻墙:#0 你好!焦糖。
Git使用:#1 啥是Git?
语言学习:#2 一起来学 Python 吧!
产品设计:#4 甲方爸爸他又来啦!
Linux: #5 谁来救救我的 Linux(Kali)
开源:#12 开源正在改变世界,Pull Request 吧!

代码技术向:

语言学习:#3 来,跟我一起念,PHPJava天下第一
经典算法:#6 一起来学算法吧!
后端:#7来,跟我一起念, JavaScript Python天下第一
爬虫:#8 老司机必备技能!!!让爬虫来解放你的双手:)
网络安全:#9 入狱成为正义使者的第一步
前端:#10 前端!你的撩妹撩汉好帮手
脚本:#11 脚本是什么黄牛必须死!
NLP:#14 来一起当数据科学家吧~
计算机视觉:#13 计算机有眼睛吗
开源:#12 开源正在改变世界,Pull Request 吧!

1 Like

#0 你好!焦糖。

Let’s Warm Up!

你好,很高兴见到你!这是 JoTang Studio 招新的预热题目!焦糖工作室为 2019 级的同学精心准备了一系列的兴趣引导题目。请等一下!不要担心,这些题目难度已经过严谨考虑以及调整,并且不需要全部完成。焦糖希望,通过这些题目,你能够初探信息与软件工程的精妙之处,并且发现自己喜欢的方向进行更深入的探索。

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

不慌,作为萌新友好型工作室,我们会先带你点亮前置技能点。


搜索

对于不同领域的问题,需要灵活运用不同的搜索引擎。
比如我们推荐使用 Google 作为通用搜索引擎,使用必应/百度作为中文搜索引擎。
但除此之外,我们也可以发起针对性的搜索。
例如:对于 Error/Bug,使用 Stackoverflow/Github issue 来搜索。
如果你对于“为什么无法访问 Google”有疑问,欢迎看看我们为你准备的科普文档:深入了解GFW.pdf (1.1 MB)

提问

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

任务

  1. 在十一长假中获得计算机的使用权。
  2. F**k the GFW.(获取外网访问权限)
  3. 闷声发大财,本题无需提交。

划不重点

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

#1 啥是Git?

背景

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

在你还在写 C 语言习题的时候可能很难意识到 Git 的作用,因为每一道习题只对应一段代码,并且只有你一个人在编辑(一般也只有你一个人会看),这时使用 Git 很难让你有什么颠覆性的体验。但是对于一个多人参与的项目来说,没有版本控制工具是难以想象的。想象一下下面这些场景:

  • 当你需要编辑一个文件时,如果不想产生冲突,其他人需要避免操作这个文件,那么多人协作事实上被降格为了小范围内的单线程操作。

  • 当对方修改了项目后,你也很难准确地得知修改的位置,和其对你目前任务可能造成的影响。

  • 当你的更改需要进行取舍的时候,可能需要在多个版本的完整代码中比对,这无疑令人绝望。

  • 当你进行的更改导致了严重的bug,或是不得不放弃,你也很难快速地回溯到原先的状态。

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

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

准备

我们推荐看看 Git-Tower 这份精美的教程(反正不要钱)。

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

有时你会对许多命令的作用感到困惑,比如 rebase,那么你可以试试这个有趣的沙盒式教程 ——

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

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

任务

  1. 掌握 Git 的基本操作。
  2. 如果你还没有 Github 账号,注册一个。可以顺便把 Github Student Developer Pack领了,还不懂是什么的话,可以看看我们以前写的攻略。
    https://d.jotang.party/t/topic/153/3
  3. (选做)如果你还没有使用过 Gituhb,在 Github 或类似平台上创建一个仓库来管理你的日常练习代码。比如C语言习题等。
  4. (选做)在 Github 中创建一个 repo,随意 commit 直到具有 learngitbranching.js 里 level advanced1(多次 Rebase)的起始分支结构,然后完成这个关卡的目标并 push。
  5. 随便写点什么并发送到 recruit@jotang.party(记得附上 Github ID!)。
  6. (选做)有自己的博客是一件多么令人兴奋的事情啊~ 如果你想通过GitHub 免费搭建一个博客,那么你可以试试下面这个教程里面写的博客搭建指南~

https://www.ezlippi.com/blog/2015/03/github-pages-blog.html

如果你想搭建一个包揽前后台以及数据库的动态页面博客,不妨自行进行更多的探索?
可以参考参考这篇 Django博客教程

题外话

  • 不要等到需要参与项目了才开始慢慢 Google 踩坑。
  • 不使用的话,这些命令很快就会忘了。
  • 希望你能继续探索 Github 这个世界上最大的同性交友平台开发者社区,没事多逛逛 Trending ,star 些你感兴趣的项目。

#2 一起来学 Python 吧!

背景

从某种意义上讲,编程就是人和计算机沟通的过程,因此选择一门高效的沟通语言是十分有必要的。如果你还没有掌握一门沟通语言,我们推荐你学习 Python 这门简洁优雅,可读性较高的语言作为你的入门语言。

题目内容

我们推荐你以实践的方式学习 Python 语言,并鼓励你记录下学习过程中的感悟(作为加分项)。

如果你对编程还没有什么概念,推荐阅读: 入门指南

任务一

熟悉 Python 的语法,直到能顺利执行任务二。
关于 Python 的包管理,建议查看 Anaconda
IDE方面,可以试试基于网页,能快速展现代码运行结果的 Jupyter Notebook

如果你手头暂时没有合适的资料,那么:

任务二

从下面的三个方向中,任选一个完成

1. ~(・`ェ´・)つ来做有趣的字符画吧!

1. 怎么样分辨两篇文章是否相似呢?

题目背景

鉴于收到了两份一模一样的(前)第一题代码,所以白猫学长决定想出一个好的办法去衡量两份文件的相似度。

题目内容

两篇英文短文:test.rar (2.7 KB)

步骤一

统计两篇文章中的出现次数前10的词。
加分项:用可视化的方式表示出来(参考方向二)。

步骤二(无须代码)

思考如何量化比较两篇文章的相似程度,并建立公式,思考如何确定公式的有效性。
例如:

定义:
same_words 为两篇文章单词出现次数前十中相同的词数
similarity = same_words / 10

显然这是一个非常不精确的定义,但是可以在此基础上进行改良。
提示:哪些因素能说明两篇文章相似性较强呢。

此步骤无须写代码,用任何方式表达清楚你的意思即可,推荐使用数学符号(数学语言)。
但是代码实现作为加分项

你需要提交
  • 源码 + demo (如果你在网上找到这道题的源码,请写尽量多的注释,否则会在面试遇到麻烦)

2. 数据可视化

题目背景

在海量数据时代,把数据绘制成可读性更高的图形可能更有利于我们从数据中得到有用的信息。

Seaborn 是在 Matplotlib 上继续封装的 Python 绘图库,并自带数据回归功能,建议尝试。
效果如图:image

任务内容

学习 Seaborn (或其他任意 Python 绘图库),做出一些你觉得满意的数据视图。Jupyter Notebook 快速迭代的特点可能有利于你完成此任务。

参考资料(可以忽略一些调色的细节):

提交要求

Jupyter Notebook 保存的 .ipynb 文件。

3. 机器学习入门:

题目背景

机器学习的火爆似乎无需多言

题目内容

FBI WARNING: 这远远不是机器学习的全部,但是可以让你尽快的对机器学习有所了解。

  1. 观看 机器学习理论教程
  2. 配置 Keras 运行环境
  3. 观看 代码教学
  4. 用任何模型实现对MNIST数据集的分类

注意理解机器学习中的各种术语。

提交内容

代码

#3 来,跟我一起念,PHP Java天下第一

题目背景

老司机带带我,我要打飞机啊

不知道00后的你有没有玩过飞机大战,对于90后的老腊肉可都是满满的回忆嘤嘤嘤(乱入?打死!)

前几天正纠结出个啥题目好,忽然看到旁边大兄弟全神贯注地玩着飞机大战,灵机一动,不如我们也自己用Java写一个飞机大战吧?嘿嘿嘿这个一定很好玩(悄悄露出了不怀好意的微笑)~~ 话不多说,一起冲冲冲!

题目内容

任务一

既然要自己写一款飞机大战,你肯定得先知道飞机大战怎么玩噻,这里建议没玩过的萌新先去4399玩一下(难道真有没玩过的???)

如果你已经清楚了飞机大战的游戏机制,那么你可以开始尝试实现以下需求了:

  • 创建一个游戏框并为你的游戏添加一张好看的背景图片(相信你也不希望在纯白色的“太空”中开飞机吧)
  • 添加一架玩家飞机,玩家飞机可自动发射子弹并可被玩家通过上下左右键操控
  • 添加敌方飞机,敌机在游戏框上方随机生成并向玩家飞机移动,可以发射子弹攻击玩家飞机
  • 玩家飞机与敌方飞机均有生命值,受到子弹攻击会减少生命值,敌机生命值清零则消失,玩家飞机生命值清零则游戏结束
  • 添加碰撞检测,当玩家飞机与敌机发生碰撞时游戏结束

做到这里,一款飞机大战的雏形已经完成了,快试玩一下自己写的游戏吧!

任务二

怎么样,玩着自己写的游戏是不是感觉特别爽,特别有成就感?不过你是不是总感觉自己写的飞机大战少了点什么?不要急,我们继续往下走!

我大胆地猜测你也是一个完美主义者,你一定不会容忍自己写的游戏被吐槽无聊吧!如果优秀的你还学有余力,敢不敢继续接受下面的挑战(加分项,不要求全部完成):

  • 实现循环背景滚动,让背景图片能随着游戏进度不断变化
  • 添加游戏音效和开始结束界面
  • 为飞机添加爆炸效果,当玩家飞机和敌机生命值清零时发生一场华丽的爆炸(艺术就是爆炸!)
  • 引入攻击力的概念(每发子弹造成的伤害),敌机的生命值和攻击力随时间增长,玩家飞机在击毁敌机后会随机增加一定的生命值或攻击力
  • 引入积分的概念,每次击毁敌机获得积分,游戏结束后进行积分结算并设置积分排行榜
  • 增加敌机的种类,给不同种类的敌机赋予不同的属性值和攻击效果,添加BOSS敌机,添加各种有趣的BUFF
  • 充分发挥你的脑洞,发掘更多有趣的玩法,改善玩家的游戏体验

做到这里,你应该已经对Java有了一定的理解,继续努力,以后JoTang的未来就交给你们了!

参考资料

其他说明

  • 游戏需要的各种素材建议使用无背景的png图片
  • 完成后请提交项目源代码和详细的文档,代码中需包含注释,文档需包含学习过程和项目需求的完成情况(附截图)

#4 甲方爸爸他又来啦!

题目背景

JoTanger准备搭建一个自己的项目交流App,开启全新的焦糖2020。急需一位产品来策划一下整个项目。

神奇的甲方爸爸晓艺:“我们这个App,① 首先要有一个项目板块,在这里可以讨论立项项目,加入项目群聊,进行实时聊天;还可以新建项目,填写项目基本信息,通过审核后成为立项项目。② 还要有一个头脑风暴板块,可以在这里发帖、评论、收藏、分享等。③ 同时,作为一个相爱相杀的集体,我们需要好友系统来建立联系。④ 消息系统也不能少,群聊私聊官方鬼畜一网打尽!”

任务一

重新设计一个JoTang的Logo

  • 具有焦糖特色
  • 创新简洁,工具不限
  • 导出.PNG格式,与源文件一同提交

任务二

  1. 设计一个焦糖App,能够实现甲方的要求
  2. 需要有需求分析文档,体现软件功能、业务逻辑等
  3. 需要绘制一个简要原型,能够展现良好的交互
  4. 可以在原型基础上再进行美化和视觉设计

参考资料

其他说明

  • 完成后请提交设计源文件及导出png,还有产品文档

#5 谁来救救我的 Linux(Kali)

背景

俗话说的好,kali 学的好,牢饭吃到饱,然鹅,就当我准备开始在犯罪的边缘试探之时, kali 却给我膝盖上射了一箭——我的 Linux(Kali) 不太对劲。传说中的英雄啊,请你帮帮我吧。

Linux 是编程的一个很重要的组成部分,除去“开源/免费”这一众所周知的优势,实质上,对于程序员来说,一个可以完全掌控的系统,一个可以高度自定义的系统(以及出现问题后 google 下只有 Linux 的解决方法)或许更具吸引力。可能在刚开始上手的时候还会觉得很变扭,不过请放心,大家都是这么过来的,并且毫无疑问,你们以后会时常和它打交道。

任务

其实对于初学者,Ubuntu 之类的可能会是一个更好的选择,不过既然正好遇到了 Kali 官方镜像的这个问题,就拿来用了,Kali 具体是做什么的不重要(逃

  1. 了解什么是 Linux,学习基本的操作方法,然后 google 一下 Kali 是做啥的
  2. 安装虚拟机、双系统,或通过各种方法找到一台服务器/云服务器
  3. Kali 官方网站下载镜像文件,并成功安装到虚拟机/双系统/服务器上
  4. 安装成功之后,你会发现一些比较基本的命令,比如 apt-get update 都是无法成功执行的,请找出原因,并解决,解决的判断标准是能够成功使用 apt-get 安装软件
  5. 将你安装 Kali 的过程,以及解决上述问题的过程截图,并记录你解决问题的思路和最终的解决方法,并赋于 markdown 文件中,发送给我们

Tips

  1. 关于 markdown,这是一个非常方便的书写工具,只需学习五分钟,你就会爱上它,你可能需要花一点点时间进行学习,但它的基础语法非常简单。
  2. 这道题目的关键是用好 google,因为 google 上有完整的解决方法,如果说你无法 google 一下?解决方法是搭好梯子。(如果真的使用度娘,请谨慎参考)
  3. 更多的提示:关于 Linux 的部分,论坛内的某一个帖子里有着更详细的指导,找到它**

9.29 更新

由于各种不知名的原因,你下载的 Kali 可能不存在上述问题,在这种情况下,你需要在你的 Linux 中成功安装 git 并完成 #1 啥是Git?中必做与选做的任务(除去选做 6 ),如果选做 3 及之前的已在其他环境内完成,则只需完成选做 4 的任务,请截图并赋于 Markdown 中。
另,如果出现问题并解决了,也推荐完成一下。

#6 一起来学算法吧!

题目背景

没有背景
学习算法对于刚接触编程的小白来说也许难度会比较大,但在学习算法的过程中可以快速提高同学们的编程能力,并且培养良好的编程思维。
我们鼓励同学们使用搜索引擎来学习算法,但请不要直接将网上的题解直接复制提交,我们也将在后续的考核中判断大家是否真正理解了这些算法。同时比起题目的完成度,我们更关心大家的学习态度。

题目内容

任务一:搜索

大家一定都玩过走迷宫,现在我们可以通过编程来让计算机帮我们设计走出迷宫的方案和最短通关路径,只需要编写一个小程序就能将它应用在所有的迷宫上。
给定一个n*m大小的01方格迷宫,其中1表示障碍,0表示允许通行,在迷宫中有上下左右四种移动方式,每次只允许移动一个方格,并且每个方格只允许经过一次,给定起点坐标和终点坐标,问:从起点到终点有几条路径,同时求出最短路径的长度。数据保证起点和终点上不会有障碍,如果路径数为0,则最短路径长度也输出0。

输入格式:
第一行n,m表示迷宫大小。
第二行起点坐标Sx,Sy。
第三行终点坐标Fx,Fy。
接下来n行是表示迷宫的01矩阵。
(1≤n,m≤10,同一行中的不同数据用一个空格隔开)

输出格式:
第一行输出从起点坐标到终点坐标的路径总数,第二行输出最短路径的长度。(路径长度为经过的格子总数,起点也计入路径)

输入样例:
3 3
1 1
2 3
0 1 1
0 0 0
1 0 0
输出样例:
2
4

参考资料:

google,百度

提示:

1.迷宫问题一般采用深度优先搜索和广度优先搜索两种方法。
3.(加分项)有能力的同学可以分别使用深度优先搜索和广度优先搜索编写两个程序提交。

任务二:动态规划

萌新劝退预警!!!
今年的中秋计划被暴雨冲毁了,zfy被迫留守在寝室中,百无聊赖之际zfy开发了一种兔子棋,给定一个n格直线棋盘,每一个格子上写着一个非负的整数表示在这个格子上的萝卜数量,第一格为起点,第n格为终点,玩家可以通过使用跳跃卡片来控制兔子从起点逐步跳到终点。

跳跃卡片共有m张,跳跃卡片共有四种(给定的m张跳跃卡片中不一定包含所有的四种卡片),每种卡片上分别标有1,2,3,4四个数字之一,使用这种卡片后,兔子将向前跳跃相应的格子数。游戏中,玩家每次需要从所有的跳跃卡片中选择一张之前没有使用过的跳跃卡片,控制兔子跳跃前进相应的格子数。

游戏中,兔子自动获得起点格子的萝卜,并且在后续的跳跃过程中每到达一个格子,就得到该格子相应的萝卜。兔子最终得到的萝卜数量就是兔子从起点到终点过程中到过的所有格子的萝卜总和。

可以看出,不同的卡片使用顺序会影响最终兔子得到的萝卜总数,现在,告诉你棋盘上每个格子上的萝卜数量和所有的跳跃卡片,你能计算出兔子最多能得到的萝卜数量吗?
时间限制:1.00s 空间限制:125.00MB

输入格式:
第一行两个正整数n,m表示棋盘长度和跳跃卡片总数。
第二行n个非负整数 A1,A2,…,An,其中Ai表示第i个格子上的萝卜数量。
第三行m个整数,B1,B2,…,Bm,分别表示m张跳跃卡片上的数字。
同一行中的不同数据用一个空格隔开。
(1≤n≤350,1≤m≤120,0≤Ai≤100,1≤Bi≤4,并且对于四种跳跃卡片,每种跳跃卡片的张数不会超过40)

输出格式:
一个整数表示兔子最多能得到的萝卜数量。

输入样例:
9 5
6 10 14 2 8 8 18 5 17
1 3 1 2 1
输出样例:
73

参考资料:

google,百度

提示:

1.样例中跳跃卡片的使用顺序为1,1,3,1,2,最终得到的萝卜数6+10+14+8+18+17=73。
2.本题难度较大,对于新手不作要求。
3.当所有跳跃卡片用完时,兔子恰好能跳跃到终点。
4.即使没有完成这一题,也可以提交文档来记录你的学习过程和想法。(有加分)

说明:

1.建议同学们在编程的过程中能够在关键代码部分加上注释记录代码功能,以便我们理解你的代码,同时这也是一种良好的编程习惯。
2.请同学们用C/C++编写,任务一和任务二各有10个测试点,按照过的测试点数量给分。写完将源代码发到招新邮箱,同时如果有题解思路/学习过程文档将作为加分项。
3.请同学们不要尝试抄他人题解,独立完成,这将有利于之后的代码细节问答环节。

#7来,跟我一起念, JavaScript Python天下第一

背景

从一开始的出前端题到出Linux题到出后端题,过于混乱的需求(其实是我没看清)让我无所适从,既然如此那么就来一锅乱炖吧。在此之前,Python天下第一!

如果要说前端这一领域是什么时候真正起飞的,那么应该从前后端分离开始讲起(以下省略 1w 字,有兴趣的同学可以自己去了解一下前端的发展历程)。在这期间,Web API 的这一概念起到了至关重要的作用,这道题目就是想让大家熟悉前后端分离这一概念,并亲手触摸常见的 Web API。(所以说本来是一道 python 题为什么会扯到前端啊!)

什么是 Web API?
在我们了解什么是Web API之前,让我们看看什么是API(应用程序编程接口)。
根据维基百科的API定义:在计算机编程中,应用程序编程接口(API)是一组用于构建软件和应用程序的子例程定义,协议和工具。
简单来说,API 是某种接口,它具有一组允许程序员访问应用程序,操作系统或其他服务的特定功能或数据的功能。
Web API 顾名思义,是一个可以使用 HTTP 协议访问的 Web 上的API。这是一个概念,而不是一种技术。我们可以使用不同的技术(如 Java,.NET 等)构建 Web API。例如,Twitter 的 REST API提供对读写数据的编程访问,使用它可以将 twitter 的功能集成到我们自己的应用程序中。

相比 Java,Python 更为轻巧的特性可以让初学者在更短的时间内搭建一个可用的 Web API 服务器;相比 Go 其丰富的框架与库可以省去一大笔自己动手的额外开销,综上,Python 天下第一(Q.E.D.)。

任务

我们先从比较容易理解的 RESTful API 开始。

  1. 查询 RESTful API 的设计原则。虽说在实际应用过程中很有可能会因为种种原因改变设计,但因为这道题目不涉及复杂场景,我们希望你的最终成果能够完全遵从设计原则
  2. 搭建一个 Web API 服务器。如果你有其他语言的基础,你完全可以使用其他语言完成本道题目,如果没有,那么我推荐使用 Python-Flask 完成本道题目。Django 默认采用的是其自带的模板系统,可能对于初学者不太方便进行更改,并搭建 Web API 服务器。至于 Flask 是什么,应该怎么用,请阅读 Flask 官方文档
  3. 具体要求:
  • 将 API 部署在专用域名或主域名之下,如果是本机,即 localhost 或 127.0.0.1:XXXX
  • 你的 API 至少应有 GET 和 POST 两种方法
  • 不需要搭建数据库,即你可以在 Flask 中使用自己声明的变量或外部 Json 文件进行应答
  • 最终的成果应该是你可以通过浏览器(或 Postman 等工具)正常使用 API
  • 请将你搭建 Web API 服务器的过程纪录,并将最终结果截图,整合到 markdown 中发送给我们。

Tips

  1. 如果你拥有一个服务器/云服务器,可以尝试部署上去,并将链接发送给我们,这项将大大加分
  2. 如果你厌倦了 RESTful API, Graphql 也同样可以
  3. 你可以拒绝框架,完全手撸
  4. 本题可能会存在各种各样的问题,请谷歌一个或多个足够靠谱的指南,并详细阅读 Flask 官方文档,RESTful API 设计风格,遇到问题积极谷歌,实在不会可以直接联系我(QQ:869784897),我们鼓励遇到问题积极求助,但如果是可以很方便在网络上找到解决方法的问题我将拒绝回答并拉黑

#8 老司机必备技能!!!让爬虫来解放你的双手:)

背景

当你在P站看到一个可爱画师小姐姐的图片真的张张戳中你的萌点,当你明明被高木太太喂了一勺又一勺的狗粮却觉得还不够还想吃同人图的时候,当你发现了某个快乐的小网站想要一键解放双手的时候, 当你参加数学建模发现题目要你自己找数据的时候(微笑脸)我想你会需要它的

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

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

任务

首先,编程语言,建议python!爬虫也是入门Python最好的方式(之一)

  1. 爬取图片 :作为一枚咸鱼coser,安利个我超级喜欢的coser小姐姐啊 A-chan <3 (Itsuki) 那么亲爱的冒险者啊,你的任务就是按cos过的角色用爬虫爬取她所有的cos图片 选出你最喜欢的几张我们可以交流一下

  2. 爬取新闻 :作为一名优秀的信软学子,让我们来更深刻地了解一下信软的新闻与公告吧。那么优秀的成电学子啊,你的任务就是爬取信软官网学生科和教务科分别的最近200条公告并保存在数据库中

  3. 具体要求:

  • 学习 Python 包并实现基本的爬虫过程,题1爬取图片请直接使用库函数手撸;
  • 学习 Scrapy框架,搭建工程化爬虫,题2爬取新闻请使用Scrapy框架完成;
  • 学习数据的存储,题1可以直接保存在本地,题2请将结果保存在数据库中;
  • 请将尝试爬取的过程纪录整合到markdown中,连同代码github链接和爬到的数据,打包发送给我们。

Tips

  1. 题1的话,Python一般 requestsrebs4库 这三个即可满足要求 ;
  2. 题2的话,实在不愿意使用 Scrapy 框架也可以使用别的框架的,但请说明理由 ;
  3. 建议详细阅读相关文档,遇到问题积极谷歌,实在不行可以私我,但请体现自己思考。
    (“如果是可以很方便在网络上找到解决方法的问题我将拒绝回答 并拉黑”)

#9 成为正义使者 ( 入狱 ) 的第一步

背景

做题前必看

《刑法》第二百八十六条 违反国家规定,对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统不能正常运行,后果严重的,处五年以下有期徒刑或者拘役;后果特别严重的,处五年以上有期徒刑。违反国家规定,对计算机信息系统中存储、处理或者传输的数据和应用程序进行删除、修改、增加的操作,后果严重的,依照前款的规定处罚。故意制作、传播计算机病毒等破坏性程序,影响计算机系统正常运行,后果严重的,依照第一款的规定处罚。

注意!切勿将技术用于非法用途!

宿舍楼里有很多 WiFi 热点,想知道他们的密码是多少去试一下他们的网有多快;寝室的人外放某音想把他网断了不让他看;无聊的时候偷看室友电脑摄像头看别人电脑里的资料;你度娘了一下,发现大家都在说:用 Kali 就对了。

Kali 是基于 Debian 的 Linux 发行版,它集合了一些渗透和审计的工具方便我们做安全测试 ( 发起攻击 )

什么是 Linux ?看一下上面的题目:

Linux 是编程的一个很重要的组成部分,除去“开源/免费”这一众所周知的优势,实质上,对于程序员来说,一个可以完全掌控的系统,一个可以高度自定义的系统(以及出现问题后 google 下只有 Linux 的解决方法)或许更具吸引力。可能在刚开始上手的时候还会觉得很变扭,不过请放心,大家都是这么过来的,并且毫无疑问,你们以后会时常和它打交道。

任务

我们在进行安全测试 ( 发起攻击 ) 时肯定希望越低调越好,同时为了应对不同的网络环境以及提高便携性,制作一个能从 U盘 启动随插随用的系统必不可少 ( 更有自己是黑客的感觉 ) ,这样也解决了在虚拟机下想要进行 WiFi 扫描需要额外购置USB网卡 ( 大坑 ) 的问题。

  1. 在一个 可移动设备上 ( 譬如 U盘 ) 上,安装好 Persistence Kali Live 并启动运行

  2. 了解在 Linux 系统下的基本操作

  3. 使用 Kali 来破解 WiFi 密码

  4. 使用 Kali 进行局域网内的渗透

  5. 记录你在操作过程中遇到的困难以及填坑的方法

  6. 记录你的 破解/渗透 成果 ( 得到的密码/在被渗透主机你能执行什么级别的操作 )

  7. 上述的两项操作建议采用 Markdown 标记语言记录并发送给我们

Tips

  1. 在制作 Persistence Kali Live 时,可能会遇到硬盘分区的知识,实现的方法很多,挑熟悉的来

  2. 破解 WiFi 密码的方式有很多,你可以分析具体的情景,采取不同的方法 ( 暴力破解,钓鱼WiFi )

  3. 进行渗透时首先应该了解被渗透主机的具体情况 ( 系统类型,系统版本,存在的漏洞 ) 选取攻击方法

  4. 善于利用 Kali 中集成的工具包,Google 它们能做什么

再次提醒:点到即止。

2 Likes

#10 前端!你的 撩妹 撩汉好帮手

题目背景

总有人提到什么程序员鄙视链,做C的看不起做C++的,做C++的看不起做Java的,做Java的看不起做.net的,这些所有的都看不起搞前端的。NO!NO!NO!这不是真的,前端并不是你想象的美工师,前端工程师在工作中更接近于用户哦,前端也是有技术含量的(大声) 当然啦,我们也可以充分利用前端这一 美工性质 交互性质,构建出一个视觉+使用感都hin好的小项目。噔噔噔!没错!我们就是要用自己的技术来给自己的妹子或者汉子表达爱意。

image

任务

说到撩妹,我们当然要从最简单的告白网页开始了

  1. 构建一个告白网页,向你的男神女神发起进攻 。这是一个开放性任务,你可以依据你自己的审美与习惯,通过对HTML与CSS的灵活运用设计页面大致框架,再通过js的应用,添加动态功能,精细化页面。(男神女神也可以是你的爱豆或纸片人)
  2. 构建一个恋爱日历 。利用现在流行的前端框架(react,vue.js,angular…)构建一个日历组件,在这个日历组件中记录你们的纪念日or幻想纪念日,标注待做事件等等,可以灵活切换每日视图或每月试图,当然如果有更好的展示方式,也可以个性化设计。再次当然,如果你拒绝框架,你也可以纯原始js,加油嗷!

参考资料

#11 脚本是什么黄牛必须死!

背景

1.在一天辛勤的学习之后,工作室某同学打开了“痒痒鼠”(阴阳师)电脑客户端准备放松一下,作为一个挂机游戏,每次刷御魂(某种材料)都会点到手抖,于是他灵机一动,打算写一个游戏辅助解放双手…

PS:有快乐yys的可以恰个好友

2.该同学很喜欢林俊杰,刚好JJ最近在成都有演唱会,在大麦网读秒抢票的过程中仍然在1s过后显示 缺票登记 ,怎么才能打败黄牛呢?

题目内容

任务一

  • 了解一下什么是脚本语言,有哪些脚本语言,和编程语言有什么区别
  • 如果必须有)在Linux平台下进行简单的shell编程,并完成一个课堂点名的shell脚本
    1. 该脚本,需要提前准备一个 user.txt 文件
    2. 该文件中需要包含所有姓名的信息,一行一个姓名,脚本每次随机显示一个姓名

任务二

  • 当然一些脚本语言能解决的问题是很局限的,这时你就需要使用使用更强大的脚本语言python啦!
  • 根据自己的喜好对任意游戏软件编写一个“辅助脚本”或者对任意抢票网站(如大麦网、美团、12306等)编写一个“抢票神器”
  • 思考一下怎么能够有效规避游戏或是网站的反“外挂”机制?

Tips

1.任务一如果懒的话可以用Microsoft Store的WSL)

2.确定自己所写脚本逻辑(比如如何定位游戏按钮、如何判定游戏结束?怎么确定抢票的信息和时间?)

3.上网搜索自己所需要用到的python库或者API,如果有问题可阅读官方文档

4.不一定要完成所有功能,有越完备的功能越好,最好用markdown记录你学习的过程

#12 开源正在改变世界,Pull Request 吧!

背景

当你享受着开源软件带来的便利,是否有想过给开源社区作出贡献呢?

每年的 Hacktoberfest 是一个很好的机会,帮助你跨出走进开源社区的第一步。

Hacktoberfest 是一个由 DigitalOcean 和 Dev 主办的,为期一个月的开源软件庆典。

按照官网的指引注册后,在1个月内向任意的 Github 公共存储库提交4个PR,即可获得一件跨洋而来的酷炫 T恤。

除此之外,如果你参与贡献的项目来自某些同样参与了 Hacktoberfest 活动的公司,那么你还将同时获得他们的其他奖品!比如 Microsoft 的就是一件印着 VSCode Github 项目页的T恤。

想想看你可以为 Github 上你感兴趣的项目做什么?提交一个 feature? 修复一个 bug?
不不,远远不止,只要以 PR 的形式参与开源项目的完善都是被认可的,哪怕你只是改了 README 里的一个typo。

任务:

参加 Hacktoberfest 2019,能拿到T恤就更好啦

特别提醒

注意确认好尺码

#13 计算机有眼睛吗?

背景

视觉是人类的重要感官,作为人类的好帮手,计算机是怎样处理视觉信息的呢?

通过搜索引擎,对下面的问题进行简答:

  • 计算机中的二维图像的是怎么存储的?计算机是怎样显示它们的?
  • 作为一名 programmer,我们可以通过哪些途径读取它们?

通过搜索引擎,对下面的问题进行简答和编码,并记录你的学习过程:

  • 图片马赛克的实现原理是什么?选择一门语言,尝试给任意一张图片的任意区域打上马赛克。
  • 如何在放大一张图片的同时尽量保证清晰度?了解线性插值,选择一门语言,尝试提高任意一张图片的分辨率。

参考资料

任一搜索引擎。

补充说明

  • 本题的意向在于考察学习能力和信息搜集能力,所以如何用好搜索引擎是本题的关键。

  • 本题不要求全部完成,学习记录为主要评分对象。

  • 关于代码,不反对任何注明出处的 copy。同时鼓励原创,这将有利于面试中你对代码细节的回答。

#14 来一起当数据科学家吧~

题目背景

NLP (Natural Language Processing) 是人工智能(AI)的一个子领域。而自然语言是人类智慧的结晶,无论是网上还是线下,每天都产生着海量的自然语言信息(新闻报道?病患诊疗单?英语阅读理解?) ,总之anywhere。。对它们进行处理是AI中最为困难的问题之一,各种格式的文本信息乱七八糟 但从中获得的潜在信息简直就是宝藏(知识库)啊,智能问答机器人就是基于知识库来进行人机交互的。总之用途多多工资还多
想了想这次的任务,那咱们就来了解如何进行机器翻译吧

题目内容

任务1:

  • 如何将自然语言表示为机器能够识别的数字啊??了解一下词向量,One-Hot,Word2Vec。
  • 如何将源语言映射为目标语言(假设从英语到法语)?了解一下Sep2Sep模型(编码器-解码器),同时还需要了解递归神经网络(LSTM等)
  • 整个模型的训练过程如何进行?了解深度学习程序运行的整个过程

任务2:

  • 学习编程语言Python,语法简单,七天快速入门~
  • 选用并学习任意深度框架来实现任务1,比如Tensorflow、Pytorch、Keras、Caffe等。推荐Pytorch。。
  • 尝试在Linux下部署深度学习环境,并开始编程

需要提交:

任务就几句话,但是包含的内容巨多,能完成到哪步算哪步吧,越多越好~提交学习心得、整理的笔记,要有逻辑,面试的时候会问。能完成到编程部分就更好了~

参考资料:

  • 科普:关于NLP的应用https://yq.aliyun.com/articles/78031
    +《深度学习框架PyTorch快速开发与实战》 第十一章是本次题目的全部代码,可以参考,可以抄,前提是问你的时候,你能说出是什么意思
  • 莫烦Pytorch,Python、可视化这些都有教:https://morvanzhou.github.io
  • 斯坦福NLP课程:https://www.bilibili.com/video/av46216519

其他说明:

解决方案不限于以上的方法~