[关闭]
@AlexZFX 2018-09-23T03:29:22.000000Z 字数 5435 阅读 295

【创联】2018后台招新题

欢迎来到后台的世界

先做些简单的介绍,软件应用程序就像冰山一样。用户看到的只是应用程序的一部分——在大多数情况下——应用程序的最大部分是看不到的。这就是令人难以捉摸又神秘的“后端”(其实很瓜皮,自己练手的时候没有好看的页面很难受)。
从某些方面来说,我们这里考虑后端开发是一种不涉及创建生成用户界面的开发,这可能包括后端Web开发,可能也涉及编写API,创建库或和没有用户界面或甚至科学编程系统的系统组件一起工作。

可用来后台开发的语言有很多,Go、Java、Python、php、Scala、C++等等,各种语言都有自己的一些适用场景和各自的优缺点。

创联工作室的后台组使用的主要语言是Java。

参与选题及出题:萌涛,风Gay,文哥,付小帅,凌小贱

开启你的Java之旅

参考书籍:《Java语言程序设计(基础篇)》,《Head first Java》
参考视频:中国大学慕课翁凯老师的Java课程。imooc上的Java基础教程

以下的所有问题,你都可以通过一定的搜索来解决,但我们希望你能有自己的理解,不要只是答出了题目,毕竟后面还是要面试的(⊙o⊙)?、
大一大二的同学要求不同,基础和主线任务有一部分要循序渐进,支线任务可以作为加分手段!~

No.1 HelloWorld! (5分)

欢迎来到Java,让我们从Hello World!开始进入Java的世界吧!

  1. JDK的下载、安装与配置(建议先选择JDK1.8,JDK11即将发布,目前业界通用还处在Java8)
  2. 写好你的第一个HelloWorld程序,输出Hello World!
  3. 把程序代码在网站上发给我们吧~

知识点

No.2 IDE是个好东西 (5分)

公欲善其事,必先利其器,学习使用IDE是提升开发效率的好方法。

  1. 下载 JetBrains 家的大宝贝 Idea,进行简单的配置~(学生可以在官网上申请免费使用,验证学生邮箱即可)。
  2. 新建一个项目,在Idea的控制台根据输入的姓名,输出 Hello, xxx~。
  3. 把整个项目打包发给我们吧~。

知识点

No.3 输入输出与流程控制 (20分)

一共两道小题都要做哦

  1. 输入一个整数 1 <= n <= 20 , 输出杨辉三角的前n行
  2. 猜数字,生成一个 0 ~ 100 之间的随机整数A,用户输入 n,比较 A 与 n 的大小关系,告诉用户,直到用户猜出数字为止。(作为用户,怎样猜数字最快呐?可以在注释中写出你的想法告诉我们~)
  3. 写好之后在网站上打包提交

知识点

No.4 四则运算计算器 (15分)

  1. 完成一个简单的四则运算计算器,能实现两个整数之间的四则运算,如果有小数请保留2位输出。
  2. 考虑到一些异常情况,并作出处理。
  3. 在网站上提交你的代码~

知识点

No.5 简单的排序与递归 (25分)

  1. 了解一下冒泡排序~实现对一个数组的冒泡排序过程。
  2. 了解一下递归~ 用递归实现方法求一个数的阶乘~(这个太简单了,希望能举一反三,比如递归求解汉诺塔问题?如果你玩过九连环的话,你会发现九连环也是一种递归哦)。
  3. 打包后在网站上提交~

知识点

进击的新人们

好了,Java语言的基本语法和操作你应该都有所了解了,接下来就要比起之前稍微麻烦一点啦。

主线任务

主线任务主要是Java后台方向的需要了解的基础知识,和后台相关较大,支线任务会提供一些简单的数据结构(大二上开课)题,作为加分使用。

No.1 殇之封魔录 (40+分)

你有对象么?面向对象就有了啊!

Java是一门典型的面向对象的语言,在Java的世界里,万物都是对象。
假设你是封魔录中的英雄,你需要在封魔的过程中不断打怪升级从而走上人生巅峰,现在请你通过Java编程实现你与在路上遇到妖魔的战斗过程,我给你的分数取决于你代码的精彩程度,只要你的功能够丰富,我就敢给你打高分。(希望能尽可能体现Java面向对象的特性)
Tips: 英雄类?妖魔类?(抽象在一起?)战斗?

知识点

No.2 认识丰富的类库 (10 + 20 分 )

Java流行的原因非常多,其丰富的类库便是其中之一
1. Two Sum
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
示例

  1. 给定 nums = [2, 7, 11, 15], target = 9
  2. 因为 nums[0] + nums[1] = 2 + 7 = 9
  3. 所以返回 [0, 1]

模板代码如下

  1. class Solution {
  2. public int[] twoSum(int[] nums, int target) {
  3. }
  4. }
  1. 加分项:我知道你用循环一定可以解出这道题,但你有没有什么办法只用一次遍历就解决这个问题呢?不妨去了解一下Java提供的类库吧 (20分)~
  2. 解决之后提交源文件即可,思考过程之类的可以在注释中体现。

知识点

No.3 网络,网页相关知识 (10 分)

是时候了解一下网页相关的知识了。作为一个后端程序员,你可能不需要知道怎么把页面写的花哨,但你总该知道一个别人的请求怎么发送出来的嘛~
1. 了解Http协议相关知识,了解get,post等请求方式。
2. 学习一些html相关知识,写一个能够发送用户的账号、密码的表单页面。

知识点

No.4 Java网络请求 (80分)

知道了怎么发送请求,那Java如何处理基础的网络请求呢?
1. 学习Servlet、JSP相关知识,Tomcat的安装、配置。
2. 编写一个Servlet和JSP页面,能够收到页面发来的post请求,并将用户的账号,密码打印在控制台上,同时JSP页面展示出Hello xxx相关内容。

知识点

No.5 初识数据库~ ( 25 + 30 分)

做后端的,总是避免不了要和数据库打交道,所以先来简单的学习一下数据库的基本操作吧。

  1. 下载并安装Mysql。了解数据库、表、键的概念。
  2. 创建一个数据库,数据表,对表进行增删改查的操作,将对应的结果截图放在文档里发给我们。
  3. 加分项(30分):数据库复杂查询,用两种方式查询一张表中重复的姓名。
    示例:
Id Name
1 张三
2 李四
3 张三

根据以上的数据表,你的查询应该返回以下结果

Name
张三

知识点

No.6 Java操作数据库~ (50分)

你已经会一些简单的数据库操作了,现在不妨来试试怎么用Java操作数据库吧?

  1. 了解,学习Java操作数据库的基础库JDBC。
  2. 用Java实现在控制台中根据用户输入对数据库的增删改查操作(只要能实现简单的功能即可)。
  3. 提交你的源文件~

知识点:

No.7 数据库和网络结合!(80分)

完成了5和6,那你已经有了做一个自己网站的最基础的能力~
把他们结合起来吧~

  1. Servlet处理请求,并将前端发来的账号,密码存储到数据库中,实现一个简单的登录注册功能。
  2. 打包项目发送~

知识点

支线任务

部分数据结构简单题,后台相关的其他技能点

No.1 初识Git (50 分)

自己代码发生了哪些变化,做了哪些改动,可能写了一天就啥都不记得了,但开发过程中,想要回退到自己以前的代码怎么办呢?可见版本控制是很重要的一环。
多人合作也是开发过程中不可避免的一环,合作过程中就需要对各自的代码的同步,编辑。
所以是时候去了解学习一下优秀的Git啦。
参考教程:廖雪峰的Git教程
任务

  1. Git的基础命令和理解,不要单纯以做题为目标。
  2. 我们在Github上建立了一个付明浩小哥哥的仓库。这个仓库中只有一份ReadMe.md的文档,你需要把他fork下来,然后clone在你的本地,对文档进行修改,在新一行加上你的名字(用户名)。
  3. 然后push到你的仓库里,再向我们提供的仓库发起一个Pull Request请求,合并之后,官方仓库下的名字列表就是完成此题的人啦。(我们是手动合并,可能有些延误,提交后请不要着急)
  4. 完成之后随便提交个文件即可~

知识点

No.2 单链表 (20 + 30 分)

数组中的插入和删除好像都是一件很麻烦的事,删除一个位置上的数,就要移动很多其他的数字~
有没有什么更好的方法提高插入和删除操作的效率呢?
不妨去了解一下链表吧。和数组这样的存储结构对比学习效果更佳~

  1. 实现一个自己的链表类,包含根据数值val进行删除节点,按序插入节点,查找对应结点的操作。(20 分)
    然后解决下面这个问题~(你最起码先思考个半小时再去百度吧。。)
  2. 如何判断单链表是否有环?
  3. 如果有环的话,返回这个环的入口,否则返回NULL (30 分)
  1. /**
  2. * Definition for singly-linked list.
  3. * class ListNode {
  4. * int val;
  5. * ListNode next;
  6. * ListNode(int x) {
  7. * val = x;
  8. * next = null;
  9. * }
  10. * }
  11. */
  12. public class Solution {
  13. public ListNode detectCycle(ListNode head) {
  14. }
  15. }

知识点

No.3 二叉树的遍历和构建 (25 + 40分)

  1. 实现二叉树的先序中序后序遍历。(30分)
  2. 实现根据二叉树的先序、中序遍历构造出二叉树的操作。(50分)
  1. /**
  2. * Definition for a binary tree node.
  3. * public class TreeNode {
  4. * int val;
  5. * TreeNode left;
  6. * TreeNode right;
  7. * TreeNode(int x) { val = x; }
  8. * }
  9. */
  10. public class BuildTree {
  11. public TreeNode buildTree(int[] inorder, int[] postorder) {
  12. }
  13. }

知识点

高阶题

在学习这些东西之前,要记得先学习一下Java的包管理工具Maven或者Gradle哦~。可以给你带来~

No.1 Java的小春天(和第二题结合) (100++ 分)

Spring的出现使Java迎来又一“春”,极大的方便了Java开发,是一个提供了完善开发环境的框架,而SpringMVC是基于Spring功能,结合MVC模式的Web框架。

任务:

  1. 学习了解MVC模式的思想。
  2. 学习SpringSpringMVC
  3. 实现一个简单的Demo(数据存储可以学习结合第二题的ORM框架),能够处理指定请求,并能够跳转到相关页面(功能自拟,博客啊什么的都行,建议从个人博客开始)。
  4. 项目文件打包发上来吧

知识点

No.2 学习ORM框架(100++ 分)

对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。
能够掌握好orm框架的使用可以提升很多你的开发效率。

  1. 学习使用Mybatis(推荐)或是Hibernate
  2. 写个小Demo(博客?存文章账号~等等,如何设计?),功能自拟。和Spring整合比较方便(和第一题一起做)。
  3. 打包提交~

知识点

No.3 等待通知机制 (100++ 分)

框架帮我们做了许多事情,就会导致我们忽视一些东西。多线程也是Java编程中重要的一部分。学习理解一下Java并发编程吧。

  1. 学习了解Java并发编程的概念,学会使用多线程。理解多线程的使用场景。
  2. 学习Wait/Notify等待通知机制。设计实现一个阻塞队列。

阻塞队列就是一个支持两个附加操作的队列。这两个附加操作支持阻塞的插入和移除方法。

  1. public class BlockingQueue<E> {
  2. public BlockQueue(int capacity){
  3. }
  4. public void put(E e){
  5. }
  6. public E take(){
  7. }
  8. }

知识点

No.4 并发编程的艺术(100++分)

在遇到一些耗时任务时,为了不影响服务响应的速度,我们往往会另外开一个线程去执行这项任务,先返回一个正在处理的状态。而当这样的请求多了的时候,线程的反复创建和销毁会带来大量的无意义的资源消耗。为了解决这类问题,我们往往会通过一个线程池来存储建好的线程,使用时直接提供(数据库连接的建立很耗时,所以也会用数据库连接池来保持连接)。

任务:

  1. 学习理解Java并发编程的相关知识。
  2. 设计实现一个自己的简单线程池。
  1. public interface ThreadPool<Job extends Runnable> {
  2. // 执行一个Job,这个job需要实现Runnable接口
  3. void execute(Job job);
  4. // 关闭线程池
  5. void shutdown();
  6. // 增加工作者线程
  7. void addWorkers(int num);
  8. // 减少工作者线程
  9. void removeWorker(int num);
  10. // 得到正在等待执行的任务数量
  11. int getJobSize();
  12. }

知识点

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注