- 博客(74)
- 收藏
- 关注
原创 A,B,C三个人是好朋友,每个人手里都有一些糖果,我们不知道他们每个人手上具体有多少个糖果,但是我们知道以下的信息: A - B, B - C, A + B, B + C. 这四个数值.每个字母代表每
这道题目的实质是:判断三元一次方程组是否有解及求解。把题目条件用方程式表示:A-B=Y1;B-C=Y2;A+B=Y3;B+C=Y4;用消元法求解:A=(Y1+Y3)/2;B=(Y3-Y1)/2=(Y2+Y4)/2;C=(Y4-Y2)/2;public class Main1 {public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.
2020-08-23 22:36:27 372
原创 使用队列实现栈
push(x) – 元素 x 入栈pop() – 移除栈顶元素top() – 获取栈顶元素empty() – 返回栈是否为空public class Test2 {private Queue<Integer> queue1 = new LinkedList<>();private Queue<Integer> queue2 = new LinkedList<>();//入栈public void push(int x){ queue1
2020-08-22 21:43:09 153
原创 输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”
输入:每个测试输入包含2个字符串输出:输出删除后的字符串输入:They are studentsaeiou输出:Thy r stdnts思路:直接简单暴力一点,传进来两个字符串,str1是要根据str2来删除的,先将str1转成char类型数据保存数组里面,然后for循环,用contains方法检测只要不是str2里面的字符串就直接输出import java.util.Scanner;public class Main {public static void main(String[] ar
2020-08-21 23:26:21 682
原创 对于一个字符串,请设计一个算法,判断其是否为一个合法的括号串。 给定一个字符串A和它的长度n,请返回一个bool值代表它是否为一个合法的括号串。
测试用例:"(()())",6返回:true测试用例:"()a()()",7返回:false测试用例:"()(()()",7返回:false思路:1.碰到")“开始弹出栈顶的”(",如果此时栈为空,则返回false2.碰到其他内容直接返回false3.字符串结尾时,栈非空返回falsepublic class Main2 {public static boolean chkParenthesis(String string, int n){ Stack<Character&
2020-08-20 21:06:41 494
原创 读入一个字符串str,输出字符串str中的连续最长的数字串
输入:abcd12345ed125ss123456789输出:123456789思路:用max表示经过的数字长度最大值,count表示数字计数器,当为字母时重置为0,end表示数字尾部,每次满足数字时,对max进行判断,当max小于于count时,更新max和endpublic class Main1 {public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (s
2020-08-20 21:03:15 886
原创 面向对象编程中 super、final、this、abstract关键字和 interface接口详解
一、this关键字this:表示当前对象的引用1.在静态方法内部,不能使用this2.this通过点号,可以访问普通的成员变量3.this可以再构造方法中,调用另一个构造方法(代码必须放在第一行),只能调用一次二、super关键字super:代表父类对象的引用1.super() 表示调用父类的构造方法(必须放在第一行)2.super.data 调用父类属性3.super.func() 调用父类的成员方法三、final关键字1.final修饰的变量或者字段,表常量(不能被修改)2.fi
2020-08-19 20:59:24 476
原创 详解重写和重载的区别 看完不会举报我
一、方法的重载1.方法名相同2.方法参数不同(个数、类型)3.方法的返回值类型不影响重载为了更直观的了解 我举一个代码的例子class Test{public static void main(String[] args) { int a = 10; int b = 20; int ret = add(a, b); System.out.println("ret = " + ret); double a2 = 10.5; double b2 =
2020-08-18 22:24:02 118
原创 二维数组的实现及打印
以int类型为例public class Array {public static void main(String[] args) {int[][] array = new int[][]{{1,2,3,},{4,5,6}}; //第一种for循环打印 for (int i = 0; i < array.length; i++) { for (int j = 0; j < array[i].length; j++) { System
2020-08-18 16:47:13 531
原创 “回文串”是一个正读和反读都一样的字符串。比如“level”或者“noon”等等就是回文串。花花非常喜欢这种拥有对称美的回文串,生日的时候她得到两个礼物分别是字符串A和字符串B。
“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。花花非常喜欢这种拥有对称美的回文串,生日的时候她得到两个礼物分别是字符串A和字符串B。现在她非常好奇有没有办法将字符串B插入字符串A使产生的字符串是一个回文串。你接受花花的请求,帮助她寻找有多少种插入办法可以使新串是一个回文串。如果字符串B插入的位置不同就考虑为不一样的办法。例如:A = “aba”,B = “b”。这里有4种把B插入A的办法:在A的第一个字母之前: “baba” 不是回文在第一个字母‘a’
2020-08-17 16:43:30 2354
原创 单链表:编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前
public Node partition(int x){ //bs、be分别为小于x节点左侧的首和尾、 //as、ae分别为大于x节点右侧的首和尾 Node bs = null; Node be = null; Node as = null; Node ae = null; Node cur = this.head; while (cur != null){ if (cur.data < x){
2020-08-17 16:09:31 2628
原创 新手福利:linux最基础的最常用最实用的命令 全部干货,不说一句废话
一、基本指令**ls/ll:**罗列目录的所有文件与信息**cd:**切换目录**pwd:**查看目录所在的绝对路径**touch:**创建空文件,如果文件存在只更新文件的最后修改时间**cat:**查看文件内容(查看小文件)**echo:**显示内容**mkdir:**创建目录**rm:**删除(谨慎使用)**mv:**移动文件/重命名文件**cp:**复制文件**man:**查看帮助手册**less:**查看文件内容,支持翻页,打开大文件时效率高(延时加载,不会
2020-08-17 00:00:51 105
原创 详解TCP协议(四),保活机制(心跳包)
九、粘包问题严格粘包问题不是TCP自身机制,而是面向字节流传输所具备的共性问题粘包:粘的应用层数据报,导致处理数据的时候,容易读取半个应用层数据报HTTP协议基于TCP的应用层协议,自己会处理好粘包问题:1.对于GET请求,分隔符就是空行2.对于POST请求,Content-length指定包的长度十、保活机制1.进程崩溃,这种情况下,TCP连接会正常四次挥手(只要进程退出,都会自动关闭相关的文件)2.主机关机(按流程关机),关机时会强制先杀进程,杀进程过程中就进行四次挥手3.主机断电/网
2020-08-16 23:42:32 1330
原创 JDBC编程的基本流程(代码模板)
以插入用户操作为例:DBUtil类及其相关方法参考上一篇文章public void add(User user) { // JDBC 编程的基本流程 // 1. 先获取和数据库的连接(DataSource) Connection connection = DBUtil.getconnection(); // 2. 拼装 SQL 语句(PrepareStatement) String sql = "insert into user value(null,?,?,?)
2020-08-14 23:55:30 708
原创 一般项目,创建一个DBUtil类进行封装,管理连接(代码模板)
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;import javax.sql.DataSource;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;// DBUtil 本质上是一个管理了单例的 DataSource 的类public class DBU
2020-08-14 23:51:08 189
原创 详解TCP协议(三)
五、流量控制窗口大小不能无限大,传输速率太快,接收方可能处理不过来,根据接收方的处理能力来反向制衡发送方的发送速率(窗口大小)六、拥塞控制和流量控制共同决定发送方的窗口大小的考虑网络传输路径上的拥堵程度(动态变化的)七、延时应答为了提高效率,在流量控制的基础上,尽量返回一个合理的但是又比较大的窗口,延时应答其实就是让ack的发送时间晚一会(不影响可靠性的前提下),延时时间中就会给应用程序提供更多的消费数据的机会,当延时时间到了,再发ack,得到的窗口大小更大(缓冲区剩余空间更大)八、捎带应答
2020-08-13 23:47:17 130
原创 详解TCP协议(二) 详解滑动窗口下丢包情况
上一篇讲完三次握手和四次握手,接下来是滑动窗口 四、滑动窗口首先滑动窗口是在保证可靠性的前提下,让我们进一步提高传输效率。如果没有滑动窗口的机制:传输N份文件,就需要等待N次应答时间,总的传输时间=N份传输时间+N份应答传输时间滑动窗口的本质就是批量传输总的传输时间:N分数据传输时间叠加成一份时间,N份应答传输时间,重叠成一份时间窗口大小:不等待ACK的情况下,批量发送最大数据的量如果在在滑动窗口的机制下传送数据发生丢包:1.ACK丢包如上图,数据包已经到达,ACK丢了如果丢失ACK
2020-08-12 23:33:33 1051
原创 详解TCP协议(一) 全面解析三次握手和四次握手
一、确认应答(ACK)机制TCP面向字节流,TCP会将每个字节的数据都进行编号,即序列号,每一个ACK都带有对应的确认序列号。二、超时重传机制确认应答是比较理想的情况,数据在传输过程中,可能会丢包丢包:1.发送请求丢失2.回复的ack丢失不管哪种情况都会触发重新传输报文。原理:当发送了一条数据之后,TCP内部就会自动启动一个定时器,达到一定时间也没有收到ack,定时器就会触发重传消息机制。三、连接管理机制1.建立连接 三次握手过程ACK:确认应答 SYN:同步报文段(尝试与对
2020-08-11 23:55:51 470
原创 锁优化:以Sychronized为例 详解
1.锁消除编译器+JVM会根据代码运行的情况智能判定当前的锁是否必要,如果不必要,就直接把锁的代码清除。2.偏向锁第一个尝试加锁的过程,不会真的加锁,而是进入偏向锁状态(很轻量的标记),直到其他线程竞争这把锁才会取消偏向锁状态,真正进行加锁。3.自旋锁真的有多个线程竞争锁的时候,偏向锁状态不会取消,此时线程使用自旋锁的方式来尝试进行获取锁。自旋锁能保证让其他想竞争锁的线程尽快获取到锁,但是会付出一定的CPU消耗4.锁膨胀当锁竞争更加激烈,此时就会从自旋锁状态膨胀成重量级锁(挂起等待锁)5.
2020-08-10 10:56:36 131
原创 详解HashMap、HashTable、ConcurrentHashMap存在的区别
1.本质上的:HashMap是线程不安全的HashTable、ConcurrentHashMap是线程安全的2.HashTable简单粗暴使用Sychronized进行加锁一个HashTable实例内部只有一把锁,这就意味着只要针对这个实例进行操作,都需要先申请锁,冲突概率比较大,效率较低。3.ConcurrentHashMap内部有多把锁a、使用多把锁降低冲突概率b、充分利用CAS操作,例如:size++直接基于CAS完成c、更优化的扩容操作HashTable的扩容是一鼓作气,某个操作插入
2020-08-10 10:44:49 134
原创 保姆级教程 通过git 上传本地代码到idea
以下操作在git配置好的情况下。1.在桌面上创建一个空白的文件夹2.将要上传的代码拷贝到创建好的文件夹3.直接鼠标右键点击刚才创建好的文件选择 Git Bush Here4.关联自己的github账号git init是将这个文件变成Git能够管理的仓库输入玩这段命令之后,点开刚才创建的文件夹会出现.Git文件(隐藏文件)5.输入以下命令 git add .是将刚才的隐藏文件 .Git添加进仓库git commit -m " xxxxxxxx"这是写一段话描述你上传文件6.打开你
2020-08-05 16:46:51 247
原创 JVM详解(一)
一、组成部分1.类加载器2.执行引擎(解释直接字节码)3.动态内存管理器二、JVM内存区域划分JVM在启动之后会从操作系统申请一大块内存,再针对这个内存划分出一些区域1.堆(运行性常量池)new 的对象放在堆上(成员变量),1.8开始运行时常量池放在堆中2.方法区加载好的类放在方法区,静态成员3.栈(JVM栈和本地方法栈)局部变量4.程序计数器存的地址,描述当前线程接下来执行的指令在内存的哪个地方一个Java进程中,可能包含着多个线程,多个线程之间,共用同一份堆和方法区,但是每
2020-08-04 12:19:29 111
原创 简单登陆页面的前端代码实现
登录页面<!-- 1. 导入CSS的全局样式 --><link href="css/bootstrap.min.css" rel="stylesheet"><!-- 2. jQuery导入,建议使用1.9以上的版本 --><script src="js/jquery-3.1.1.min.js"></script><!-- 3. 导入bootstrap的js文件 --&...
2020-08-01 18:18:19 2480
原创 在linux上配置MariaDB(mysql)
以下操作都以 root 用户进行操作!!!一、先按照以下四步指令进行yum install -y mariadb-server(安装 mariadb 服务)yum install -y mariadb (安装 mariadb 命令行客户端)yum install -y mariadb-libs (安装 mariadb C library)yum install -y mariadb-devel (安装 mariadb 开发包)二、然后是配置文件环节1.更改 /etc/my.cnf.d/cli
2020-07-30 09:44:35 239
原创 ArrayList的基本方法
import java.util.Arrays;public class ArrayList {public int[] array = new int[100];public int usedSize;public ArrayList() { this.array = array; this.usedSize = usedSize;//实际使用长度}//打印顺序表public void display() { for (int i = 0; i < th
2020-07-29 10:38:18 175
原创 定时器的实现
import java.util.concurrent.PriorityBlockingQueue;/** 定时器*/public class Test1 {//优先队列中的元素必须是可比较的//比较规则的指定主要是两种方式//1.让Task实现Comparable接口//2.让优先级队列构造的时候,传入一个比较器对象(Comparator)static class Task implements Comparable{//Runnable 中有一
2020-07-28 23:49:57 102
原创 用DBUtils来封装DataSource且 连接和断开方法模板
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;import javax.sql.DataSource;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;public class DBUtils {private static volatile DataSo
2020-07-27 15:38:27 283
原创 linux搭建Java部署环境:JDK
直接在linux自带的应用商店 输入yum list | grep [软件包关键字]选择对应的jdk版本之后,再选择-devel.x86_64ctrl+ins 复制名字 然后输入 yum install jdk版本( shift+ins粘贴)下载之后 验证下载成功输入javac...
2020-07-26 11:05:17 88
原创 JDBC
import javax.sql.DataSource;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;public class JDBCtest2 {// 1. 创建 DataSource 对象public static void main(String[] args) throws SQLException
2020-07-25 12:13:06 68
原创 maven配置对应版本的sql和servlet
https://mvnrepository.com上面链接是maven的中央仓库,直接下载需要的,复制粘贴即可
2020-07-23 09:35:01 205
原创 HttpServer2response
import java.io.BufferedWriter;import java.io.IOException;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.util.HashMap;import java.util.Map;// 表示一个 HTTP 响应, 负责构造// 进行序列化操作public class HttpResponse {private String version =
2020-07-18 10:11:59 165
原创 HttpServer2request
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.util.HashMap;import java.util.Map;// 表示一个 HTTP 请求, 并负责解析.public class HttpRequest {private String method;// /index.htm
2020-07-18 10:10:56 261
原创 HttpServer2
import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class HttpServer2 {private ServerSocket serverSocket = null;public HttpServer2(in
2020-07-18 10:10:06 214
原创 Http服务器最简单版本
import java.io.*;import java.net.ServerSocket;import java.net.Socket;import java.util.HashMap;import java.util.Map;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class HttpServer1 {// HTTP 底层要基于 TCP 来实现. 需要
2020-07-17 11:12:20 84
原创 TCP下的服务器实现
import java.io.*;import java.net.ServerSocket;import java.net.Socket;public class TcpEchoServer {// 1. 初始化服务器// 2. 进入主循环// 1) 先去从内核中获取到一个 TCP 的连接// 2) 处理这个 TCP 的连接// a) 读取请求并解析// b) 根据请求计算响应// c) 把响应写回给客户端private ServerSocket ser
2020-07-16 19:42:04 90
原创 UDP协议的服务器
import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.SocketException;public class Test_DatagramSocket {// 对于一个服务器程序来说, 核心流程也是要分成两步.// 1. 进行初始化操作 (实例化 Socket 对象)// 2. 进入主循环, 接受并处理请求. (主循环就是一个 “死循环”)
2020-07-15 12:02:49 205
原创 服务器
public class Test_DatagramSocket {// 对于一个服务器程序来说, 核心流程也是要分成两步.// 1. 进行初始化操作 (实例化 Socket 对象)// 2. 进入主循环, 接受并处理请求. (主循环就是一个 “死循环”)// a) 读取数据并解析// b) 根据请求计算响应// c) 把响应结果写回到客户端.private DatagramSocket socket = null;//int port服务器必须绑定一个端口(服务器绑定了端口之后
2020-07-14 21:00:49 146
原创 字节流文件的复制
public class TestIO {public static void main(String[] args) throws IOException {copyFile(“d:/testFile/kenan.jpg”, “d:/testFile/kenan2.jpg”);}private static void copyFile2(String srcPath, String destPath) {FileInputStream fileInputStream = null;FileOu
2020-07-02 13:28:53 342
原创 递归打印当前目录以及内部所有文件
public class TestFile {public static void main(String[] args) throws IOException {File file = new File(“d:/testFile”);listAllFiles(file);}private static void listAllFiles(File x){if (x.isDirectory()){File[] files = x.listFiles();for (File xxx: file
2020-06-29 13:41:39 163
原创 春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发现,某个红包金额出现的次数超过了红包总的一半。请帮小明找到该红包金额。
春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发某个红包金额出现的次数超过了红包总的一半。请帮小明找到该红包金额.写出具体算法思路和代码实现,要求算法尽可能高效。给定一个红包的金额数组gifts及它的大小n, 请返回所求红包的金额。若没有金额超过总数的一半,返回0。public class Test2 {public int getValue(int[] gifts, int n) { int key = gifts[0]; int count = 1; f
2020-06-22 22:58:33 1289 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人