JavaBasic
weixin_45215505
这个作者很懒,什么都没留下…
展开
-
urlEncoder和urlDecoder的作用和使用
背景说明:用rsa加密了一个参数传到前端,前端通过get请求将参数放在url中传给后端,结果后端解密的时候失败了,是因为浏览器会自动对url中的特殊字符进行转义,所以我们需要将数据以一种格式进行编码,然后以相同的格式进行解码,这样就能够得到原始数据。URLEncoder.encode(String s, String enc)使用指定的编码机制将字符串转换为 application/x-www-form-urlencoded 格式URLDecoder.decode(String s, Stri转载 2021-12-29 16:30:31 · 519 阅读 · 0 评论 -
如何解析URI到字典中
引入httpclient依赖<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.0.2</version> </dependency>代码示例public.原创 2021-12-29 16:09:37 · 261 阅读 · 0 评论 -
get和Post的区别是什么
相同点:POST和GET都是向服务器提交数据,并且都会从服务器获取数据不同点:传输方式:get通过地址栏传输,post通过报文传输传送长度:get参数有长度限制,而post无限制GET产生一个TCP数据包(对于GET方式的请求,浏览器会把http header和data一起发送出去,服务器相应200返回数据)POST产生两个TCP数据包(对于POST,浏览器先发送header,服务器相应100 continue,浏览器再次发送data,服务器相应200 ok 返回数据)get请求参数会被完成原创 2020-12-21 14:07:02 · 127 阅读 · 0 评论 -
为什么是List list = new ArrayList() 而不直接用ArrayList
为什么是List list = new ArrayList(),而不直接用ArrayList?编程是要面向对象编程,针对抽象(接口),而非具体。List 是接口,ArrayList是实现。实现List接口的有ArrayList、LinkedList、Vector等,所以用哪个就直接new 一个接口实现这是一种很好的设计模式.一个接口有多种实现,这种写法是java面向对象的一种思想,依赖倒置原则,即依赖于抽象不依赖于实现(具体)。给调用者提供的应该是接口或者抽象类,而实现者可以实现或者继承接口或者抽象原创 2020-12-14 14:19:55 · 532 阅读 · 0 评论 -
定义和使用注解
如何定义Annotation第一步,用@interface定义注解:第二步,添加参数、默认值:第三步,用元注解配置注解:1:定义一个注解类@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.FIELD)public @interface Range { int min() default 0; int max() default 255;}2:定义bean对象public class Person {原创 2020-12-11 15:12:13 · 106 阅读 · 0 评论 -
如何编写一个单例的类
一共分三步定义一个静态的类对象编写私有的构造函数编写一个静态方法获取这个静态对象原创 2020-11-20 10:32:11 · 150 阅读 · 0 评论 -
Gson序列化和反序列化以及泛型以及byte字节流
import com.google.gson.Gson;import java.io.Serializable;public class BodyCodec implements IBodyCodec {private static Gson gson = new Gson();@Overridepublic <T> byte[] serialize(T obj) throws Exception { //1. jdk 序列化 //2. json //3.自定义算法(Hessi原创 2020-11-19 16:58:20 · 2303 阅读 · 0 评论 -
List和Array的相互转化
1:List转化成Array方法1:用toArray() List<String> list =new ArrayList<>(); list.add("apple"); list.add("pear"); list.add("banana"); String[] strings=list.toArray(new String[list.size()]); for(String s:strings){ System.原创 2020-06-16 12:14:36 · 964 阅读 · 0 评论 -
Mac下的环境变量配置
https://www.jianshu.com/p/f1adedbda0d3使用惯了win,在用mac系统添加环境变量总觉得麻烦,而且几个配置文件也没弄到底有什么区别,今天就来总结一下1.环境变量的作用:我们先来看这样的一个使用场景1,我们有一个程序Java,需要读取某个文件(/data/file.txt)。 那么我们在运行的时候是不是需要做如下的步骤:cd 到Java的目录下;执行Java命令;但是,当我们需要同时使用多个工具的时候,比如又有java、maven、git等等,而且是多台机器的时转载 2020-06-09 21:32:12 · 296 阅读 · 0 评论 -
JavaBasic:List的求交集和去重操作
// 求交集 List<String> list1=new ArrayList<>(); List<String> list2=new ArrayList<>(); list1.add("Hello"); list1.add("Lucy"); list1.add("Lucy"); System.out.println(list1); l原创 2020-06-09 18:06:19 · 90 阅读 · 0 评论 -
动态代理
package com.pt;import com.sun.xml.internal.xsom.XSUnionSimpleType;import org.aopalliance.intercept.Invocation;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class Main { public原创 2020-06-09 12:48:29 · 74 阅读 · 0 评论 -
load properties文件方式的两种方式
load properties文件方式方式一 props = new Properties(); //获取Properies对象的流对象 InputStream in = BeanFactory.class.getClassLoader().getResourceAsStream("application.properties"); ...原创 2020-03-28 09:11:24 · 693 阅读 · 0 评论 -
JavaBasic:Concurrent-Future
如何获得异步执行的结果?Callable task=new Task();ExecutorService executor=Executors.newFixedThreadPool(size);Future future=executor.submit(task);String result=future.get();//可能阻塞import java.io.BufferedReader...原创 2020-03-10 14:49:44 · 135 阅读 · 0 评论 -
JavaBasic:Runnable和Callable的区别
https://blog.csdn.net/const_/article/details/88105721转载 2020-03-10 14:22:30 · 77 阅读 · 0 评论 -
JavaBasic:Concurrent-线程池(ExecutorService)
JDK提供的ExecutorService实现了线程池的功能线程是内部维护了一组线程,可以高效执行大量小任务Executors提供的静态方法创建不同类型的ExecutorService必须调用shutdown()关闭ExecutorServicemport java.time.LocalTime;import java.util.concurrent.Executors;clas...原创 2020-03-10 13:59:27 · 66 阅读 · 0 评论 -
JavaBasic:Concurrent-Atomic
使用java.util.atomic提供的原子操作可以简化多线程编程AtomicInterger/AtomicLong/AutomicIntergerArray等原子操作实现了无锁的线程安全适用于计数器,累加器等class Counter3{ private AtomicInteger value =new AtomicInteger(0); public int a...原创 2020-03-10 13:32:03 · 70 阅读 · 0 评论 -
JavaBasic:Concurrent-Concurrent集合
使用java.util.concurrent提供的Blocking集合可以简化多线程编程:多线程同时访问Blocking集合是安全的尽量使用JDK提供的concurrent集合,避免自己写同步代码InterfaceNon-thread safeThread safeListArrayListCopyOnWriteArrayListMapHashMapC...原创 2020-03-10 13:13:38 · 96 阅读 · 0 评论 -
JavaBasic:Concurrent-Condition
Condition可以替代wait/notifyCondition.await/signal/sigalAll原理和wait/notify/notifyAll一致await()会释放当前锁,进入等待状态signal()会唤醒某个等待线程signalAll()会唤醒所有等待线程唤醒线程从await()返回后需要重新获得锁Condition对象必须从ReentrantLock对象获取...原创 2020-03-10 11:55:20 · 85 阅读 · 0 评论 -
JavaBasic:Concurrent-ReadWriteLock
允许多个线程同时读取,但是只要有一个线程在写入,其他线程就必须等待ReadWriteLock适用tiaojian同一个实例,有大量线程读取,仅有少量线程修改(比如论坛的帖子,同时在读的场景多,修改的场景少)class Counter2 { private ReentrantReadWriteLock readWriteLock=new ReentrantReadWriteLock...原创 2020-03-10 10:26:07 · 95 阅读 · 0 评论 -
JavaBasic:高级concurrent-ReentrantLock
ReentrantLock可以替代synchronlizedReentrantLock更安全,因为synchronlized要么获得锁,要么一直等待必须使用try…finally来正确获得锁和释放锁class Counter { private Lock lock = new ReentrantLock(); private int value = 0; pub...原创 2020-03-10 10:06:24 · 66 阅读 · 0 评论 -
JavaBasic:线程-守护线程
所有非守护线程结束之后,JVM退出thread.setDaemon(true);标志一个线程为守护线程守护线程不能持有任何的资源import java.time.LocalTime;import java.time.format.DateTimeFormatter;class Timer extends Thread { @Override public void ...原创 2020-03-09 22:58:37 · 111 阅读 · 0 评论 -
JavaBasic:线程-中断线程
调用interrupt()方法可以中断一个线程通过检测isInterrupted来判断一个线程是否中断通过标志位判断需要正确使用volatile关键字通过volatile解决了共享变量在线程之间的可见性问题例子1:调用interrupt()方法中断线程class HelloThread2 extends Thread{ @Override public void ru...原创 2020-03-09 22:39:02 · 65 阅读 · 0 评论 -
JavaBasic:线程-线程状态
线程的状态包括New/Runnable/Blocked/Waiting/Timed Waiting/Terminate可以通过调用jion()方法等待另外一个线程结束class HelloThread1 extends Thread{ private String name; public HelloThread1(String name){ this....原创 2020-03-09 17:57:39 · 58 阅读 · 0 评论 -
JavaBasic:线程-创建新线程
Java用Thread对象表示一个线程,通过用start()方法来启动一个线程一个线程对象只能调用一次start()方法线程的执行代码是run()方法线程的调度由操作系统决定,程序本身无法决定Tread.sleep()方法可以把当前线程暂停一段时间class HelloThread extends Thread{ @Override public void run()...原创 2020-03-09 17:27:38 · 62 阅读 · 0 评论 -
JavaBasic:Java中Collections.sort()的使用
方法1:使用Collections.sort(list),要求list里面的对象可以做比较,则需要implements Comparable接口。public class Student implements Comparable<Student>{ private Integer Id; private Integer age; private Strin...原创 2020-03-09 16:52:21 · 67 阅读 · 0 评论 -
JavaBasic:Collection与Collections的区别
原文链接:https://blog.csdn.net/weixin_44067706/article/details/1029173291.collection 是一个顶级父类接口 常用主要实现类有 list和set2.collections是一个包装类,个人理解相当于集合工具类collections提供了操作集合的一系列静态方法 常用方法有:集合元素排序collections.sort...原创 2020-03-09 14:07:15 · 219 阅读 · 0 评论 -
JavaBasic:Interger
今天在用Interger的时候,遇到个坑, 特此记一笔private static Integer num;num++上面两行代码会报一个空指针错误,原因是Interger num默认值是null,null不能直接做++的操作,如果private static Integer num=0,则会避免这个问题,所以以后最好初始化时就先赋值测试代码public class StaticNumb...原创 2020-03-09 10:33:01 · 83 阅读 · 0 评论 -
JavaBasic:PriorityQueue
PriorityQueue实现一个优先队列从队首获取元素时,总是获取到优先级最高的元素默认元素比较顺序排序,必须实现comparator接口可以通过Comparator自定义排序,这样不必实现comparator接口//实现Comaparable接口public class Person implements Comparable<Person>{ private ...原创 2020-03-05 14:56:03 · 73 阅读 · 0 评论 -
JavaBasic:Queue
Queue实现一个先进先出的队列add/off将元素添加到队尾remove/poll从队首获取元素并删除element/peek从队首获取元素但是不删除避免将null元素添加到队列同一个方式不同实现其实是最后报错方式不一样,比如remove/poll,remove空队列会报异常,poll会返回nullimport java.util.LinkedList;import java....原创 2020-03-05 14:30:30 · 142 阅读 · 0 评论 -
JavaBasic:Set
set用于存储不重复的元素集合,相当于不存值的Mapboolean add(E e)boolean remove(Object o)boolean contains(Object o)int size()public class Main { public static void main(String[] args) { String[] arr={"app...原创 2020-03-05 14:04:22 · 126 阅读 · 0 评论 -
JavaBasic:Map(Equals and hashCode)
正确使用Map必须保证:作为key的对象必须正确覆写equlas()方法,例如:String,Integer,Long作为Key的对象必须正确覆写hashCode()方法如果两个对象相等,则两个对象的hashCode()必须相等如果两个对象不相等,则两个对象的hashCode()不需要相等public class Person { private String name;...原创 2020-03-05 13:32:24 · 88 阅读 · 0 评论 -
JavaBasic:Map
HashMap是无序的,TreeMap是有序的,可以用compare自定义顺序put(K key, V value):添加元素V get(K key):获取元素boolean containsKey(K key):判断某个key是否存在遍历map:对Map来说,要遍历key可以使用for each循环遍历Map实例的keySet()方法返回的Set集合,它包含不重复的key的集合...原创 2020-03-05 10:55:50 · 133 阅读 · 0 评论 -
JavaBasic:List(equals)
如果是判断两个对象的逻辑值,用equals;如是对象的引用用==如果是引用类型,就调用Objects.equals(p.name,this.name)来判断import java.util.Objects;public class Person { private String name; private int age; public Person(Stri...原创 2020-03-04 22:57:33 · 85 阅读 · 0 评论 -
JavaBasic:List
List是一种有序链表:List内部按照放入元素的先后顺序存放每个元素都可以通过索引确定自己的位置类似数组,但是大小可变方法void add(E e)在末尾添加一个元素void add(int index,E e)在指定索引添加一个元素int remove(int index)删除指定索引的元素int remove(Object e)删除某个元素E get(int ind...原创 2020-03-04 22:33:14 · 74 阅读 · 0 评论 -
JavaBasic:编写范型
编写泛型时,需要定义泛型类型public class Pair{…}静态方法不能以用泛型类型,必须定义其他的类型public static Pair create <K first,K last>{…}泛型可以同时定义多种类型,<T,K>public class Pair<T,K>{…}public class Person<...原创 2020-03-04 21:27:10 · 62 阅读 · 0 评论 -
JavaBasic:使用范型
范型:泛型就是定义一种模板,例如ArrayList,然后在代码中为用到的类创建对应的ArrayList<类型>,好处是使用时不必对类型进行强制转换,它通过编译器对类型进行检查;//Compareble<T>:泛型接口public class Worker implements Comparable<Worker> { private String ...原创 2020-03-02 23:03:22 · 80 阅读 · 0 评论 -
JavaBasic:反射(继承)
通过Class对象可以获取继承关系:Class getSuperclass():获取父类类型;Class[] getInterfaces():获取当前类实现的所有接口。通过Class对象的isAssignableFrom()方法可以判断一个向上转型是否可以实现。public class Main { public static void main(String[] args) {...原创 2020-03-02 22:06:14 · 64 阅读 · 0 评论 -
JavaBasic:反射(构造方法)
Constructor对象封装了构造方法的所有信息;通过Class实例的方法可以获取Constructor实例:getConstructor(),getConstructors(),getDeclaredConstructor(),getDeclaredConstructors();通过Constructor实例可以创建一个实例对象:newInstance(Object… parameter...原创 2020-03-02 21:16:13 · 70 阅读 · 0 评论 -
JavaBasic:反射(Method)
Method 对象封装了方法所有的信息通过Class实例的方法可以获取Method实例:getMethod/getMethods/getDeclaredMethod/getDeclaredMethods通过Method实例可以获取方法信息getName/getReturnType/getParamterTypes/getModifiers通过Method实例可以调用某个对...原创 2020-03-02 21:01:01 · 79 阅读 · 0 评论 -
JavaBasic:反射(Field)
Java的反射API提供的Field类封装了字段的所有信息:通过Class实例的方法可以获取Field实例:getField(),getFields(),getDeclaredField(),getDeclaredFields();通过Field实例可以获取字段信息:getName(),getType(),getModifiers();通过Field实例可以读取或设置某个对象的字段,如果存在...原创 2020-03-01 23:03:16 · 86 阅读 · 0 评论