![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 63
编程牧马人
公众号:「编程牧马人」一个菜鸟的成长之路...
展开
-
JSONObject 使用方法小结
JSONObject 使用方法小结package com.sun.zuul.jsonObject;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject;import java.util.*;public class JsonObjectTest { /** * put() 方法的第一个参数为 key 值,原创 2022-03-10 15:50:13 · 939 阅读 · 0 评论 -
Dubbo SPI机制学习总结(持续更新...)
参考文章:Dubbo的SPI机制分析首先来看看 Java SPI 的机制Java SPI 起初是提供给厂商做插件开发用的,例如数据库驱动java.sql.Driver,市面上各种各样的数据库,不同的数据库底层协议都不一样,为了方便开发者调用数据库而不用关心它们之间的差异,因此必须提供一个统一的接口来规范和约束这些数据库。有了统一的接口,数据库厂商就可以按照规范去开发自己的数据库驱动了。厂商开发好数据库驱动了,应用如何使用呢?该使用哪个驱动呢?以 MySQL 为例,早期手写 JDBC 时,开发者需要手动原创 2022-03-10 09:58:24 · 1184 阅读 · 0 评论 -
最简单的Servlet 编程
Servlet入门编写HTTP服务器其实是非常简单的,只需要先编写基于多线程的TCP服务,然后在一个TCP连接中读取HTTP请求,发送HTTP响应即可。但是,要编写一个完善的HTTP服务器,以HTTP/1.1为例,需要考虑的包括:识别正确和错误的HTTP请求;识别正确和错误的HTTP头;复用TCP连接;复用线程;IO异常处理;…这些基础工作需要耗费大量的时间,并且经过长期测试才能稳定运行。如果我们只需要输出一个简单的HTML页面,就不得不编写上千行底层代码,那就根本无法做到高效而可靠地开发。转载 2022-03-09 16:22:05 · 697 阅读 · 0 评论 -
编写HTTP Server
我们来看一下如何编写HTTP Server。一个HTTP Server本质上是一个TCP服务器,我们先用TCP编程的多线程实现的服务器端框架:package com.sun.zuul.http;import java.io.*;import java.net.ServerSocket;import java.net.Socket;import java.nio.charset.StandardCharsets;public class HttpServer { public stat原创 2022-03-09 15:52:08 · 197 阅读 · 0 评论 -
BufferedReader使用方法简单记录
场景从文件中读取数据public static void main(String[] args) { System.out.println("hello, world s ".toCharArray()); // 打印结果: "hello, world s "; try { /** * 读到缓存 */ char[]原创 2022-03-09 10:21:18 · 1743 阅读 · 0 评论 -
102. Binary Tree Level Order Traversal
102. Binary Tree Level Order Traversal二叉树的层序遍历import java.util.LinkedList;import java.util.List;import java.util.ArrayList;import java.util.Queue;class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() {} TreeNode(int原创 2022-03-07 19:55:24 · 289 阅读 · 0 评论 -
JoinPoint和ProceedingJoinPoint区别
本文主要介绍JoinPoint的常用方法原文链接:JoinPoint和ProceedingJoinPoint有啥不一样?在以一个实际例子演示如何使用注解实现AOP装配时,为了监控应用程序的性能,我们定义一个性能监控的注解:@Target(METHOD)@Retention(RUNTIME)public @interface MetricTime { String value();}在需要被监控的关键方法上标注该注解:@Componentpublic class UserServi转载 2021-03-08 17:02:08 · 3925 阅读 · 0 评论 -
Spring JdbcTemplate详解
Spring JdbcTemplate使用实例JDBC 基础Java程序使用JDBC接口访问关系数据库的时候,需要以下几步:创建全局DataSource实例,表示数据库连接池;在需要读写数据库的方法内部,按如下步骤访问数据库:从全局DataSource实例获取Connection实例;通过Connection实例创建PreparedStatement实例;执行SQL语句,如果是查询,则通过ResultSet读取结果集,如果是修改,则获得int结果。正确编写JDBC代码的关键是使用try转载 2021-03-07 19:31:55 · 586 阅读 · 0 评论 -
Generated keys not requested. You need to specify Statement.RETURN_GENERATED_KEYS to Statement.execu
问题java.sql.SQLException: Generated keys not requested. You need to specify Statement.RETURN_GENERATED_KEYS to Statement.executeUpdate(), Statement.executeLargeUpdate() or Connection.prepareStatement(). at com.mysql.cj.jdbc.exceptions.SQLError.createSQLEx原创 2021-03-05 12:00:47 · 1519 阅读 · 0 评论 -
如何创建并配置一个第三方Bean?
问题:如果我们想给UserService注入HikariDataSource,但是这个类位于com.zaxxer.hikari包中,并且HikariDataSource也不可能有@Component注解,如何告诉IoC容器创建并配置HikariDataSource?或者换个说法,如何创建并配置一个第三方Bean?源码如下:Userpackage com.sun.bean;/** * @Auther Mario * @Date 2021-02-23 15:50 * @Version 1.0原创 2021-02-24 12:39:08 · 584 阅读 · 2 评论 -
javax.net.ssl.SSLException: closing inbound before receiving peer‘s close_notify
问题EXCEPTION STACK TRACE:** BEGIN NESTED EXCEPTION ** javax.net.ssl.SSLExceptionMESSAGE: closing inbound before receiving peer's close_notifySTACKTRACE:javax.net.ssl.SSLException: closing inbound before receiving peer's close_notify at java.base/s原创 2021-02-24 10:15:03 · 339 阅读 · 0 评论 -
byte到16进制转换
byte[] bytes = {-1, 0, 1, 2, 3 }; StringBuilder sb = new StringBuilder(); for (byte b : bytes) { sb.append(String.format("%02X ", b)); } System.out.println(sb.toString()); // prints "FF 00 01 02 03 "%[flags][width]conversion原创 2021-02-22 11:21:14 · 9424 阅读 · 0 评论 -
Java IO基础操作
点击阅读原文Java IO 基础操作java IO基础以下知识点均来源于廖雪峰官方网站 https://www.liaoxuefeng.com/wiki/1252599548343744/1375100746072098IO是指Input/Output,即输入和输出。以内存为中心:Input指从外部读入数据到内存,例如,把文件从磁盘读取到内存,从网络读取数据到内存等等。Output指把数据从内存输出到外部,例如,把数据从内存写入到文件,把数据从内存输出到网络等等。为什么要把数据读原创 2021-02-02 10:28:22 · 237 阅读 · 2 评论 -
MVC框架原理详解
原文链接一起手撕MVC框架!今天来一次手撕MVC框架,主要难点在于使用反射机制调用Controller方法。以下知识点均来源于廖雪峰官方网站https://www.liaoxuefeng.com/wiki/1252599548343744/1337408645759009通过结合Servlet和JSP的MVC模式,我们可以发挥二者各自的优点:Servlet实现业务逻辑;JSP实现展示逻辑。但是,直接把MVC搭在Servlet和JSP之上还是不太好,原因如下:Servlet提供的接口原创 2021-01-28 09:54:25 · 1051 阅读 · 0 评论 -
Caused by: java.lang.IllegalArgumentException: The servlets named [com.sun.framework.DispatcherServl
Caused by: java.lang.IllegalArgumentException: The servlets named [com.sun.framework.DispatcherServlet] and [com.suntest.framework.DispatcherServlet] are both mapped to the url-pattern [/] which is not permitted原因同一个web项目下有两个Servlet映射到同一路径{"/"}上解决方法把要原创 2021-01-27 13:09:32 · 646 阅读 · 0 评论 -
java动态代理
原文链接神马?你还不知道动态代理?动态代理先看一下Java中class和interface的区别:class可以实例化(非abstract)interface不能实例化所有interface类型的变量总是通过向上转型并指向某个实例的:CharSequence cs = new StringBuilder();那么有没有可能不编写interface的实现类,直接在运行期间创建一个interface的实现类呢?有可能,那就是java动态代理机制。所谓的动态代理并不是什么高大上的名词,直接从字原创 2021-01-22 14:49:36 · 194 阅读 · 0 评论 -
The origin server did not find a current representation for the target resource or is not willing to
错误码:200 OK:表示成功;301 Moved Permanently:表示该URL已经永久重定向;302 Found:表示该URL需要临时重定向;304 Not Modified:表示该资源没有修改,客户端可以使用本地缓存的版本;400 Bad Request:表示客户端发送了一个错误的请求,例如参数无效;401 Unauthorized:表示客户端因为身份未验证而不允许访问该URL;403 Forbidden:表示服务器因为权限问题拒绝了客户端的请求;404 Not Found:表原创 2021-01-19 10:28:57 · 200 阅读 · 0 评论 -
聊一聊网络编程中RMI远程调用
原文链接聊一聊网络编程中RMI远程调用1.网络编程网络编程是开发中经常需要用到的一个点,也是面试中必考题,本节对RMI远程调用做一下简单的演示。❝以下知识点均来源于廖雪峰官方网站https://www.liaoxuefeng.com/wiki/1252599548343744/1323711850348577❞Java的RMI远程调用是指一个JVM中的代码可以通过网络实现远程调用另一个JVM的某个方法。RMI是**「Remote Method Invocation」**的缩写。提供服务的一方我转载 2021-01-19 09:29:07 · 211 阅读 · 0 评论 -
HTTP编程
❝以下知识点均来源于廖雪峰官方网站https://www.liaoxuefeng.com/wiki/1252599548343744/1319099982413858❞浅谈HTTP协议什么是HTTP?HTTP就是目前使用最广泛的Web应用程序使用的基础协议,例如,浏览器访问网站,手机App访问后台服务器,都是通过HTTP协议实现的。HTTP是**「HyperText Transfer Protocol** 的缩写,翻译为超文本传输协议,它是基于TCP协议之上的一种请求-响应协议。我们来看一下浏览器请.转载 2021-01-18 18:41:24 · 217 阅读 · 0 评论 -
Stream提供的操作方法
我们把Stream提供的操作分为两类:转换操作和聚合操作。除了前面介绍的常用操作外,Stream还提供了一系列非常有用的方法。/** * @Auther Mario * @Version 1.0 * @description */public class Main { public static void main(String[] args) { //排序 List<String> list = List.of("Orange", "app原创 2021-01-14 14:29:35 · 271 阅读 · 0 评论 -
Stream.reduce()对Java对象进行操作
reduce()对Java 对象的操作除了可以对数值进行累积计算外,灵活运用reduce()也可以对Java对象进行操作。下面的代码演示了如何将配置文件的每一行配置通过map()和reduce()操作聚合成一个Map<String, String>:/** * @Auther Mario * @Date 2021-01-13 16:47 * @Version 1.0 * @description * 流的特点是每个元素只遍历一次,聚合操作无非就是一个遍历+累加计算的过程,内部已经自原创 2021-01-14 11:33:49 · 1306 阅读 · 0 评论 -
Map.putAll()用法
public class Main { public static void main(String[] args) { Map<Integer,String> map = new HashMap<>(); map.put(1,"google"); map.put(2,"baidu"); map.put(3,"weibo"); map.put(4,"zhihu"); System原创 2021-01-14 11:16:15 · 666 阅读 · 0 评论 -
使用map把String[]转换为LocalDate
使用map把String[]转换为LocalDatepublic class Main { public static void main(String[] args) { String[] array = new String[] { " 2019-12-31 ", "2020 - 01-09 ", "2020- 05 - 01 ", "2022 - 02 - 01", " 2025-01 -01" }; // 请使用map把String[]转换为LocalDate并打印: //原创 2021-01-13 16:09:30 · 677 阅读 · 1 评论 -
函数式编程中的方法引用
使用Lambda表达式,我们就可以不必编写FunctionalInterface接口的实现类,从而简化代码:Arrays.sort(array, (s1, s2) -> { return s1.compareTo(s2);});静态方法引用实际上,除了Lambda表达式,我们还可以直接传入方法引用。例如:import java.util.Arrays;public class Main { public static void main(String[] args) {原创 2021-01-12 18:47:18 · 316 阅读 · 0 评论 -
Usage of API documented as @since 1.9+ less... (Ctrl+F1) Inspection info: This inspection finds all
问题如下:Usage of API documented as @since 1.9+ less… (Ctrl+F1)Inspection info: This inspection finds all usages of methods that have @since tag in their documentation. This may be useful when development is performed under newer SDK version as the target p原创 2021-01-12 17:28:47 · 2770 阅读 · 0 评论 -
Java多线程基础(下)
紧接上一篇Java 多线程基础(上),本文目录结构如下:8、使用ReentrantLock9、使用Condition10、使用ReadWriteLock11、使用StampedLock12、使用Concurrent集合13、使用Atomic14、使用线程池15、使用Future16、使用CompletableFuture17、使用ForkJoin18、使用ThreadLocal8 使用ReentrantLock我们知道Java语言直接提供了synchronized关键字用于加锁,原创 2021-01-09 18:01:31 · 202 阅读 · 0 评论 -
Java 多线程基础(上)
多线程一直是Java 面试中常考的基础知识,之前一直没有系统的学习过,这段时间对着廖雪峰大师的讲义从新把该知识内容整理一遍,该文章系列内容全部来源于廖雪峰官方网站Java 基础教程。原文链接:Java 多线程基础(上)Java多线程基础(下)系列目录如下:1、 线程创建2、 线程的状态3、 中断线程4、 守护线程5、 线程同步6、 死锁7、 使用wait和notify1、线程创建//方法一:从Thread派生一个自定义类,然后覆写run()方法:class MyThread e原创 2021-01-09 16:32:11 · 209 阅读 · 0 评论 -
Redis实现分布式锁的方法总结
这两天在看分布式锁相关的知识,看到一篇文章,分享给大家,附上原文链接https://www.jb51.net/article/118312.htm这篇文章主要介绍了Redis实现分布式锁的几种方法总结的相关资料, Redis实现与Zookeeper实现和数据库实现,需要的朋友可以参考下。Redis实现分布式锁的几种方法总结分布式锁是控制分布式系统之间同步访问共享资源的一种方式。在分布式系统中,常常需要协调他们的动作。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候转载 2021-01-08 19:24:46 · 300 阅读 · 0 评论 -
网络编程基础之TCP编程
浅谈HTTP协议以下知识点均来源于廖雪峰官方网站https://www.liaoxuefeng.com/wiki/1252599548343744/1319099982413858什么是HTTP?HTTP就是目前使用最广泛的Web应用程序使用的基础协议,例如,浏览器访问网站,手机App访问后台服务器,都是通过HTTP协议实现的。HTTP是HyperText Transfer Protocol的缩写,翻译为超文本传输协议,它是基于TCP协议之上的一种请求-响应协议。我们来看一下浏览器请求访问某个网原创 2021-01-08 15:45:24 · 272 阅读 · 0 评论 -
网络编程之UDP编程
昨天学习了TCP编程,今天来康康UDP编程。以下知识点均来源于廖雪峰官方网站https://www.liaoxuefeng.com/wiki/1252599548343744/1323711850348577UDP编程和TCP编程相比,UDP编程就简单得多,因为UDP没有创建连接,数据包也是一次收发一个,所以没有流的概念。在Java中使用UDP编程,仍然需要使用Socket,因为应用程序在使用UDP时必须指定网络接口IP和端口号。注意:UDP端口和TCP端口虽然都使用0~65535,但他们是两套原创 2021-01-08 15:23:30 · 357 阅读 · 0 评论