- 博客(64)
- 收藏
- 关注

原创 Linux部署运行环境--安装JDK ;tomcat和mysql
安装JDK通过yum包管理器安装yum list | grep jdkyum list 查看软件包有哪些;grep 从一些字符串中查找想要的字符串;| 表示把前面的输出作为后面的输入。安装tomcat下载tomcatwget https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.72/bin/apache-tomcat-8.5.72.zip 2.解压缩unzip apache-tomcat-8.5.57.zip ...
2021-11-17 16:21:12
1884

原创 使用Servlet和JDBC编程来实现一个简单的博客系统(1)
一.分析需求新用户注册。 已有用户登录。 展示博客列表(每一项包含文章标题,作者),点击文章标题就会跳转到文章详情页(不考虑分页功能)。 文章详情页中,可以看到文章标题,作者,内容。 发布新的博客(不考虑富文本编辑,嵌入图片,视频代码片段等)。 删除自己的博客。二.创建项目 在Idea中创建maven项目,在maven仓库中下载mysql connector 和 Servlet API,注意版本对应。三.数据库设计 (一对多的关系)表一:User(us...
2021-11-10 17:11:04
1552
原创 个人项目---音乐视频播放器
项目背景:餐厅自主点餐项目的初心就是为了让顾客可以方便有序的使用手机进行在线点菜,商家可以按照下单时间有序地处理订单。 点餐系统总体分为两部分:用户自主点餐(index.html) + 老板进行管理(admin.html)用户点餐界面的基本功能:新用户注册 老用户登录 主界面中能看到当前店家的菜品列表 选择要点的菜品,进行下单 用户可以看到自己的历史订单,查看订单详情和状态等老板管理界面的基本功能:管理员登录 针对菜品列表进行管理(新增菜品,删除菜品) 针对所有订单进行管理...
2021-11-27 22:03:32
1179
1
原创 自助点餐系统
项目背景:餐厅自主点餐项目的初心就是为了让顾客可以方便有序的使用手机进行在线点菜,商家可以按照下单时间有序地处理订单。 点餐系统总体分为两部分:用户自主点餐(index.html) + 老板进行管理(admin.html)用户点餐界面的基本功能:新用户注册 老用户登录 主界面中能看到当前店家的菜品列表 选择要点的菜品,进行下单 用户可以看到自己的历史订单,查看订单详情和状态等老板管理界面的基本功能:管理员登录 针对菜品列表进行管理(新增菜品,删除菜品) 针对所有订单进行管理...
2021-11-23 13:54:40
4862
2
原创 使用Servlet和JDBC编程来实现一个简单的博客系统(2)
五.进行前后端接口设计(基于HTTP基础上进行扩展)获取注册页面请求:GET/register.html 响应:注册页面上有两个输入框,分别可以输入用户名和密码,还有一个提交按钮。 package api;import model.User;import model.UserDao;import view.HtmlGenerator;import javax.servlet.ServletException;import javax.servlet.http.HttpServl..
2021-11-10 17:42:41
720
原创 TCP协议实现一个回显服务器
TCP协议--面向字节流,有连接(例如打电话) 核心类:Server Socket 服务器的处理方式:短连接:只交互一次,交互完毕,就断开连接 长连接:可交互多次,满足一定条件在断开(效率更高)客户端:启动客户端(客户端不要绑定端口号)和服务器建立连接 。 进入主循环:(1)读取用户输入的内容。(2)构造请求并发送。(3)读取响应数据。(4)把响应数据显示到界面上。package TCP1102;import java.io.*;import java.net.Socket;i..
2021-11-04 20:08:48
312
原创 UDP协议写一个回显服务器
UDP协议--面向数据报,无连接(例如发微信) 核心类:Datagram Socket 客户端:先初始化(实例化socket对象) 进入主循环:(1)从用户这里读取输入的数据。(2)构造请求发送给服务器。(3)从服务器读取响应。(4)把响应写回客户端。package UDP1101;import java.io.IOException;import java.net.*;import java.util.Scanner;public class UdpEchoClient {
2021-11-04 19:51:20
138
原创 线程安全问题的解决---加锁解锁;Volative关键字;对象等待集
线程不安全:多线程并发执行某个代码时,产生了逻辑上的错误,称为线程不安全。 线程不安全的原因:线程是抢占式执行的(万恶之源)。 非原子性的操作:例如自增,每次自增都能拆分为三个部分:(1)把内存中的数据读取到cpu。(2)在cpu中把数据+1。(3)把计算结束的数据写回内存中。当cpu执行到上面三个步骤中任意一个时,都可能会被调度器调度走,让给其他线程来执行。 多个线程尝试修改同一个变量。 内存可见性导致的线程安全问题。 指令重排序:java的编译器在编译代码时,会针对指令进行优化,调整指令的先
2021-10-30 13:59:50
329
原创 线程状态--线程等待
线程状态:辅助线程进行调度,java中线程的状态是通过一个enum来表示的。NEW:表示Thread对象有了,PCB没有。 RUNNABLE:准备就绪,正在cpu执行或者已经准备好上cpu执行。 BLOCKED:等待锁,阻塞状态,暂时不上cpu。 WAITING:...
2021-10-30 13:15:36
710
原创 创建线程的五种代码写法---如何使用JDK内置的jconsole来观察各线程
显式继承Thread类。public class ThreadDemo1 { //创建线程的方法1:显式继承Thread类 static class MyThread extends Thread { @Override public void run() { System.out.println("hello world,我是一个线程"); while(true) { /
2021-10-27 19:42:34
199
原创 认识操作系统--进程--线程--多线程编程
操作系统:本质是一个管理硬件设备和软件资源的软件。一个完整的操作系统 = 内核 + 配套的应用程序 进程(process)/任务(task):进程是一种操作系统中非常重要的软件资源,可看作是程序执行的过程。进程id:进程的身份标识。 一组内存指针:指向进程运行时依赖的指令和数据在内存中的那个位置。 进程的状态:是正在运行还是在休眠。 进程的优先级:这个进程是优先上CPU执行还是放到后面上。 进程的上下文:保存了上次进程在CPU执行的进度,以便下次进程上CPU的时候能够继续执行。 进程的进账信.
2021-10-27 19:18:30
210
原创 软件测试入门
软件测试:验证软件是否满足了客户需求和软件需求。 什么是BUG?当且仅当规格(软件需求)说明存在,并且正确,如果程序和规格说明不相符,就是软件缺陷。 如果没有规格说明,当且仅当用户需求存在且合理,如果程序和用户需求不相符,就是软件缺陷。测试用例:向被测试系统发出的一系列集合,包含测试数据,测试环境(软件和硬件),操作步骤,预期结果等。eg:网易邮箱的登陆成功测试用例标题:网易邮箱登录成功的测试用例测试模块:登录模块前提条件:注册得到用户名和密码重要性:重要测试数据:正确的...
2021-10-26 23:17:39
81
原创 mysql数据库编程---JDBC增删改查
数据库编程是指通过代码实现一个MYSQL客户端,同样是通过网络和服务器进行交互,数据库会给我们提供一组API来方便实现API:application programming interface ,提供了一组函数/类/或方法,让用户直接去使用,有时可称为接口。MYSQL,ORACLE,SQL SERVER 等数据库都有不同的API,通过适配器(adapter)把不同种类的API转成JDBC统一的API适配器(adapter):java中称为数据库驱动程序,不同数据库需要不同的驱动程序,java中的数.
2021-10-25 14:28:24
262
原创 哈希表-hashMap的插入,查找元素de底层实现
//通过开散列的方式来处理hash冲突public class MyHashMap { static class Node { public int key; public int value; public Node next; public Node(int key, int value) { this.key = key; this.value = value; ..
2021-10-20 20:11:36
284
原创 二叉搜索树--查找,插入,删除的底层实现
public class BinarySearchTree { public static class Node{ int key; Node left; Node right; public Node(int key) { this.key = key; } } //根节点,root为null时为空树 private Node root = null;//1.查..
2021-10-20 20:09:12
89
原创 牛客网--旧键盘上坏了几个键,再敲一段文字时,对应的字符不会出现,现在给出应该输入的文字,以及实际被输入的文字,列出肯定坏掉的那些键。
//3.旧键盘上坏了几个键,再敲一段文字时,对应的字符不会出现,// 现在给出应该输入的文字,以及实际被输入的文字,列出肯定坏掉的那些键。public class BrokenKeyboard { public static void main(String[] args) { //4.最后对坏掉的键进行去重(set去重) Scanner scanner = new Scanner(System.in); while(scanner.hasNe..
2021-10-20 13:44:38
321
原创 Map和Set面试题---1.复制带随机指针的链表;2.宝石与石头;3.前k个高频单词
//1.复制带随机指针的链表public class MapInterView { static class Node { int val; Node next; Node random; public Node(int val) { this.val = val; this.next = null; this.random = null; ..
2021-10-20 13:42:39
99
原创 leetcode--set面试题--(1)找出一个数组中出现一次的元素,其余元素均出现两次;(2)找出整数数组中分别出现了一次的两个数字,其他数都出现了两次
//1.leetcode--找出一个数组中出现一次的元素,其余元素均出现两次 //方法一 :通过map统计每个数字出现的次数,key表示当前数字,value表示这个数字出现的次数,在遍历map找出那个出现一次的数字public class SetMapInterview { public int singleNumber(int[] nums) { //1.创建一个Map统计每个数字出现的次数,key表示当前数字,value表示这个数字出现的次数 Map..
2021-10-19 22:12:29
251
原创 java--对象的比较
对象的比较比较身份:== 比较值:equals(需要手动重写才能按值比较) 比较类型:instanceofequals如果没有重写,默认执行的是object中的equals,比较规则也是在比较身份使用comparable接口时,最好指定泛型参数,编译器自动完成类型校验工作。不写参数的话默认为object,则需要手动类型转换。使用comparable,必须让要比较的类实现comparable接口,需要修改代码。 使用比较器comparator,不需要修改代码,重新创建一个类,实现compa..
2021-10-19 22:08:16
100
原创 java--排序算法--插入排序;希尔排序;选择排序;堆排序;冒泡排序;快速排序;归并排序
public class TestSort { //升序排序 public static void insertSort(int[] array) { //通过bound来划分出两个区间 //[0,bound)已排序区间 //(bound,size]待排序区间 for (int bound = 1;bound < array.length;bound++) { int v = array[boun.
2021-10-18 22:35:37
75
原创 java-优先队列
package Heap;import java.util.Arrays;//优先队列public class MyPriorityQueue { //array看起来是一个数组,其实应该是一个堆的结构 private int[] array = new int[100]; private int size = 0;//入队列 public void offer(int x) { array[size] = x; size++;.
2021-10-17 23:10:18
54
原创 二叉树--非递归的方式来完成先序,中序,后续遍历
package interViewTree;import sun.reflect.generics.tree.Tree;import java.util.Stack;class TreeNode1 { int val; TreeNode left; TreeNode right; public TreeNode1(int val) { this.val = val; }}public class interViewTree2 {.
2021-10-16 23:22:44
54
原创 java--二叉树leetcode找两个节点的最近公共祖先;2.输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表;3.根据一颗树的前序遍历和中序遍历构造二叉树;4.二叉树创建字符串
package interViewTree;import sun.reflect.generics.tree.Tree; class TreeNode { public int val; public TreeNode left; public TreeNode right; public TreeNode(int val) { this.val = val; }}public class interViewTree { .
2021-10-16 17:02:17
86
原创 leetcode---二叉树的分层遍历(逐层的返回其按照层序遍历得到的节点值,从左到右访问所有节点)
//2.二叉树的分层遍历(逐层的返回其按照层序遍历得到的节点值,从左到右访问所有节点) static List<List<Integer>> result = new ArrayList<>(); public List<List<Integer>> levelOrder(TreeNode root) { //此处要把每一层的节点放到一个单独的List中,所以之前的层序遍历方式就不行 //此处要基.
2021-10-16 12:28:44
191
原创 牛客网---二叉树的构建与遍历
package wanQuanShu;import java.util.ArrayList;import java.util.List;import java.util.Scanner;//1.二叉树的构建与遍历public class BuildTreeDemo { //内部类,因为这个类之前在该包下定义过。 static class TreeNode { public char val; public TreeNode left; .
2021-10-16 10:38:07
223
原创 leetcode-判断一棵树是否是完全二叉树
package wanQuanShu;import java.util.LinkedList;import java.util.Queue;//1.判断一棵树是否是完全二叉树class TreeNode { public int val; public TreeNode left; public TreeNode right; public TreeNode(int val) { this.val = val; }}public .
2021-10-16 10:36:26
293
原创 java-leetcode二叉树遍历;判断相同;判断子树;最大深度;判断平衡;判断镜像对称;层序遍历
package TestTree;import java.util.ArrayList;import java.util.LinkedList;import java.util.List;import java.util.Queue;class TreeNode { public int val; public TreeNode left; public TreeNode right; public TreeNode(int val) { t.
2021-10-13 18:04:51
139
原创 java-二叉树前序中序后序遍历的实现;求二叉树节点个数;叶子节点的个数;第k层节点的个数;二叉树查找指定元素
package TestTree;/** * @program: 1012 * @description * @author: YouName * @create: 2021-10-12 19:22 **/class Node { public char val; public Node left; public Node right; public Node(char val) { this.val = val; }}publ.
2021-10-12 23:09:19
248
原创 leetcode判断有效的括号;用队列实现栈;用栈实现队列;实现一个最小栈
判断有效的括号package tmr1012;import java.util.HashMap;import java.util.Map;import java.util.Stack;/** * @program: 1012 * @description括号匹配问题 * @author: YouName * @create: 2021-10-12 13:05 **/public class TestStackAndQueue { public boolean isVail
2021-10-12 16:46:28
60
原创 java-栈和队列
栈和队列也是基于List来实现的,限制比List更严格(操作更少)List比栈和队列更灵活。Stack 栈:只支持三个核心操作:入栈,出栈,取栈顶元素(先进后出)。Queue 队列:也是有三个核心操作:入队列,出队列,取队首(先进先出)。public class MyStack { //管理一些int元素,不考虑扩容问题 private int[] array = new int[100]; private int size = 0; //入栈 pub
2021-10-12 12:43:56
86
原创 java-杨辉三角leetcode
package fanXing;import java.util.ArrayList;import java.util.List;/** * @program: 1011 * @description * @author: YouName * @create: 2021-10-11 22:57 **/public class Yanghui { public List<List<Integer>> generate(int numRows) { .
2021-10-11 23:27:23
157
原创 java--实现一副扑克牌
package fanXing;import java.util.ArrayList;import java.util.Collection;import java.util.Collections;import java.util.List;/** * @program: 1011 * @description * @author: YouName * @create: 2021-10-11 20:58 **///这是一张牌class Card { private S.
2021-10-11 22:56:29
521
原创 Java-泛型
泛型的引入,是为了能够写一个类/方法能够同时支持多种不同类型的对象。所谓泛型就是从语法层面上对Object进行一个简单的包装,编译过程帮我们自动加上一些编译期的类型检查,自动帮我们完成类型转换工作。 public class seqList<E> E是一个泛型参数(相当于一个形参,需要在真正对该类进行实例化的时候确定实参),泛型参数有:E,T,KEY等。E这样的泛型参数不能直接被实例化,因为当前还不确定E是什么类型。所以应该 private E[] data = (E[]) n
2021-10-11 22:55:06
657
原创 Collection和Map接口的使用
Collection接口(增删改查等)package jihe;import javafx.print.Collation;import java.util.ArrayList;import java.util.Arrays;import java.util.Collection;/** * @program: 1010 * @description * @author: YouName * @create: 2021-10-10 14:29 **/public class
2021-10-10 15:56:00
87
原创 java-异常
java处理异常的语法 try { //可能出现异常的代码 }catch (参数:异常的类型 e) { //捕获try中可能出现的异常 } 当程序出现异常时,由catch进行捕获,程序自己来处理异常,程序可以继续向下执行。 [注]用try catch 处理异常时注意:(1)catch块当中,一定要捕获相应的异常,如果程序抛出的异常在catch块中不能被捕获,那么就会交给JVM处理,导致程序中断。(2)可以通过catch捕获多个异常。(3)不建议直接捕
2021-10-07 20:21:38
69
原创 java克隆接口
class Money implements Cloneable{ double money = 12.5; //重写clone方法 @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); }}//实现克隆接口 class Person implements Cloneable{ publ..
2021-10-06 22:07:59
240
原创 java-双链表
class Node { public int data; public Node prev;//前驱信息 public Node next;//后继信息 public Node (int data) { this.data = data; }}public class MyLinkedList { public Node head; public Node tail;//尾巴 //1.头插法 public .
2021-10-03 16:14:48
62
原创 java-双链表
public class TestDemo { //18.输入两个链表,找出他们的第一个公共节点(相交的起始节点) /* * 3.长的单链表先走差值 * */ public static Node getIntersectionNode(Node headA,Node headB) { //18.求两个单链表的长度,计算两个长度差 int lenA = 0; int lenB = 0; Node p.
2021-09-30 14:37:09
59
原创 java-单链表
class Node { public int data;//0 public Node next;//null public Node(int data) { this.data = data; this.next = null; }}public class MyLinkedList { public Node head;//保存单链表的头节点的引用 null //1.头插法-将一个data插入到单链表的头部..
2021-09-28 21:47:19
79
原创 java-编写一个计算器and交换实参的值
编写一个calculator,有两个属num1,num2,这两个数据的值不能再定义的同时初始化,最后实现加减乘除。//计算器class Calculator { private int num1; private int num2; public void setNum1(int num1) { this.num1 = num1; } public void setNum2(int num2) { this.num2 = nu
2021-09-28 16:44:26
92
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人