精华内容
下载资源
问答
  • Java面试知识点(二十六)内联函数 Java面试知识点(二十七)迭代器iterator Java面试知识点(二十八)Java中容器的概念 Java面试知识点(二十九)Java集合框架 Java面试知识点(三十)Java枚举类enum Java面试知识...

    第一个模块:数据库

    1.1 腾讯数据库面试问题

    • 解释ACID四大特性

    • 原子性的底层实现

    • 数据库宕机后恢复的过程

    • 如何保证事务的ACID特性

    • MySQL日志类型

    这5个题目相对来说是比较普遍的,这里我就不一一给出答案了,给大家看下我的那个数据库学习笔记,这些题目在笔记里都是能找到的

    1.2 我的数据库学习笔记

    (1)自己整理的20个高频数据库学习知识点

    • 事务四大特性(ACID)原子性、一致性、隔离性、持久性?

    • 事务的并发?事务隔离级别,每个级别会引发什么问题,MySQL默认是哪个级别?

    • MySQL常见的三种存储引擎(InnoDB、MyISAM、MEMORY)的区别?

    • MySQL的MyISAM与InnoDB两种存储引擎在,事务、锁级别,各自的适用场景?

    • 查询语句不同元素(where、jion、limit、group by、having等等)执行先后顺序?

    • 什么是临时表,临时表什么时候删除?

    • MySQL B+Tree索引和Hash索引的区别?

    • sql查询语句确定创建哪种类型的索引?如何优化查询?

    • 聚集索引和非聚集索引区别?

    • 有哪些锁(乐观锁悲观锁),select 时怎么加排它锁?

    • 非关系型数据库和关系型数据库区别,优势比较?

    • 数据库三范式,根据某个场景设计数据表?

    • 数据库的读写分离、主从复制,主从复制分析的 7 个问题?

    • 使用explain优化sql和索引?

    • MySQL慢查询怎么解决?

    • 什么是 内连接、外连接、交叉连接、笛卡尔积等?

    • mysql都有什么锁,死锁判定原理和具体场景,死锁怎么解决?

    • varchar和char的使用场景?

    • mysql 高并发环境解决方案?

    • 数据库崩溃时事务的恢复机制(REDO日志和UNDO日志)?

    已将这个高频知识点整理成Word文档:

    image

    (2)MySQL的学习书籍:MySQL从入门到精通

    image

    (3)MySQL学习包

    image

    第二个模块:数据结构

    2.1 腾讯数据结构面试问题(这里只问了我两个)

    • B+树与红黑树的区别

    • 解决哈希冲突的方法

    第三个模块:Java

    3.1 腾讯JAVA面试问题

    • HashMap的底层数据结构,局限性与线程安全

    • 如何实现线程安全的HashMap

    • Collections.sychronizedMap与ConcurrentHashMap的区别

    • HashMap与ConcurrentHashMap的性能比较

    3.2 我的学习宝典

    (1)JAVA面试宝典

    • JAVA基础部分

    • 算法与编程部分

    • Java Web部分

    • 数据库部分

    • XML部分

    • 框架部分

    • 设计模式部分

    • 等等 下面介绍一下JAVA基础部分:

    image

    (2)自己整理的66个JAVA面试知识点

    • Java面试知识点(一)hashmap、hashtable和hashset

    • Java面试知识点(二)Java中的原码、反码和补码

    • Java面试知识点(三)Java中的private、protected和public

    • Java面试知识点(四)初始化执行代码顺序(含static块和构造块)以及类方法和实例方法

    • Java面试知识点(五) String 和 char 的对比

    • Java面试知识点(六)forward 和 redirect

    • Java面试知识点(七)优化 Hibernate 所鼓励的 7 大措施

    • Java面试知识点(八)序列化和反序列化

    • Java面试知识点(九)URL的组成

    • Java面试知识点(十)ArrayList和面向接口编程

    • Java面试知识点(十一)关于integer和string的==、equals判断

    • Java面试知识点(十二)重写与重载

    • Java面试知识点(十三)前台线程和后台线程、用户线程和守护线程

    • Java面试知识点(十四)java文件中的同级类、内部类、匿名内部类

    • Java面试知识点(十五)java中的异常(exception、throw、throws、try···catch)

    • Java面试知识点(十六)单继承和多继承

    • Java面试知识点(十七)Java 中 final、static、abstract 区别与联系

    • Java面试知识点(十八)结果集 (ResultSet)全面解析

    • Java面试知识点(十九)多态

    • Java面试知识点(二十)单例模式之懒汉式和饿汉式

    • Java面试知识点(二十一)数组的静态初始化和动态初始化

    • Java面试知识点(二十二)Java之sleep () 和 wait ()

    • Java面试知识点(二十三)Java之设计模式

    • Java面试知识点(二十四)抽象类和接口

    • Java面试知识点(二十五)内部类

    • Java面试知识点(二十六)内联函数

    • Java面试知识点(二十七)迭代器iterator

    • Java面试知识点(二十八)Java中容器的概念

    • Java面试知识点(二十九)Java集合框架

    • Java面试知识点(三十)Java枚举类enum

    • Java面试知识点(三十一)super和this关键字

    • Java面试知识点(三十二)多线程启动方式

    • Java面试知识点(三十三)JVM内存结构

    • Java面试知识点(三十四)java中池的概念

    • Java面试知识点(三十五)string、stringbuilder和stringbuffer

    • Java面试知识点(三十六)深拷贝和浅拷贝

    • Java面试知识点(三十七)类加载机制

    • Java面试知识点(三十八)多线程基本概念

    • Java面试知识点(三十九)实现线程自定义顺序执行——join()解析

    • Java面试知识点(四十)深入理解synchronized

    • Java面试知识点(四十一)I/O 基本概念

    • Java面试知识点(四十二)I/O 模型 ——阻塞、非阻塞、多路复用、异步

    • Java面试知识点(四十三)多线程中 的各种锁

    • Java面试知识点(四十四)阻塞队列BlockingQueue

    • Java面试知识点(四十五)生产者-消费者问题

    • Java面试知识点(四十六)多线程中 的各种锁

    • Java面试知识点(四十七)HashMap源码解析

    • Java面试知识点(四十八)红黑树

    • Java面试知识点(四十九)集合框架详解

    • Java面试知识点(五十)Map集合 的遍历

    • Java面试知识点(五十一)常见集合框架面试问题集锦

    • Java面试知识点(五十二)虚拟机中的对象

    • Java面试知识点(五十三)虚拟机 分配内存

    • Java面试知识点(五十四)垃圾回收算法

    • Java面试知识点(五十五)JVM运行时数据区域

    • Java面试知识点(五十六)JVM垃圾收集器

    • Java面试知识点(五十七)JVM垃圾回收 常见面试题

    • Java面试知识点(五十八)类加载器

    • Java面试知识点(五十九)OSI七层模型和 五层体系结构

    • Java面试知识点(六十)TCP 三次握手和四次挥手协议

    • Java面试知识点(六十一)TCP协议 (可靠保证、TCP、UDP、拥塞、ARQ)

    • Java面试知识点(六十二)HTTP 和 HTTPS

    • Java面试知识点(六十三)socket、session、url、http、状态码

    • Java面试知识点(六十四)Java反射

    • Java面试知识点(六十五)Java注解(上)——概念篇

    • Java面试知识点(六十六)Java注解(下)——实战篇

    具体答案解析已整理成66个Word文档:

    image

    第四个模块:操作系统

    4.1 腾讯操作系统面试问题

    • 进程与线程的区别

    • 进程间如何通信

    • 共享内存与Socket的优缺点与性能比较

    • 子进程从父进程继承了什么

    • 什么是僵尸进程

    • 线程与协程的区别

    第五个模块:JVM

    5.1 腾讯JVM面试问题

    • 类的编译过程

    • 类的加载过程

    • JVM的内存空间

    • JVM的GC机制

    5.2 我的JVM学习笔记

    (1)十大模块JVM学习知识点

    • JVM 内存结构

    • HotSpot 虚拟机对象探秘

    • 垃圾收集策略与算法

    • HotSpot 垃圾收集器

    • 内存分配与回收策略

    • JVM 性能调优

    • 类文件结构

    • 类加载的时机

    • 类加载的过程

    • 类加载器

    具体的JVM学习知识点已整理文档如下:

    image

    (2)JVM学习包

    image

    第六个模块:网络

    6.1 腾讯有关网络的面试问题

    • TCP三次握手/四次挥手

    • TIME_WAIT状态

    • 网络延迟大的情况怎么处理

    • HTTP请求到响应全过程(服务端)

    • HTTP请求头及其作用

    • HTTP和HTTPs

    • HTTPs的握手过程

    6.2 我的网络相关的学习笔记

    (1)HTTP权威指南

    • 第 1 章 HTTP 概述

    • 第 2 章 URL 与资源

    • 第 3 章 HTTP 报文

    • 第 4 章 连接管理

    • 第 5 章 Web 服务器

    • 第 6 章 代理

    • 第 7 章 缓存

    • 第 8 章 集成点:网关、隧道及中继

    • 第 9 章 Web 机器人

    • 第 10 章 HTTP-NG

    • 第 11 章 客户端识别与 cookie 机制

    • 第 12 章 基本认证机制

    • 第 13 章 摘要认证

    • 第 14 章 安全 HTTP

    • 第 15 章 实体和编码

    • 第 16 章 国际化

    • 第 17 章 内容协商与转码

    • 第 18 章 Web 主机托管

    • 第 19 章 发布系统

    • 第 20 章 重定向与负载均衡

    • 第 21 章 日志记录与使用情况跟踪

    image

    (2)我的网络 学习包

    image

    第七个模块:分布式

    7.1 腾讯分布式面试问题

    • 谈谈对分布式系统的理解

    • 分布式数据库的实现

    • 如何保证不同数据库之间的数据一致性

    • 如何实现主从数据库间的同步

    7.2 我的分布式学习笔记

    (1)分布式学习包(MQ、kafka、MongoDB、Nigx、Redis、zookeeper、书籍)

    image

    最后

    小编利用空余时间整理了一份《MySQL性能调优手册》,初衷也很简单,就是希望能够帮助到大家,减轻大家的负担和节省时间。

    关于这个,给大家看一份学习大纲(PDF)文件,每一个分支里面会有详细的介绍。

    image

    这里都是以图片形式展示介绍,如要下载原文件以及更多的性能调优笔记(MySQL+Tomcat+JVM)可以直接【点击 “性能调优”】免费下载!

    间的同步

    7.2 我的分布式学习笔记

    (1)分布式学习包(MQ、kafka、MongoDB、Nigx、Redis、zookeeper、书籍)

    [外链图片转存中…(img-etq1VSC4-1625940082813)]

    最后

    小编利用空余时间整理了一份《MySQL性能调优手册》,初衷也很简单,就是希望能够帮助到大家,减轻大家的负担和节省时间。

    关于这个,给大家看一份学习大纲(PDF)文件,每一个分支里面会有详细的介绍。

    [外链图片转存中…(img-3DII7SKT-1625940082814)]

    这里都是以图片形式展示介绍,如要下载原文件以及更多的性能调优笔记(MySQL+Tomcat+JVM)可以直接【点击 “性能调优”】免费下载!

    展开全文
  • 实现一个考试系统(单机版)用到的技术1.Swing实现窗口的绘制(View视图层)2.文件+I/O3.Java基本应用集合ArrayList HashSet HashMap字符串String StringBuilder随机数Random异常处理try catch面向对象的核心类(内部类 ...

    0e2decda716131518522eb2194cf154a.png

    实现一个考试系统(单机版)

    用到的技术

    1.Swing实现窗口的绘制(View视图层)

    2.文件+I/O

    3.Java基本应用

    集合ArrayList  HashSet  HashMap

    字符串String  StringBuilder

    随机数Random

    异常处理try catch

    面向对象的核心

    类(内部类  匿名内部类)

    属性  方法   构造   块

    特征修饰符  staic 权限修饰符 private protected public

    继承 聚合 依赖 抽象类(模板) 接口  ActionListener Runnable

    线程 反射 注解

    4.设计思想

    可读性(缩进 层级 命名  静态常量)

    冗余度(重复 几乎都做了封装)

    性能问题()

    方法设计(参数 返回值)

    类和类之间的关系

    设计模式  单例(饿汉式,懒汉式  生命周期托管)  模板

    MySpring  管理对象  单例  IOC控制反转

    缓存问题

    MVC分层架构

    48a5d3a726bf891e67a2c4f89a9f2e1d.png

    f39c2a6c82ca05d62c4ee2da71b98a57.png

    2fdae362e671398cfee0a2932152cb91.png

    428feaefc8e2001f3a3a928f18895536.png

    e1edc3f5be74ce354074f416b15d004b.png

    4bdd1f288b1629ab04a24fe5d2809699.png

    package dao;

    import java.util.*;

    import domain.Question;

    import util.*;

    //@SuppressWarnings("unchecked")

    public class QuestionDao{

    private QuestionFileReader reader=MySpring.getBean("util.QuestionFileReader");

    private ArrayList questionBank=new ArrayList(reader.getQuestionBox());

    public ArrayList getPaper(int count){

    HashSet qhs=new HashSet();//用来存储最终的试卷题目

    //System.out.println(questionBank.size());

    Random r=new Random();//随机数

    while(qhs.size()!=count){

    int index=r.nextInt(this.questionBank.size());//随机产生的一个题目索引位置

    qhs.add(this.questionBank.get(index));

    //System.out.println(qhs.size());

    }

    return new ArrayList(qhs);

    }

    }

    package dao;

    import java.util.*;

    import domain.User;

    import util.*;

    public class UserDao{

    privateUserFileReader ufr=MySpring.getBean("util.UserFileReader");

    public User selectOne(String name){

    return ufr.getUser(name);

    }

    }

    /*

    import domain.User;

    import dao.*;

    import util.*;

    public class UserService{

    //private UserDao dao=new UserDao();

    private UserDao dao=MySpring.getBean("dao.UserDao");

    public String login(String account,String password){

    User dbresult=dao.selectOne(account);

    if(dbresult!=null){

    if(dbresult.getPassword().equals(password)){

    return "登录成功";

    }

    }

    return "登录失败";

    }

    }

    public class UserFileReader{

    private static HashMap userBox=new HashMap<>();

    public static User getUser(String account){

    return userBox.get(account);

    }

    */

    package domain;

    //存储文件中的题目,增强可读性

    public class Question{

    private String question;//题干

    private String answer;//答案

    private String pic;//存储图片路径

    public Question(){

    }

    public Question(String question,String answer){

    this.question=question;

    this.answer=answer;

    }

    public Question(String question,String answer,String pic){

    this.question=question;

    this.answer=answer;

    this.pic=pic;

    }

    public void setQuestion(String question){

    this.question=question;

    }

    public String getQuestion(){

    return this.question;

    }

    public void setAnswer(String answer){

    this.answer=answer;

    }

    public String getAnswer(){

    return this.answer;

    }

    public void setPic(String pic){

    this.pic=pic;

    }

    public String getPic(){

    return this.pic;

    }

    public boolean equals(Object obj){

    if(this==obj){

    return true;

    }

    if(obj instanceof Question){

    Question anotherQuestion=(Question)obj;

    String thisTitle=this.question.substring(0,this.question.indexOf("
    "));

    String anotherTitle=anotherQuestion.question.substring(0,anotherQuestion.question.indexOf("
    "));

    if(thisTitle.equals(anotherTitle)){

    return true;

    }

    }

    return false;

    }

    @Override

    public int hashCode(){

    String thisTitle=this.question.substring(0,this.question.indexOf("
    "));

    return thisTitle.hashCode();

    }

    }

    package domain;

    //实体对象

    //存储文件中的一行记录

    //文件名----类名

    //文件名一行记录--类的对象

    //文件一行中的值--对象的属性对应

    public class User{

    private String account;

    private String password;

    public User(String account,String password){

    this.account=account;

    this.password=password;

    }

    public User(){

    }

    public void setAccount(String account){

    this.account=account;

    }

    public String getAccount(){

    return this.account;

    }

    public void setPassword(String password){

    this.password=password;

    }

    public String getPassword(){

    return this.password;

    }

    }

    package service;

    import util.MySpring;

    import domain.Question;

    import dao.QuestionDao;

    import java.util.*;

    public class QuestionService{

    private QuestionDao dao=MySpring.getBean("dao.QuestionDao");

    public ArrayList getPaper(int count){

    return dao.getPaper(count);

    }

    }

    package service;

    import domain.User;

    import dao.*;

    import util.*;

    public class UserService{

    private UserDao dao=MySpring.getBean("dao.UserDao");

    public String login(String account,String password){

    User dbresult=dao.selectOne(account);

    if(dbresult!=null){

    if(dbresult.getPassword().equals(password)){

    return "登录成功";

    }

    }

    return "登录失败";

    }

    }

    package test;

    import dao.*;

    import service.*;

    import test0608.LoginFrame;

    import java.util.*;

    import domain.*;

    import util.*;

    public class Test{

    public static void main(String[] args){

    new LoginFrame("登录窗口");

    //UserService us=new UserService();

    //System.out.println(us.login("zs","333"));

    //String question="1.一下那个是java的基本数据类型?\n A.String B.Integer C.boolean D.Math";

    //System.out.println(question);

    /*//判断自己写的equals,hasCode方法;

    String a="以下那个是java的基本数据类型?
    ";

    String b="以下那个是java的基本数据类型?
    ";

    Question aa=new Question(a,"D");

    Question ba=new Question(b,"b");

    System.out.println(aa.equals(ba));

    System.out.println(aa.hashCode()==ba.hashCode());

    QuestionService service=MySpring.getBean("service.QuestionService");

    ArrayList paper=service.getPaper(5);

    int i=1;

    for(Question q:paper){

    String title=q.getQuestion().replace("
    ","\n ");

    System.out.println(i++ +". "+title);

    }

    */

    }

    }

    package test0608;

    import javax.swing.*;

    import java.awt.*;

    import util.*;

    import java.util.*;

    import service.*;

    import domain.*;

    import java.awt.Image;

    import java.awt.event.*;

    public class ExamFrame extends BaseFrame{

    //获取QuestionService对象;

    private QuestionService service=MySpring.getBean("service.QuestionService");

    private ArrayList paper=service.getPaper(5);//生成试卷;

    //创建一个用于存储学生选择的答案的容器

    private String[] answers=new String[paper.size()];

    //创建几个变量,分别控制右侧个数

    private int nowCount=0;//记录当前题目序号;

    private int totalCount=paper.size();//题目总数:

    private int answerCount=0;

    private int unanswerCount=totalCount;//未答题数;

    public ExamFrame(){

    this.init();

    }

    public ExamFrame(String title){

    super(title);

    this.init();

    }

    //创建一个线程对象 控制时间变化

    private TimeControlThread timeControlThread=new TimeControlThread();

    //创建一个变量 用来记录整数(分钟为单位)

    private int times=61;

    //添加3个panel区域的分割

    private JPanel mainPanel=new JPanel();//答题主页面

    private JPanel rightPannel=new JPanel();//右

    private JPanel bottomPannel=new JPanel();

    //添加主要答题组件

    private JTextArea testArea=new JTextArea();//考试文本域

    private JScrollPane scrollPane=new JScrollPane(testArea);//滚动条

    //添加右侧信息的组件

    private JLabel pic=new JLabel();//展示图片

    private JLabel nowNum=new JLabel("当前题号:");//展示当前题号;

    private JLabel total=new JLabel("题目总数:");

    private JLabel answer=new JLabel("已答题数:");

    private JLabel unanswer=new JLabel("未答题数:");

    private JTextField nowNumField=new JTextField("0");

    private JTextField totalField=new JTextField("0");

    private JTextField answerField=new JTextField("0");

    private JTextField unanswerField=new JTextField("0");

    private JLabel time=new JLabel("剩余答题时间");//倒计时

    private JLabel realTime=new JLabel("00:00:00");//真实时间

    //添加底部组件

    private JButton aButton=new JButton("A");

    private JButton bButton=new JButton("B");

    private JButton cButton=new JButton("C");

    private JButton dButton=new JButton("D");

    private JButton prevButton=new JButton("上一题");

    private JButton nextButton=new JButton("下一题");

    private JButton submitButton=new JButton("提交试卷");

    protected void setFontAndSoOn(){

    //设置panel布局管理-->自定义

    mainPanel.setLayout(null);

    mainPanel.setBackground(Color.LIGHT_GRAY);

    rightPannel.setLayout(null);

    bottomPannel.setLayout(null);

    //手动设置每一个组件的位置 字体 背景

    scrollPane.setBounds(16,10,650,450);

    testArea.setFont(new Font("黑体",Font.BOLD,34));

    testArea.setEnabled(false);//文本域中的文字不让编辑

    //设置右边区域的位置

    rightPannel.setBounds(680,10,300,550);

    rightPannel.setBorder(BorderFactory.createLineBorder(Color.GRAY));

    //设置底部区域的位置

    bottomPannel.setBounds(16,470,650,90);

    bottomPannel.setBorder(BorderFactory.createLineBorder(Color.GRAY));

    //设置右边区域中每一个组件位置 大小 颜色

    pic.setBounds(10,10,280,230);

    pic.setBorder(BorderFactory.createLineBorder(Color.GRAY));

    pic.setIcon(null);//展示图片信息

    //

    nowNum.setBounds(40,270,100,30);

    nowNum.setFont(new Font("黑体",Font.PLAIN,20));

    nowNumField.setBounds(150,270,100,30);

    nowNumField.setFont(new Font("黑体",Font.BOLD,20));

    nowNumField.setBorder(BorderFactory.createLineBorder(Color.GRAY));

    nowNumField.setEnabled(false);

    nowNumField.setHorizontalAlignment(JTextField.CENTER);//居中

    total.setBounds(40,310,100,30);

    total.setFont(new Font("黑体",Font.PLAIN,20));

    totalField.setBounds(150,310,100,30);

    totalField.setFont(new Font("黑体",Font.BOLD,20));

    totalField.setBorder(BorderFactory.createLineBorder(Color.GRAY));

    totalField.setEnabled(false);

    totalField.setHorizontalAlignment(JTextField.CENTER);//居中

    answer.setBounds(40,350,100,30);

    answer.setFont(new Font("黑体",Font.PLAIN,20));

    answerField.setBounds(150,350,100,30);

    answerField.setFont(new Font("黑体",Font.BOLD,20));

    answerField.setBorder(BorderFactory.createLineBorder(Color.GRAY));

    answerField.setEnabled(false);

    answerField.setHorizontalAlignment(JTextField.CENTER);//居中

    unanswer.setBounds(40,390,100,30);

    unanswer.setFont(new Font("黑体",Font.PLAIN,20));

    unanswerField.setBounds(150,390,100,30);

    unanswerField.setFont(new Font("黑体",Font.BOLD,20));

    unanswerField.setBorder(BorderFactory.createLineBorder(Color.GRAY));

    unanswerField.setEnabled(false);

    unanswerField.setHorizontalAlignment(JTextField.CENTER);//居中

    unanswer.setBounds(40,390,100,30);

    unanswer.setFont(new Font("黑体",Font.PLAIN,20));

    unanswerField.setBounds(150,390,100,30);

    unanswerField.setFont(new Font("黑体",Font.BOLD,20));

    unanswerField.setBorder(BorderFactory.createLineBorder(Color.GRAY));

    unanswerField.setEnabled(false);

    unanswerField.setHorizontalAlignment(JTextField.CENTER);//居中

    time.setBounds(90,460,150,30);

    time.setFont(new Font("黑体",Font.PLAIN,20));

    time.setForeground(Color.BLUE);

    realTime.setBounds(108,490,150,30);

    realTime.setFont(new Font("黑体",Font.BOLD,20));

    realTime.setForeground(Color.BLUE);

    aButton.setBounds(40,10,120,30);

    aButton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));//小手图标

    bButton.setBounds(190,10,120,30);

    bButton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));//小手图标

    cButton.setBounds(340,10,120,30);

    cButton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));//小手图标

    dButton.setBounds(490,10,120,30);

    dButton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));//小手图标

    prevButton.setBounds(40,50,100,30);

    prevButton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));//小手图标

    nextButton.setBounds(510,50,100,30);

    nextButton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));//小手图标

    submitButton.setBounds(276,50,100,30);

    submitButton.setForeground(Color.RED);

    submitButton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));//小手图标

    //----------------------------------

    //展示考试题目

    this.showQuestionAndPic();

    //重写设置右侧组件值;

    nowNumField.setText(nowCount+1+"");

    totalField.setText(totalCount+"");

    answerField.setText(answerCount+"");

    unanswerField.setText(unanswerCount+"");

    realTime.setText(times+"");

    }

    //属性添加到窗体

    protected void addElement(){

    rightPannel.add(pic);

    rightPannel.add(nowNum);

    rightPannel.add(nowNumField);

    rightPannel.add(total);

    rightPannel.add(totalField);

    rightPannel.add(answer);

    rightPannel.add(answerField);

    rightPannel.add(unanswer);

    rightPannel.add(unanswerField);

    rightPannel.add(time);

    rightPannel.add(realTime);

    bottomPannel.add(aButton);

    bottomPannel.add(bButton);

    bottomPannel.add(cButton);

    bottomPannel.add(dButton);

    bottomPannel.add(prevButton);

    bottomPannel.add(nextButton);

    bottomPannel.add(submitButton);

    mainPanel.add(scrollPane);

    mainPanel.add(rightPannel);

    mainPanel.add(bottomPannel);

    this.add(mainPanel);

    }

    //添加事件监听

    protected void addListener(){

    //创建一个监听器对象 用于提交按钮

    submitButton.addActionListener(new ActionListener(){

    public void actionPerformed(ActionEvent e){

    //弹出一个确认框 是0 否1 取消2

    int value=JOptionPane.showConfirmDialog(ExamFrame.this,"是否确定提交试卷");

    if(value==0){

    //倒计时时间停止--线程处理

    //timeControlThread.stop();

    timeControlThread.stopTimeThread();//切换了线程的状态

    //所有按钮失效;

    ExamFrame.this.setOptionButtonEnabled(false);

    prevButton.setEnabled(false);

    nextButton.setEnabled(false);

    //让按钮颜色回归本色

    ExamFrame.this.clearOptionButtonColor();

    //最终成绩的计算 展示在中间的文本域中

    float score=ExamFrame.this.checkPaper();

    testArea.setText("考试已经结束\n您最终的成绩为:"+score);

    }

    }

    });

    //创建一个监听器对象 用于上一题按钮

    prevButton.addActionListener(new ActionListener(){

    public void actionPerformed(ActionEvent e){

    ExamFrame.this.clearOptionButtonColor();

    //还原四个选项按钮的状态 变成可用

    ExamFrame.this.setOptionButtonEnabled(true);//可用

    //设置下一题按钮 变成可用

    nextButton.setEnabled(true);//可用

    //题号减1

    nowCount--;

    //如果当前题号为0 已经到达第一题 让上一题按钮禁用

    if(nowCount==0){

    prevButton.setEnabled(false);//禁用

    }

    //还原之前这道题选择的是哪一个选项

    ExamFrame.this.restoreButton();

    //显示题目

    ExamFrame.this.showQuestionAndPic();

    //修改右侧题号

    nowNumField.setText(nowCount+1+"");

    answerField.setText(--answerCount+"");

    unanswerField.setText(++unanswerCount+"");

    }

    });

    //监听器 用于下一题

    nextButton.addActionListener(new ActionListener(){

    public void actionPerformed(ActionEvent e){

    //先清除所有选项的颜色

    ExamFrame.this.clearOptionButtonColor();

    //当前题目需要增加一个

    nowCount++;

    //当前题目是否到达最后

    if(nowCount==totalCount){//到达最后一道题了

    testArea.setText("全部题目已经回答完毕\n请点击下方红色提交按钮");

    //让下一个题目按钮失效

    nextButton.setEnabled(false);//不可用

    //全部选项按钮失效

    ExamFrame.this.setOptionButtonEnabled(false);

    }else{//后面还有题目

    ExamFrame.this.showQuestionAndPic();

    //修改右侧的当前题号

    nowNumField.setText(nowCount+1+"");

    }

    answerField.setText(++answerCount+"");

    unanswerField.setText(--unanswerCount+"");

    }

    });

    //用于四个选项按钮

    ActionListener optionListener=new ActionListener(){

    public void actionPerformed(ActionEvent e){

    //清除之前所有选项按钮的颜色

    ExamFrame.this.clearOptionButtonColor();

    //让被点中的按钮颜色变化一下

    JButton button=(JButton)e.getSource();//获取按钮

    button.setBackground(Color.YELLOW);

    //选项存储在answers数组中

    answers[nowCount]=button.getText();

    }

    };

    //将这个监听器对象绑定在四个选项按钮身上

    aButton.addActionListener(optionListener);

    bButton.addActionListener(optionListener);

    cButton.addActionListener(optionListener);

    dButton.addActionListener(optionListener);

    }

    //设置窗体自身

    protected void setFrameSelf(){

    this.setBounds(260,130,1000,600);

    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    this.setResizable(false);

    this.setVisible(true);

    timeControlThread.start();//启动计时线程

    }

    /*

    public static void main(String[] args){

    new ExamFrame("考试窗口");

    }

    */

    //----------------------------------------------------------

    //设计一个内部类 处理时间倒计时问题

    private class TimeControlThread extends Thread{

    private boolean flag=true;//此时正常执行线程处理;

    public void stopTimeThread(){

    this.flag=false;

    }

    public void run(){

    //times进行一个转化 小时:分钟:秒

    int hour=times/60;

    int minute=times%60;

    int second=0;

    while(flag){

    //操作realTime处理时间的显示

    StringBuilder timeString=new StringBuilder();

    if(hour>=0 && hour<10){

    timeString.append("0");

    }

    timeString.append(hour);

    timeString.append(":");

    if(minute>=0 && minute<10){

    timeString.append("0");

    }

    timeString.append(minute);

    timeString.append(":");

    if(second>=0 && second<10){

    timeString.append("0");

    }

    timeString.append(second);

    //展示拼接以后的字符串

    /*

    SwingUtilities.invokeLater(new Runnable(){

    public void run(){

    realTime.setText(timeString.toString());

    }

    });

    */

    realTime.setText(timeString.toString());

    try{

    Thread.sleep(1000);

    }catch(Exception e){

    e.printStackTrace();

    }

    //改变

    if(second>0){

    second--;

    }else{//秒数已经为0

    if(minute>0){//分钟>0

    minute--;

    second=59;

    }else{//分钟已经为0

    if(hour>0){//小时>0

    hour--;

    minute=59;

    second=59;

    }else{//小时为0

    System.out.println("时间截止");

    realTime.setForeground(Color.RED);

    ExamFrame.this.setOptionButtonEnabled(false);//所有按钮失效;

    prevButton.setEnabled(false);

    nextButton.setEnabled(false);

    //弹出一个消息框,告诉考试结束,请提交

    JOptionPane.showMessageDialog(ExamFrame.this,"考试结束,请提交试卷");

    break;

    }

    }

    }

    }

    }

    }

    //设计一个方法 负责计算最终的成绩

    private float checkPaper(){

    float score=100;

    int size=paper.size();

    for(int i=0;i 题干 答案 图片路径

    Question question=paper.get(i);

    String realAnswer=question.getAnswer();

    if(!realAnswer.equals(answers[i])){

    score-=(100/size);

    }

    }

    return score;

    }

    //还原上一题的选项

    private void restoreButton(){

    //获取当前题目的答案

    String answer=answers[nowCount];

    if(answer==null){

    return;

    }

    switch(answer){

    case "A":

    aButton.setBackground(Color.YELLOW);

    break;

    case "B":

    bButton.setBackground(Color.YELLOW);

    break;

    case "C":

    cButton.setBackground(Color.YELLOW);

    break;

    case "D":

    dButton.setBackground(Color.YELLOW);

    break;

    default:

    this.clearOptionButtonColor();

    break;

    }

    }

    //让所有选项按钮失效

    private void setOptionButtonEnabled(boolean key){

    aButton.setEnabled(key);

    bButton.setEnabled(key);

    cButton.setEnabled(key);

    dButton.setEnabled(key);

    }

    //清除所有选项按钮颜色

    private void clearOptionButtonColor(){

    aButton.setBackground(null);

    bButton.setBackground(null);

    cButton.setBackground(null);

    dButton.setBackground(null);

    }

    //设计一个方法,处理图片展示

    private ImageIcon drawImage(String path){

    ImageIcon imageIcon=new ImageIcon(path);

    //设置imageIcon对象内的image属性

    imageIcon.setImage(imageIcon.getImage().getScaledInstance(280,230,Image.SCALE_DEFAULT));

    //返回imageIcon对象

    return imageIcon;

    }

    //设计一个方法,用来展示一道题目

    private void showQuestionAndPic(){

    Question question=paper.get(nowCount);

    //获取当前question中的图片路径

    String picpath=question.getPic();//图片路径

    if(picpath!=null){//有图片

    pic.setIcon(this.drawImage("img\\"+picpath));

    }else{

    pic.setIcon(null);

    }

    //处理一个题目中的标记
    (表示换行)

    testArea.setText(nowCount+1+"."+question.getQuestion().replace("
    ","\n "));

    }

    }

    package test0608;

    import javax.swing.*;

    import java.awt.Font;

    import java.awt.Color;

    import java.awt.event.*;

    import util.BaseFrame;

    import service.UserService;

    import util.*;

    public class LoginFrame extends BaseFrame{

    public LoginFrame(){

    this.init();

    }

    public LoginFrame(String title){

    super(title);

    this.init();

    }

    //面板

    protected JPanel jpanel=new JPanel();

    //创建title显示标题

    protected JLabel bigTitle=new JLabel("在 线 考 试 系 统");

    //账号 密码

    protected JLabel accountLable=new JLabel("账户");

    protected JLabel passwordLable=new JLabel("密码");

    //文本框

    protected JTextField accountField=new JTextField();

    //密码框

    protected JPasswordField passwordField=new JPasswordField();

    //按钮

    protected JButton login=new JButton("登录");

    protected JButton exit=new JButton("退出");

    protected void setFontAndSoOn(){

    //设置组件的位置 布局管理

    //边界式 BordLayout(JFrame) 流式FlowLayout(JPanel)

    //网格式GridLayout 自定义(null)

    //设置面板的布局管理为自定义方式

    jpanel.setLayout(null);

    jpanel.setBackground(Color.WHITE);

    //设置标题组件的位置

    bigTitle.setBounds(120,40,340,35);

    //设置字体大小

    bigTitle.setFont(new Font("黑体",Font.BOLD,34));

    //设置用户名位置,字体大小

    accountLable.setBounds(94,120,90,30);

    accountLable.setFont(new Font("黑体",Font.BOLD,24));

    //文本框

    accountField.setBounds(204,120,260,30);

    accountField.setFont(new Font("黑体",Font.BOLD,24));

    //密码

    passwordLable.setBounds(94,180,90,30);

    passwordLable.setFont(new Font("黑体",Font.BOLD,24));

    passwordField.setBounds(204,180,260,30);

    passwordField.setFont(new Font("黑体",Font.BOLD,24));

    //登录 退出

    login.setBounds(204,240,90,30);

    login.setFont(new Font("黑体",Font.BOLD,24));

    exit.setBounds(330,240,90,30);

    exit.setFont(new Font("黑体",Font.BOLD,24));

    }

    protected void addElement(){

    jpanel.add(bigTitle);

    jpanel.add(accountLable);

    jpanel.add(accountField);

    jpanel.add(passwordLable);

    jpanel.add(passwordField);

    jpanel.add(login);

    jpanel.add(exit);

    this.add(jpanel);

    }

    protected void addListener(){

    //绑定时间监听器

    //ActionListener alistener=new Listener();

    //login.addActionListener(alistener);//观察者模式

    ActionListener alistener=new ActionListener(){

    public void actionPerformed(ActionEvent e){

    String account=accountField.getText();

    //String password=passwordField.getText();

    char[] value=passwordField.getPassword();

    String pwd=new String(value);

    //UserService uservice=new UserService();

    UserService uservice=MySpring.getBean("service.UserService");

    String result=uservice.login(account,pwd);

    System.out.println(result);

    if(result.equals("登录成功")){

    LoginFrame.this.setVisible(false);//将登录窗口隐藏

    //System.out.println("成功啦");

    new ExamFrame(account+"考试窗口");

    }else{

    JOptionPane.showMessageDialog(LoginFrame.this,result);

    //设置文本框和密码框为空

    accountField.setText("");

    passwordField.setText("");

    //System.out.println("失败啦");

    }

    }

    };//匿名内部类

    login.addActionListener(alistener);

    }

    protected void setFrameSelf(){

    //设置窗体起始位置

    this.setBounds(400,200,680,320);

    //设置点击关闭退出程序

    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    //设置窗体大小不可拖拽

    this.setResizable(false);

    //设置窗体显示状态

    this.setVisible(true);

    }

    }

    package util;

    import javax.swing.*;

    public abstract class BaseFrame extends JFrame{

    //模板模式

    public BaseFrame(){

    }

    public BaseFrame(String title){

    super(title);

    }

    protected void init(){

    this.setFontAndSoOn();

    this.addElement();

    this.addListener();

    this.setFrameSelf();

    }

    //字体 颜色。。

    protected abstract void setFontAndSoOn();

    //属性添加到窗体

    protected abstract void addElement();

    //添加事件监听

    protected abstract void addListener();

    //设置窗体自身

    protected abstract void setFrameSelf();

    }

    package util;

    import java.util.*;

    @SuppressWarnings("unchecked")

    //目的是为了管理对象的产生

    //对象的控制权交给当前类来负责 IOC控制反转

    public class MySpring{

    //属性 为了存储所有被管理的对象

    private static HashMap beanBox=new HashMap();

    //设计一个方法 获取任何一个类的对象

    //返回值(泛型) 参数String类名

    public static T getBean(String className){//传递一个类全名

    //通过类名字获取Class

    T obj=null;

    try{

    obj=(T)beanBox.get(className);

    if(obj==null){

    Class clazz=Class.forName(className);

    obj=(T)clazz.newInstance();

    beanBox.put(className,obj);

    }

    }catch(Exception e){

    e.printStackTrace();

    }

    return obj;

    }

    }

    package util;

    import java.util.*;

    import domain.Question;

    import java.io.*;

    public class QuestionFileReader{

    private static HashSet questionBox=new HashSet<>();

    static{

    BufferedReader br=null;

    try{

    File f=new File("dbfile\\Question.txt");

    FileReader fr=new FileReader(f);

    br=new BufferedReader(fr);

    String readValue=br.readLine();//每一次读取一行

    while(readValue!=null){

    String[] readValues=readValue.split("#");

    if(readValues.length==2){//无图片

    questionBox.add(new Question(readValues[0],readValues[1]));

    }else if(readValues.length==3){//含图片

    questionBox.add(new Question(readValues[0],readValues[1],readValues[2]));

    }

    readValue=br.readLine();

    }

    }catch(Exception e){

    e.printStackTrace();

    }finally{

    if(br!=null){

    try{

    br.close();

    }catch(Exception e){

    e.printStackTrace();

    }

    }

    }

    }

    public HashSet getQuestionBox(){

    return this.questionBox;

    }

    }

    package util;

    import domain.User;

    import java.util.HashMap;

    import java.io.*;

    //目的是为了增加一个缓存机制

    //程序启动的时候将User.txt文件中的所有信息 一次性读出来

    //以后做查询直接读取缓存中的数据 提高读取的性能

    public class UserFileReader{

    private static HashMap userBox=new HashMap<>();

    public static User getUser(String account){

    return userBox.get(account);

    }

    static{

    BufferedReader reader=null;

    try{

    reader=new BufferedReader(new FileReader("dbfile\\User.txt"));

    String message=reader.readLine();//每一次读取一行信息

    while(message!=null){

    String[] values=message.split("-");//一行记录的两个信息

    userBox.put(values[0],new User(values[0],values[1]));

    message=reader.readLine();

    }

    }catch(Exception e){

    e.printStackTrace();

    }finally{

    if(reader!=null){

    try{

    reader.close();

    }catch(Exception e){

    e.printStackTrace();

    }

    }

    }

    }

    }

    5a28f3fdb6e52455903c2fdf0c0a2668.png

    bcc2f72596167d93d34d7ba6d9f6493e.png

    展开全文
  • 【实例简介】Java单机考试系统 基于swing 使用eclipse编译 便于初学者学习【实例截图】【核心代码】Java考试系统├── bin│ ├── elts│ │ ├── ClientContext$1.class│ │ ├── ClientContext$2.class│ ...

    【实例简介】

    Java单机考试系统 基于swing 使用eclipse编译 便于初学者学习

    【实例截图】

    【核心代码】

    Java考试系统

    ├── bin

    │   ├── elts

    │   │   ├── ClientContext$1.class

    │   │   ├── ClientContext$2.class

    │   │   ├── ClientContext$3.class

    │   │   ├── ClientContext.class

    │   │   ├── Config.class

    │   │   ├── demo.txt

    │   │   ├── EntityContext.class

    │   │   ├── ExamFrame$1.class

    │   │   ├── ExamFrame$2.class

    │   │   ├── ExamFrame$3.class

    │   │   ├── ExamFrame$4.class

    │   │   ├── ExamFrame$Option.class

    │   │   ├── ExamFrame.class

    │   │   ├── ExamFrameTest.class

    │   │   ├── ExamInfo.class

    │   │   ├── exam.png

    │   │   ├── ExamService.class

    │   │   ├── ExamServiceImpl.class

    │   │   ├── ExamTest.class

    │   │   ├── exam_title.png

    │   │   ├── exit.png

    │   │   ├── IdOrPwdException.class

    │   │   ├── JFrameDemo.class

    │   │   ├── LayoutDemo.class

    │   │   ├── LoginFrame$1.class

    │   │   ├── LoginFrame$2.class

    │   │   ├── LoginFrame$3.class

    │   │   ├── LoginFrame.class

    │   │   ├── LoginFrameTest.class

    │   │   ├── LoginTest$1.class

    │   │   ├── LoginTest.class

    │   │   ├── Main.class

    │   │   ├── MenuFrame$1.class

    │   │   ├── MenuFrame$2.class

    │   │   ├── MenuFrame$3.class

    │   │   ├── MenuFrame$4.class

    │   │   ├── MenuFrame$5.class

    │   │   ├── MenuFrame.class

    │   │   ├── message.png

    │   │   ├── message.txt

    │   │   ├── mm.jpg

    │   │   ├── NullLayoutDemo.class

    │   │   ├── Question.class

    │   │   ├── QuestionInfo.class

    │   │   ├── result.png

    │   │   ├── tarena.png

    │   │   ├── title.png

    │   │   ├── User.class

    │   │   ├── welcome.png

    │   │   ├── WelcomeWindow.class

    │   │   └── yxmm.jpg

    │   └── properties01

    │   ├── client.properties

    │   └── PropertiesDemo.class

    ├── client.properties

    ├── corejava.txt

    ├── elts

    │   ├── client.properties

    │   ├── corejava.txt

    │   ├── elts.jar

    │   ├── run.sh

    │   └── user.txt

    ├── elts.jar

    ├── message.txt

    ├── server.properties

    ├── src

    │   ├── elts

    │   │   ├── ClientContext.java

    │   │   ├── Config.java

    │   │   ├── demo.txt

    │   │   ├── EntityContext.java

    │   │   ├── ExamFrame.java

    │   │   ├── ExamFrameTest.java

    │   │   ├── ExamInfo.java

    │   │   ├── exam.png

    │   │   ├── ExamServer.java

    │   │   ├── ExamServiceImpl.java

    │   │   ├── ExamService.java

    │   │   ├── ExamTest.java

    │   │   ├── exam_title.png

    │   │   ├── exit.png

    │   │   ├── IdOrPwdException.java

    │   │   ├── JFrameDemo.java

    │   │   ├── LayoutDemo.java

    │   │   ├── LoginFrame.java

    │   │   ├── LoginFrameTest.java

    │   │   ├── LoginTest.java

    │   │   ├── Main.java

    │   │   ├── MenuFrame.java

    │   │   ├── message.png

    │   │   ├── message.txt

    │   │   ├── mm.jpg

    │   │   ├── NullLayoutDemo.java

    │   │   ├── QuestionInfo.java

    │   │   ├── Question.java

    │   │   ├── result.png

    │   │   ├── tarena.png

    │   │   ├── title.png

    │   │   ├── User.java

    │   │   ├── welcome.png

    │   │   ├── WelcomeWindow.java

    │   │   └── yxmm.jpg

    │   └── properties01

    │   ├── client.properties

    │   └── PropertiesDemo.java

    ├── sys.properties

    ├── test.properties

    └── user.txt

    7 directories, 103 files

    展开全文
  • Java在线考试系统

    千次阅读 2021-01-12 00:00:00
    程序员的成长之路互联网/程序员/技术/资料共享关注阅读本文大概需要 3 分钟。项目介绍学之思在线考试系统是一款 java + vue 的前后端分离的考试系统。主要优点是开发、部署简单快...

    程序员的成长之路

    互联网/程序员/技术/资料共享 

    关注

    阅读本文大概需要 3 分钟。

    项目介绍

    学之思在线考试系统是一款 java + vue 的前后端分离的考试系统。主要优点是开发、部署简单快捷、界面设计友好、代码结构清晰。目前支持web端和微信小程序,能覆盖到pc机和手机等设备。

    开源版使用须知

    • 仅用个人学习,商用请购买授权 http://www.mindskip.net/buy.html

    • 禁止将本项目的代码和资源进行任何形式的出售,产生的一切任何后果责任由侵权者自负

    演示地址

    • 官网:http://www.mindskip.net

    • 学之思:http://www.mindskip.net/xzs.html

    • 学多多:http://www.mindskip.net/xdd.html

    • 思多多:http://www.mindskip.net/sdd.html

    学之思仓库版本地址

    • gitee - postgresql :https://gitee.com/mindskip/uexam

    • github - postgresql :https://github.com/mindskip/xzs

    • gitee - mysql :https://gitee.com/mindskip/xzs-mysql

    • github - mysql :https://github.com/mindskip/xzs-mysql

    学生系统功能

    • 登录、注册:注册时要选年级,过滤不同年级的试卷, 账号为student/123456

    • 首页:任务中心、固定试卷、时段试卷、可以能做的一部分试卷

    • 试卷中心:包含了所有能做的试卷,按学科来过滤和分页

    • 考试记录:所有的试卷考试记录在此处分页,可以查看试卷结果、用时、得分、自行批改等

    • 错题本:所有做错的题目,可以看到做题的结果、分数、难度、解析、正确答案等

    • 个人中心:个人日志记录

    • 消息:消息通知

    • 试卷答题和试卷查看:展示出题目的基本信息和需要填写的内容

    管理系统功能

    • 登录:账号为 admin/123456

    • 主页:包含了试卷、题目、做卷数、做题数、用户活跃度的统计功能,活跃度和做题数是按月统计

    • 用户管理:对不同角色 学生、教师、管理员 的增删改查管理功能

    • 卷题管理:

    1. 试卷列表:试卷的增删改查,新增包含选择学科、试卷类型、试卷名称、考试时间,试卷内容包含添加大标题,然后添加题目到此试卷中,组成一套完整的试卷

    2. 题目列表:题目的增删改查,目前题型包含单选题、多选题、判断题、填空题、简单题,支持图片、公式等。

    • 教育管理:对不同年级的学科进行增删改查

    • 消息中心:可以对多个用户进行消息发送,预留:加入班级,推送试卷等消息

    • 日志中心:用户的基本操作进行日志记录,了解用户使用过情况

    • 小程序学生系统功能:

      • 用户登录登出功能,登录会自动绑定微信账号,登出会解绑

      • 首页包含任务中心、固定试卷、时段试卷、推送试卷模块,和web端保持一致

      • 试卷模块,固定试卷和时段试卷的分页查询,下拉加载更多,上拉刷新当前数据

      • 记录模块,考试结果的分页,包含了试卷基本信息

      • 我的模块,包含个人资料的修改,个人动态,消息中心模块

      技术栈列表

      后台系统:

      • spring-boot 2.1.6.RELEASE

      • spring-boot-security 用户登录验证

      • undertow web容器

      • postgresql/mysql 优秀的开源数据库

      • redis 缓存,提升系统性能

      • mybatis 数据库中间件

      • hikari 速度最快的数据库连接池

      • 七牛云存储 目前10G内免费

      前台系统:

      • Vue.js 采用新版,使用了vue-cli3搭建的系统,减少大量配置文件

      • element-ui 最流行的vue组件,采用的最新版

      • vue-element-admin 最新版,对该系统做了大量精简,只保留了部分样式和控件

      • echarts 图表统计

      • ueditor 填空题扩展插件

      微信小程序:

      • iView 主题样式

      使用教程

      1. redis 安装

      2. 进群获取到数据库脚本,创建表初始化数据

      3. /uexam/source/xzs为后台代码,建议使用IntelliJ IDEA打开,在application-dev.yml文件中,配置好postgesql/mysql、redis的服务地址,打开XzsApplication文件编译运行,默认端口为8000。

      4. 学生系统地址:http://localhost:8000/student

      5. 管理端地址:http://localhost:8000/admin

      软件架构图

      系统展示

      • 学生考试系统

      • 小程序考试系统

      • 后台管理系统

      项目地址

      https://gitee.com/SnailClimb/uexam

      <END>

      推荐阅读:

      想接私活时薪再翻一倍,建议根据这几个开源的SpringBoot项目(含小程序)改改~

      腾讯,干掉 Redis 项目,正式开源、太牛逼啦!

      5T技术资源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,单片机,树莓派,等等。在公众号内回复「2048」,即可免费获取!!

      微信扫描二维码,关注我的公众号

      朕已阅 

    展开全文
  • java课程设计考试系统.Tag内容描述:1、目 录 第一章第一章 引言引言 3 1 1目的 3 1 2名词解释 3 1 3参考资料 3 1 4文档结构 3 第第 2 章章远景远景 4 2 1项目概述 4 2 1 1项目功能结构 5 2 1 2功能摘要 8 2 1 3用户...
  • Java在线考试系统(含源码)

    千次阅读 2021-02-12 09:14:11
    本文demo下载和视频教学观看地址:http://www.wisdomdd.cn/Wisdom/resource/articleDetail.htm?resourceId=1076本实例介绍了在线考试系统, 前台使用bootstrap技术,后台使用structs和herbinate, 数据库为mysql, 系统...
  • 基于java的在线考试系统毕业论文 芜湖信息技术职业学院 毕业设计(论文) 题目: 基于Java 技术的在线考试 系统的开发 专 业: 软件技术(嵌入式) 班 级: 2009级 1班 学 号: 20094039 学生姓名: 江子奇 指导老师: 刘力扬 ...
  • 这是一个基于SpringMVC开发的Java在线考试系统,文章后半部分提供多个运行截图,界面精美,有合适的朋友不要错过了。程序介绍###(一)系统说明 **制作试卷:**教师可以在线制作试卷,包括选择题,多选题,判断题,...
  • java单机考试系统练习

    2021-03-09 09:21:30
    package 考试系统;import java.awt.BorderLayout;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowEvent;import java.awt.event....
  • 要想保证每个考生进入考试都看到不一样的顺序,以及要保留考生每次进去之后要与初次进入的乱序结果要一致。 思路:要乱序还要保留原始数据,则需缓存数据,缓存有两个方案: 1、考虑Redis进行缓存每个考生考试的...
  • 【实例简介】基于Java考试管理系统源代码,简单好用【实例截图】【核心代码】基于Java考试管理系统└── 第11章 考试管理系统├── bin│ ├── com│ │ └── Exam│ │ ├── bean│ │ │ ├── ...
  • 功能简介: 所属课程、题目内容、题目选项、题目答案、题目等级、学生管理、时间控制 了解详情可以私聊,感谢大家支持与帮助! 点击查看更多java精品项目 >>>
  • 学生进行考试的功能比较复杂(首先做了校验,不在考试时间范围内,不能进行考试)考试试题是数据库根据发布考试时的条件随机产生的一套试题。因为每次考试题型题量都是不同的,因此我们继续采用JSON的格式去保存数据,...
  • 在线考试系统--简单java代码 Online Exam Questions() ***************************************************************Index.java import java.io.BufferedReader; import java.io.StreamReader; public class ...
  • 该文从实际应用出发,分析网上考试管理系统功能,采用WEB技术,通过Java语言进行编程,设计了网上考试管理系统,并对系统进行了测试。该系统可以便捷的实现学生成绩管理,方便教师工作,避免了传统考试管理效率低,可维护性...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼public ClientWindow(){setTitle{'标准化考试系统'};{label=new JLabel();label.setText(getTitle());label.setForeground(Color.orange);label.setFont(new Font('隶书'...
  • 基于java的学生在线考试系统

    千次阅读 2021-08-04 19:52:07
    系统预设计的基于网络的学生自测系统将实现多种用户(包括学生、教师、管理员)同时访问,学生登录后可以针对课程的每一章节的每一道题目,提交答案;系统会自动按照学生的答案来判断对错,并自动给出成绩。另外,...
  • Java Web应用开发—— 在线模拟考试系统-毕业设计 毕毕 业业 设设 计(论计(论 文)文) 题题 目目 Java Web 应用开发 在线模拟考试系统的设计与实现 学学 院院 计算机学院 专专 业业 软件工程 摘要 I 摘摘 要要 随着...
  • 题 目 基于java的在线考试系统设计 摘 要 本系统是一个基于java的在线考试系统。它的用户由学生、教师和系统管理员组成。学生登陆系统可以进行在线测试和成绩查询。当学生登陆时,系统会随机地为学生选取试题...
  • 系统功能:角色用户:系统管理员,教师,学生 学生功能 密码信息管理 个人信息管理 考试试卷查询 考试成绩查询 教师功能 密码信息管理 个人信息管理 难度指数管理 知识点...
  • Java虚拟机栈是线程私有的,没有数据安全问题,而堆相比较于Java虚拟机栈而言更为复杂,因为堆是所有线程共享的一块内存空间,会出现线程安全性问题,而垃圾回收也主要是回收堆内空间,所以堆内的布局我们非常有必要...
  • 网络考试系统主要用于实现高校在线考试,基本功能包括:自动组卷、试卷发布、试卷批阅、试卷成绩统计等。本系统结构如下: (1)学生端: 登录模块:登录功能; 网络考试模块:可参加考试,并查看考试结果,提交试卷...
  • 众所皆知的,Linux的核心原型是1991年由托瓦兹(Linus Torvalds)写出来的,但是托瓦兹为何可以写出Linux这个操作系统?为什么它要选择386的计算机来开发?为什么Linux的发展可以这么迅速?又为什么Linux是免费的?以及...
  • 博主项目仓库地址 https://gitee.com/zhangsiji/exam-system 需要源码自行下载 以下为部署在服务器后的效果
  • 毕业设计(论文)开题报告论文题目基于JSP的在线考试系统ONLINEEXAMINATIONSYSTEMBASEDONJSPONJSP学生姓名学号二级学院名称专业指导教师职称填表日期年月日一、选题的背景与意义计算机网络技术的飞速发展以及计算机...
  • Java课程设计学生在线考试系统

    千次阅读 2021-01-27 20:05:09
    基于GUI图形化界面 数据库才有MySQL ...题库与试卷生成系统主界面 管理员操作页面 学生界面 教师界面 教师增加题库 学生进入考试需要人脸识别 项目完整源码,私聊,可远程指导,帮忙搭建环境 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 45,719
精华内容 18,287
关键字:

java考试系统

java 订阅