面试机试题目,使用Spring + SpringMVC +Mybatis + html + css实现员工管理系统

2023-11-18

机试挑战

需求分析

开发环境:IntelliJ IDEA + JDK1.8 + Tomcat8.5 + Maven + SVN + MySql
采用技术:Spring + SpringMVC +Mybatis + Shiro + html + css
功能:
请编写一个Web程序,完成对员工信息的管理,实现功能如下:
1.登录;(完成)
2.查看所有员工列表;(完成)
3.查看员工详细信息;(完成)
4.添加员工信息;(完成)
5.修改员工信息;(完成)
6.删除员工信息;(完成)
大概内容:
1.登录,添加,修改,删除操作使用AOP将操作日志入库保存;(完成)
2.全部请求使用Ajax请求方式;(部分完成)
3.前端框架自行使用;(完成)
4.数据库自行设计;(完成)
5.Session管理交由Shiro管理;
6.使用log4j进行日志文件保存;(完成)
7.使用nginx进行管理,需要实现服务停止时提示维护页面

简介

访问地址: http://39.99.237.90:8080/employee

源码: https://github.com/Listen-Y/JavaWeb/tree/master/20201125

实际主要技术栈

SSM + JQuery + bootstrap

访问流程

管理员账号目前只有一个, 并对其密码使用MD5加密

账号: admin

密码: 123456

普通员工不能进行登录访问,更不能对员工信息进行操作

演示

在这里插入图片描述

显示所有员工
在这里插入图片描述

添加员工
在这里插入图片描述

查看信息
在这里插入图片描述

数据库设计

管理员table

create table admin
(
	name varchar(20) primary key,
	password varchar(32) not null
)
comment '管理员';
insert into admin values('admin',MD5('123456'));

员工table

create table employee
(
   id smallint primary key auto_increment,
   name varchar(20) not null,
   sex smallint not null,
   entry date not null,
   depart varchar(20) not null,
   phone varchar(11) not null
);
comment '员工';

insert into employee(name, sex, entry, depart, phone) VALUES ('listen', 0, CURDATE(), '开发部', '12345677889');

POJO对象

管理员

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Admin implements Serializable {

    private String name;
    private String password;
}

普通员工

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Employee implements Serializable {
    private int id;
    private String name;
    private int sex;
    private Date entry;
    private String depart;
    private String phone;

    public Employee(String name, int sex, String depart, String phone) {
        this.name = name;
        this.sex = sex;
        this.depart = depart;
        this.phone = phone;
    }
}

dao层服务

管理员操作接口

public interface AdminMapper {

    Admin query(@Param("name") String name);

}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.employee.dao.AdminMapper">
    <select id="query" parameterType="string" resultType="admin">
        select * from admin where name=#{name};
    </select>
</mapper>

普通员工操作接口

public interface EmployeeMapper {

    List<Employee> select();
    List<Employee> selectLike(@Param("keyWords") String keyWords);
    Employee query(@Param("id") int id);
    int add(Employee employee);
    int delete(@Param("id") int id);
    int update(Map<String, Object> map);
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.employee.dao.EmployeeMapper">
    <select id="select" resultType="employee">
        select * from employee;
    </select>

    <select id="query" resultType="employee" parameterType="_int">
        select * from employee where id=#{id};
    </select>

    <insert id="add" parameterType="employee">
        insert into employee(name, sex, entry, depart, phone)
        VALUES (#{name}, #{sex}, CURDATE(), #{depart}, #{phone});
    </insert>

    <delete id="delete" parameterType="_int">
        delete from employee where id=#{id};
    </delete>

    <update id="update" parameterType="map">
        update employee
        <set>
            <if test="name != null">
                name=#{name},
            </if>
            <if test="sex != null">
                sex=#{sex},
            </if>
            <if test="depart != null">
                depart=#{depart},
            </if>
            <if test="phone != null">
                phone=#{phone}
            </if>
        </set>
        where id=#{id}
    </update>

    <select id="selectLike" resultType="employee" parameterType="string">
        select * from employee where name like #{keyWords};
    </select>

</mapper>


Service服务

AdminServiceImpl

public interface AdminService {

    Admin query(String name);

}

public class AdminServiceImpl implements AdminService {

    AdminMapper adminMapper;

    public void setAdminMapper(AdminMapper adminMapper) {
        this.adminMapper = adminMapper;
    }

    /**
     * 按名字查询管理员
     * @param name
     * @return
     */
    @Override
    public Admin query(String name) {
        return adminMapper.query(name);
    }
}

EmployeeServiceImpl

public interface EmployeeService {

    List<Employee> select();
    Employee query(int id);
    int add(Employee employee);
    int delete(int id);
    int update(Map<String, Object> map);
    List<Employee> selectLike(String keyWords);
}

public class EmployeeServiceImpl implements EmployeeService {

    EmployeeMapper employeeMapper;

    public void setEmployeeMapper(EmployeeMapper employeeMapper) {
        this.employeeMapper = employeeMapper;
    }

    /**
     * 查询所有员工
     * @return
     */
    @Override
    public List<Employee> select() {
        return employeeMapper.select();
    }

    /**
     * 按id查找员工
     * @param id
     * @return
     */
    @Override
    public Employee query(int id) {
        return employeeMapper.query(id);
    }

    /**
     * 添加员工
     * @param employee
     * @return
     */
    @Override
    public int add(Employee employee) {
        return employeeMapper.add(employee);
    }

    /**
     * 按照id编号删除一个员工
     * @param id
     * @return
     */
    @Override
    public int delete(int id) {
        return employeeMapper.delete(id);
    }

    /**
     * 修改员工信息, map中存储要修改的值
     * @param map
     * @return
     */
    @Override
    public int update(Map<String, Object> map) {
        return employeeMapper.update(map);
    }

    /**
     * 支持模糊查询员工
     * @param keyWords
     * @return
     */
    @Override
    public List<Employee> selectLike(String keyWords) {
        return employeeMapper.selectLike(keyWords);
    }
}

单元测试

管理员接口

public class AdminServiceImplTest extends TestCase {
    
    public void testQuery() throws Exception {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("application-context.xml");
        AdminService adminService = applicationContext.getBean("adminServiceImpl", AdminService.class);
        Admin admin = adminService.query("admin");
        System.out.println(MD5Utils.verify("123456", admin.getPassword()));
    }
}

员工接口

public class EmployeeServiceImplTest extends TestCase {

    private static final EmployeeService employeeService;

    static {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("application-context.xml");
        employeeService = applicationContext.getBean("employeeServiceImpl", EmployeeService.class);

    }

    public void testSelect() {
        for (Employee employee : employeeService.select()) {
            System.out.println(employee);
        }
    }

    /* public Employee(String name, int sex, String depart, String phone) {*/
    public void testQuery() {
        Employee employee = employeeService.query(2);
        System.out.println(employee);
    }

    public void testAdd() {
        Employee employee = new Employee("bike", 1, "人事部", "11111111111");
        employeeService.add(employee);
    }

    public void testDelete() {
        employeeService.delete(2);
    }

    public void testUpdate() {
        Map<String, Object> map = new HashMap<>();
        map.put("id", 3);
/*        map.put("name", "faker");*/
        map.put("sex", 0);
        map.put("depart", "管理部");
        map.put("phone", "99999999999");
        System.out.println(employeeService.update(map));
    }

    public void testSelectLike() {
        Logger logger = Logger.getLogger(EmployeeServiceImplTest.class);
        logger.debug("hahaha");
        for (Employee employee : employeeService.selectLike("%张%")) {
            System.out.println(employee);
        }
    }
}

配置

实现拦截器

<!--关于拦截器的配置-->
<mvc:interceptors>
    <mvc:interceptor>
        <!--/** 包括路径及其子路径-->
        <!--/admin/* 拦截的是/admin/add等等这种 , /admin/add/user不会被拦截-->
        <!--/admin/** 拦截的是/admin/下的所有-->
        <mvc:mapping path="/**"/>
        <!--bean配置的就是拦截器-->
        <bean class="com.employee.config.InterceptorConfig"/>
    </mvc:interceptor>
</mvc:interceptors>

public class InterceptorConfig implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
        //如果已经登录过就放行
        //如果访问的是login也放行
        //其他的就拦截
        if (httpServletRequest.getSession().getAttribute("admin") != null) {
            return true;
        }
        if (httpServletRequest.getRequestURI().contains("login")) {
            return true;
        }
        //不能放行, 返回到首页
        httpServletResponse.sendRedirect("./index.jsp");
        return false;
    }

    @Override
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {

    }
}

AOP实现前置通知输出数据库操作日志

<!--实现aop日志入库-->
<bean id="adminBeforeLogConfig" class="com.employee.config.AdminBeforeLogConfig"/>
<bean id="employeeBeforeLog" class="com.employee.config.EmployeeBeforeLog"/>
<aop:config>
    <!--配置被代理类的切入点, 注意execution的使用规则第一个* 代表任意返回类型,
    第二个参数表示切入点, .*表示这个类的全部方法, ..表示参数是任意的-->
    <aop:pointcut id="pointcut" expression="execution(* com.employee.service.AdminServiceImpl.*(..))"/>
    <aop:advisor advice-ref="adminBeforeLogConfig" pointcut-ref="pointcut"/>
</aop:config>
<aop:config>
    <!--配置被代理类的切入点, 注意execution的使用规则第一个* 代表任意返回类型,
    第二个参数表示切入点, .*表示这个类的全部方法, ..表示参数是任意的-->
    <aop:pointcut id="pointcut2" expression="execution(* com.employee.service.EmployeeServiceImpl.*(..))"/>
    <aop:advisor advice-ref="employeeBeforeLog" pointcut-ref="pointcut2"/>
</aop:config>

public class AdminBeforeLogConfig implements MethodBeforeAdvice {
    
    static Logger logger = Logger.getLogger(AdminBeforeLogConfig.class);
    
    @Override
    public void before(Method method, Object[] objects, Object o) {
        logger.error("方法名:" + method.getName() + " 参数:"+ Arrays.toString(objects)
                +" 目标:"+o);

    }
}

public class EmployeeBeforeLog implements MethodBeforeAdvice {

    static Logger logger = Logger.getLogger(EmployeeBeforeLog.class);
    
    @Override
    public void before(Method method, Object[] objects, Object o) {
        logger.error("方法名:" + method.getName() + " 参数:"+ Arrays.toString(objects)
                +" 目标:"+o);
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fzqWneVd-1606400193775)(C:\Users\Huawei\AppData\Roaming\Typora\typora-user-images\1606398655371.png)]

controller

管理员controller

@Controller
public class AdminController {

    @Autowired
    AdminService adminService;

    /**
     * 实现登录
     * @param request
     * @return
     * @throws UnsupportedEncodingException
     */
    @RequestMapping(value = "/login", produces="text/html;charset=utf-8")
    @ResponseBody
    public String login(HttpServletRequest request) throws UnsupportedEncodingException {

        request.setCharacterEncoding("UTF-8");
        //获取数据
        String name = request.getParameter("name");
        String password = request.getParameter("password");
        if (name == null || name.length() == 0 || password == null || password.length() == 0) {
            return "请填写账号和密码";
        }

        //查找用户
        Admin admin = adminService.query(name);
        if (admin == null) {
            return "账号或密码错误";
        }

        //密码检验
        boolean verify;
        try {
            verify = MD5Utils.verify(password, admin.getPassword());
        } catch (Exception e) {
            return "MD5检验异常";
        }
        if (verify) {
            //创建session保存
            HttpSession session = request.getSession();
            session.setAttribute("admin", admin);
        }
        System.out.println("[DEBUG]verify " + verify);
        return verify ? "OK":"账号或密码错误";
    }


    /**
     * 实现注销
     * @param session
     * @param response
     * @throws IOException
     */
    @RequestMapping("/down")
    public void down(HttpSession session, HttpServletResponse response) throws IOException {
        session.removeAttribute("admin");
        response.sendRedirect("./index.jsp");
    }
}

员工controller

@Controller
public class EmployeeController {

    @Autowired
    EmployeeService employeeService;


    /**
     * 获取所有员工数据, 返回modelAndView
     * @param model
     * @return
     */
    @RequestMapping("/success")
    public String success(Model model) {
        System.out.println("[DEBUG] success");

        model.addAttribute("list", employeeService.select());
        return "showAll";
    }

    /**
     * 添加一个员工
     * @param name
     * @param sex
     * @param depart
     * @param phone
     * @return
     */
    @RequestMapping(value = "/add", produces = "text/html;charset=utf-8")
    @ResponseBody
    public String add(String name, String sex, String depart, String phone) {
        name = name.trim();
        sex = sex.trim();
        depart = depart.trim();
        phone = phone.trim();
        //检查合法性
        String error = MessageCheck.checkAll(name, sex, depart, phone);
        if (error.length() > 0) {
            return error;
        }
        //进行数据库操作实现增加
        int sexNum = 1;
        if ("girl".equalsIgnoreCase(sex) || "女".equals(sex)) {
            sexNum = 0;
        }
        Employee employee = new Employee(name, sexNum, depart, phone);
        employeeService.add(employee);
        return "OK";

    }

    /**
     * 方便页面跳转
     * @return
     */
    @RequestMapping("/addEmployee")
    public String newEmployee() {
        return "add";
    }

    /**
     * 支持模糊查询
     * @param keyWords
     * @param model
     * @return
     */
    @RequestMapping("/findLike")
    public String findLike(String keyWords, Model model) {
        List<Employee> list = employeeService.selectLike("%" + keyWords + "%");
        if (list.size() == 0) model.addAttribute("ERROR", "未找到");
        model.addAttribute("list", list);
        return "showAll";
    }

    /**
     * 根据id得到员工数据, 然后返回修改数据页面
     * @param id
     * @param model
     * @return
     */
    @RequestMapping("/update/{id}")
    public String update(@PathVariable("id")int id, Model model) {
        Employee employee = employeeService.query(id);
        model.addAttribute("employee", employee);
        return "update";
    }

    /**
     * 执行修改员工数据的操作
     * @param id
     * @param name
     * @param sex
     * @param depart
     * @param phone
     * @return
     */
    @RequestMapping(value = "/update", produces = "text/html;charset=utf-8")
    @ResponseBody
    public String update(int id, String name, String sex, String depart, String phone) {
        name = name.trim();
        sex = sex.trim();
        depart = depart.trim();
        phone = phone.trim();
        //数据检验
        String error = MessageCheck.checkAll(name, sex, depart, phone);
        if (error.length() > 0) {
            return error;
        } else {

        int sexNum = 1;
        if ("girl".equalsIgnoreCase(sex) || "女".equals(sex)) {
            sexNum = 0;
        }

        Employee query = employeeService.query(id);
        Map<String, Object> map = new HashMap<>();
        map.put("id", id);
        if (!query.getName().equals(name)) map.put("name", name);
        if (query.getSex() != sexNum) map.put("sex", sexNum);
        if (!query.getDepart().equals(depart)) map.put("depart", depart);
        if (!query.getPhone().equals(phone)) map.put("phone", phone);
        if (map.size() <= 1) return "OK";


        int update = employeeService.update(map);
        System.out.println("[DEBUG]update " + update);
        return "OK";
        }
    }

    /**
     * 查看某个员工的详细信息
     * @param employeeId
     * @param model
     * @return
     */
    @RequestMapping(value = "/query")
    public String query(int employeeId, Model model) {
        Employee employee = employeeService.query(employeeId);
        model.addAttribute("employee", employee);
        return "detials";
    }

    /**
     * 删除一个员工
     * @param employeeId
     * @return
     */
    @RequestMapping("/delete")
    public String delete(int employeeId) {
        int delete = employeeService.delete(employeeId);
        System.out.println("[DEBUG] " + delete);
        return "redirect:/success";

    }
}

总结

  • 基本功能已实现
  • 进行了单元测试
  • 前端美化不够
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

面试机试题目,使用Spring + SpringMVC +Mybatis + html + css实现员工管理系统 的相关文章

  • “修改列”与“更改列”

    我知道 我们不能使用重命名列MODIFY COLUMN语法 但我们可以使用CHANGE COLUMN syntax 我的问题是 主要用途是什么modify syntax 例如 ALATER TABLE tablename CHANGE co
  • IntelliJ IDEA 创建的 JAR 文件无法运行

    我在 IntelliJ 中编写了一个跨越几个类的程序 当我在 IDE 中测试它时它运行良好 但是 每当我按照教程将项目制作成 jar 可执行文件时 它就不会运行 双击 out 文件夹中的文件时 该文件不会运行 并显示 无法启动 Java J
  • java.io.IOException: %1 不是有效的 Win32 应用程序

    我正在尝试对 XML 文档进行数字签名 为此我有两个选择 有一个由爱沙尼亚认证中心为程序员创建的库 还有一个由银行制作的运行 Java 代码的脚本 如果使用官方 认证中心 库 那么一切都会像魅力一样进行一些调整 但是当涉及到银行脚本时 它会
  • 使用 ANTLR 为 java 源代码生成抽象语法树

    如何使用 ANTLR 从 java src 代码生成 AST 有什么帮助吗 好的 步骤如下 前往ANTLR站点 http www antlr org 并下载最新版本 下载Java g和JavaTreeParser g文件来自here htt
  • HDFS:使用 Java / Scala API 移动多个文件

    我需要使用 Java Scala 程序移动 HDFS 中对应于给定正则表达式的多个文件 例如 我必须移动所有名称为 xml从文件夹a到文件夹b 使用 shell 命令我可以使用以下命令 bin hdfs dfs mv a xml b 我可以
  • 如何为 Gson 编写自定义 JSON 反序列化器?

    我有一个 Java 类 用户 public class User int id String name Timestamp updateDate 我收到一个包含来自 Web 服务的用户对象的 JSON 列表 id 1 name Jonas
  • 当分配给变量时,我可以以某种方式重用 Gremlin GraphTraversals 代码吗?

    我有看起来像这样的 GraphTraversals attrGroup GraphTraversal
  • 使用替换字符串中多个单词的最有效方法[重复]

    这个问题在这里已经有答案了 此刻我正在做 Example line replaceAll replaceAll cat dog replaceAll football rugby 我觉得那很丑 不确定有更好的方法吗 也许循环遍历哈希图 ED
  • MySQL:如何仅获取正值的平均值?

    假设我有 INT 列 并且我使用 1 来表示插入时没有可用数据 我想获得该列中所有 0 或更大值的平均值 这可能吗 Thanks 我忘了提及 我正在与其他 AVG 一起执行此操作 因此从选项卡中选择 avg a avg b avg d 所以
  • 归并排序中的递归:两次递归调用

    private void mergesort int low int high line 1 if low lt high line 2 int middle low high 2 line 3 mergesort low middle l
  • Java中未绑定通配符泛型的用途和要点是什么?

    我不明白未绑定通配符泛型有什么用 具有上限的绑定通配符泛型 stuff for Object item stuff System out println item Since PrintStream println 可以处理所有引用类型 通
  • 应用程序关闭时的倒计时问题

    我制作了一个 CountDownTimer 代码 我希望 CountDownTimer 在完成时重新启动 即使应用程序已关闭 但它仅在应用程序正在运行或重新启动应用程序时重新启动 因此 如果我在倒计时为 00 10 分钟 秒 时关闭应用程序
  • 使用 SAX 进行 XML 解析 |如何处理特殊字符?

    我们有一个 JAVA 应用程序 可以从 SAP 系统中提取数据 解析数据并呈现给用户 使用 SAP JCo 连接器提取数据 最近我们抛出了一个异常 org xml sax SAXParseException 字符引用 是无效的 XML 字符
  • 当单元格内的 JComboBox 中有 ItemEvent 时,如何获取 CellRow

    我有一个 JTable 其中有一列包含 JComboBox 我有一个附加到 JComboBox 的 ItemListener 它会根据任何更改进行操作 但是 ItemListener 没有获取更改的 ComboBox 所在行的方法 当组合框
  • 如何配置eclipse以保持这种代码格式?

    以下代码来自 playframework 2 0 的示例 Display the dashboard public static Result index return ok dashboard render Project findInv
  • Django 将 JSON 数据传递给静态 getJSON/Javascript

    我正在尝试从 models py 中获取数据并将其序列化为views py 中的 JSON 对象 模型 py class Platform models Model platformtype models CharField max len
  • 中断连接套接字

    我有一个 GUI 其中包含要连接的服务器列表 如果用户单击服务器 则会连接到该服务器 如果用户单击第二个服务器 它将断开第一个服务器的连接并连接到第二个服务器 每个新连接都在一个新线程中运行 以便程序可以执行其他任务 但是 如果用户在第一个
  • rake db 问题:迁移 -

    我无法为 Ruby on Rails 设置 MySQL 数据库 设置数据库并确保 config database yml 文件匹配后 我遇到了以下错误消息 U Rails alpha gt rake db migrate trace in
  • JAVA - 如何从扫描仪读取文件中检测到“\n”字符

    第一次海报 我在读取文本文件的扫描仪中读取返回字符时遇到问题 正在读取的文本文件如下所示 test txt start 2 0 30 30 1 1 90 30 0 test txt end 第一行 2 表示两个点 第二行 位置索引 0 xp
  • java8 Collectors.toMap() 限制?

    我正在尝试使用java8Collectors toMap on a Stream of ZipEntry 这可能不是最好的想法 因为在处理过程中可能会发生异常 但我想这应该是可能的 我现在收到一个我不明白的编译错误 我猜是类型推理引擎 这是

随机推荐

  • 无卡支付,快捷支付,认证支付,协议支付,代扣区别与联系

    无卡支付 快捷支付 认证支付 协议支付 代扣区别与联系 无卡支付 另外名称叫快捷支付 不需开通网银 只需提供银行卡卡号 户名 手机号码等信息 银行验证手机号码正确性后 第三方支付发送手机动态口令到用户手机号上 用户输入正确的手机动态口令 即
  • 标注一致性:Inter-Annotator Agreement(IAA)

    评价者之间的一致性 Kappas Inter rater agreement Kappas 简书
  • Acwing提高课DP二刷(考研复习)

    前言 本博客主要是为了准备考研数据结构自命题而写的 主要为个人复习使用 里面的题博主在大一大二基本都刷了若干遍 所以这里只写一些简单的思路和总结评语 供日后回顾复习使用 DP 1 acwing1010 导弹拦截 题目大意 利用若干组互相独立
  • vue for循环列表(插槽)输入数据操作

    vue for循环列表 插槽 输入数据操作 1 给循环的每一行的编辑框添加chang事件 输入框 参数 数据的唯一key 绑定的键名 event target value值 下拉框 参数 数据的唯一key 绑定的键名 event值 HTML
  • c++学习之继承

    继承的优点 gt 减少重复代码 class A public B A类称为子类或派生类 B类称为父类或者基类 派生类中的成员 包含两大部分 一类是从基类继承过来的 一类是自己增加的成员 从基类继承过来的表现为共性 而新增的成员表现了个性 代
  • Mysql压力测试(sysbench)

    目录 配置项目环境 参考 采用sysbench压测mysql详解 dream21st的博客 CSDN博客 实验步骤 1 安装sysbench工具 2 在master上创建用户和库 配置用户的权限可以使他可以访问库 Mysql的主从复制 3
  • Java开发工具Idea Revert操作

    Revert是撤销操作 类似于Ctrl Z 不同的是 Revert是以版本为单位 撤销整个版本 可以这样理解Revert操作 假如有V1 V2 V3 V4 V5五个版本 Revert撤销V3版本 实际上就是合并V2版本和V5版本 并对V2版
  • Firefox如何快速关闭网页

    问题You 火狐浏览器如何通过鼠标滑动 快速关闭窗口 火狐浏览器可以通过安装扩展程序来实现通过鼠标滑动快速关闭窗口的功能 以下是具体步骤 打开火狐浏览器 在地址栏中输入 about addons 并回车 在左侧菜单中选择 扩展 然后在右侧搜
  • iOS中.obj、.usdz、.dae和.scn格式之间的转化(思路清晰版)

    作者最近在写项目的过程中遇到了一些3d模型格式问题 故写下这篇文章记录一下解决问题的过程 示例 如果我们想用SceneKit库来实现在默认背景中展示一个3D模型 大致可以这样写代码 var sceneView SCNView var sce
  • 围圈数数淘汰游戏

    在围圈游戏中 规则是从某个数同时开始逆时针和顺时针走一定步长 淘汰对应索引的人员 则有两种情况可能顺逆时针轮到同一个人或许人不同 可以通过一个函数确定每走一步数数的索引值 用一个数组表示每个人是否out 的标志位 初始数组每个值为1 out
  • 编写表格树GridTree过程遇到的问题

    项目中用到不少的树和表格 但是要用到表格树的地方不是很多 但是有时候需要的时候却不好找到 所以就在闲暇的时候自己找了一下 结果发现了很简单的 但是不满足项目的需求 于是就看懂了别人的东西之后 再结合自己的理解 干脆就做一个表格树好了 从写下
  • Angular 6 安装到使用

    TOC 前端 Angular 6 安装到使用 1 下载nodejs 并安装到本地 配置好环境变量 访问nodejs的官方网站的downdolad 网址 https nodejs org en download npm v 查看是否安装成功
  • 强大的jQuery图表插件库Highcharts支持线性图、饼状图、柱状图、区域图、气泡图

    Highcharts是一个纯JavaScript编写的jQuery图表插件库 Highcharts提供了简单的方式为您的网站或项目添加动态图表 Highcharts支持线性图 饼状图 柱状图 区域图 气泡图等近20种图表类型 下载地址 ht
  • mybatis(19)——choose标签,when标签和otherwise标签

    代码
  • JMeter简单使用

    一 下载安装 1 在官网下载或者在 share 192 168 1 201 share 开发工具 java apache jmeter 5 5 zip 2 解压 执行文件在bin目录中 二 常用测试组件 1 线程组 线程组是JMeter 中
  • 服务配置宝塔面板搭建环境及部署项目

    服务配置宝塔面板搭建环境及部署项目 1 登录你所购买阿里云服务器的账号 2 点击控制台 云服务器ecs 3 开通安全组开启端口 把需要访问的端口进行配置 选入方向 如 6379 8080 3306 80 21 22 443 4 获取服务器公
  • FOC和SVPWM的C语言代码实现   

    FOC和SVPWM的C语言代码实现 SVPWM的原理讲解在这儿 https blog csdn net qlexcel article details 74787619 comments 现在开始分析C语言的代码 代码建议复制到notepa
  • 【UE4】DataTable - 数据表

    本文使用 UE 4 26 引擎自带 ARPG 项目 从代码和编辑器两个方面记录一下 UE4 中的 DataTable 也就是数据表的用法 一 DataTable 是什么 DataTable 就是数据表 以下简称 DT 也就是二维的 M 行
  • OLED透明屏轻量化设计:提升便携性与用户体验的新方向

    随着科技的不断进步 OLED透明屏作为一种新兴的显示技术正逐渐走入人们的视野 除了在视觉效果上的优势 OLED透明屏在重量方面的设计也备受关注 对此 尼伽将深入探讨OLED透明屏轻量化设计的重要性 策略以及应用案例 希望看后对您有所启发 一
  • 面试机试题目,使用Spring + SpringMVC +Mybatis + html + css实现员工管理系统

    文章目录 机试挑战 需求分析 简介 访问地址 http 39 99 237 90 8080 employee http 39 99 237 90 8080 employee 源码 https github com Listen Y Java