—考核小结—

2024-08-26 23:44
文章标签 考核 小结

本文主要是介绍—考核小结—,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

线程控制

public class Main extends Thread {Class lock = Main.class;private static int num = 0;private final int threadId;private final char c;public Main(int threadId, char character) {this.threadId = threadId;this.c = character;}public void run() {while (true) {synchronized (lock) {while (num % 3 != threadId) {try {lock.wait();} catch (InterruptedException e) {Thread.currentThread().interrupt();}}System.out.print(c);num++;lock.notifyAll();}}}public static void main(String[] args) {Thread t1 = new Main(0, 'f');Thread t2 = new Main(1, 'j');Thread t3 = new Main(2, 'w');t1.start();t2.start();t3.start();}
}

原本是想通过wait()实现顺序控制,但发现只能控制一个线程和其他两个线程的相对有序,不能同时保证三个线程的有序,于是想到了让三个线程抢同一个资源,通过targeid和id来保证线程的有序性,如果两个值不相等则释放资源,直到相当id++,就保证了线程有序。

并发安全的map

当时是手写了一个map,不过由于时间原因,只完成了增加和查询功能,修改和查询未能完成,后来经过提醒,想到了可以直接在map外层包裹一层synchronized

import java.util.*;public class map<K,V> extends HashMap<K,V> {private final Object lock = new Object();@Overridepublic V put(K key, V value) {synchronized (lock) {return super.put(key, value);}}@Overridepublic V get(Object key) {synchronized (lock) {return super.get(key);}}@Overridepublic V remove(Object key) {synchronized (lock) {return super.remove(key);}}@Overridepublic void clear() {synchronized (lock) {super.clear();}}@Overridepublic boolean containsKey(Object key) {synchronized (lock) {return super.containsKey(key);}}@Overridepublic boolean containsValue(Object value) {synchronized (lock) {return super.containsValue(value);}}@Overridepublic int size() {synchronized (lock) {return super.size();}}@Overridepublic boolean isEmpty() {synchronized (lock) {return super.isEmpty();}}
}

刚开始是写成object的,后来改为了泛型,实现了进一步解耦。

简单web服务器

要求:

1.更改Tomcat端口号为8888

2.Mysql表结构id , name ,password , time,字段自己决定

3.访问路径localhost:8888/fjw

4.Post:localhost:8888/fjw/register当前端传来一个name,password保存在数据库中,并且time为创建时间 Get:localhost:8888/fjw/getUser ,当前端发送get请求,返回这个表里面所有的用户信息

1.更改端口号

1.Tomacat安装目录下去server.xml文件中找到Connector标签将其port改为8888

<Connector port="8888" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" />

我当时是直接在idea上改的端口号,想到去配置文件中更改但是不知道在哪里。

2.创建表结构,use类

CREATE SCHEMA mydatabase;USE mydatabase;CREATE TABLE users (id INT,name VARCHAR(50),password VARCHAR(50),time TIMESTAMP
);

这里我使用了dategrip数据库可视化工具,如果使用其他工具或终端操作,需要将

CREATE SCHEMA mydatabase;改为CREATE DATABASE mydatabase;

package com.lbdking.pojo;
public class User {private int id;private String name;private String password;private String time;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name){this.name = name;}public void setPassword(String Password) {this.password = password;}public String getPassword() {return password;}public void setTime(String time) {this.time = time;}public String getTime() {return time;}
}

3.配置数据库连接


<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource"><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/user_db"/><property name="username" value="root"/><property name="password" value="123456"/>  <!-- 填写你密码啊,123456不是我密码 --><property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
</bean><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/><property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.yourpackage.mapper"/>
</bean>

Mapper层

UserMapper.java

public interface UserMapper {void insertUser(User user);List<User> getAllUsers();
}

UserMapper.xml

<mapper namespace="com.yourpackage.mapper.UserMapper"><insert id="insertUser">INSERT INTO user (name, password, time) VALUES (#{name}, #{password}, #{time})</insert><select id="getAllUsers" resultType="com.yourpackage.model.User">SELECT * FROM user</select>
</mapper>

Service层

user接口

UserService.java

public interface UserService {void registerUser(User user);List<User> getAllUsers();
}

对应接口继承实现功能调用

UserServiceImpl.java

@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Overridepublic void registerUser(User user) {userMapper.insertUser(user);}@Overridepublic List<User> getAllUsers() {return userMapper.getAllUsers();}
}

Controller层

UserController.java

@RestController
@RequestMapping("/fjw")
public class UserController {@Autowiredprivate UserService userService;@PostMapping("/register")public String registerUser(@RequestParam String name, @RequestParam String password) {User user = new User();user.setName(name);user.setPassword(password);userService.registerUser(user);return "User registered successfully";}@GetMapping("/getUser")public List<User> getAllUsers() {return userService.getAllUsers();}
}

功能实现,@RequestMapping注解实现路径更改内层方法使用@PostMapping(“/register”)和@GetMapping(“/getUser”)实现post方法和get方法提交。

这篇关于—考核小结—的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1110021

相关文章

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

HTML5 getUserMedia API网页录音实现指南示例小结

《HTML5getUserMediaAPI网页录音实现指南示例小结》本教程将指导你如何利用这一API,结合WebAudioAPI,实现网页录音功能,从获取音频流到处理和保存录音,整个过程将逐步... 目录1. html5 getUserMedia API简介1.1 API概念与历史1.2 功能与优势1.3

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

Python函数返回多个值的多种方法小结

《Python函数返回多个值的多种方法小结》在Python中,函数通常用于封装一段代码,使其可以重复调用,有时,我们希望一个函数能够返回多个值,Python提供了几种不同的方法来实现这一点,需要的朋友... 目录一、使用元组(Tuple):二、使用列表(list)三、使用字典(Dictionary)四、 使

Python程序的文件头部声明小结

《Python程序的文件头部声明小结》在Python文件的顶部声明编码通常是必须的,尤其是在处理非ASCII字符时,下面就来介绍一下两种头部文件声明,具有一定的参考价值,感兴趣的可以了解一下... 目录一、# coding=utf-8二、#!/usr/bin/env python三、运行Python程序四、

Python中合并列表(list)的六种方法小结

《Python中合并列表(list)的六种方法小结》本文主要介绍了Python中合并列表(list)的六种方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录一、直接用 + 合并列表二、用 extend() js方法三、用 zip() 函数交叉合并四、用

Spring Boot中的YML配置列表及应用小结

《SpringBoot中的YML配置列表及应用小结》在SpringBoot中使用YAML进行列表的配置不仅简洁明了,还能提高代码的可读性和可维护性,:本文主要介绍SpringBoot中的YML配... 目录YAML列表的基础语法在Spring Boot中的应用从YAML读取列表列表中的复杂对象其他注意事项总

CSS 样式表的四种应用方式及css注释的应用小结

《CSS样式表的四种应用方式及css注释的应用小结》:本文主要介绍了CSS样式表的四种应用方式及css注释的应用小结,本文通过实例代码给大家介绍的非常详细,详细内容请阅读本文,希望能对你有所帮助... 一、外部 css(推荐方式)定义:将 CSS 代码保存为独立的 .css 文件,通过 <link> 标签

CSS引入方式和选择符的讲解和运用小结

《CSS引入方式和选择符的讲解和运用小结》CSS即层叠样式表,是一种用于描述网页文档(如HTML或XML)外观和格式的样式表语言,它主要用于将网页内容的呈现(外观)和结构(内容)分离,从而实现... 目录一、前言二、css 是什么三、CSS 引入方式1、行内样式2、内部样式表3、链入外部样式表四、CSS 选

$在R语言中的作用示例小结

《$在R语言中的作用示例小结》在R语言中,$是一个非常重要的操作符,主要用于访问对象的成员或组件,它的用途非常广泛,不仅限于数据框(dataframe),还可以用于列表(list)、环境(enviro... 目录1. 访问数据框(data frame)中的列2. 访问列表(list)中的元素3. 访问jav