
java杂谈
水无痕simon
任重而道远...
展开
-
42 Apache poi实现excel中sheet的复制
【代码】42 Apache poi实现excel中sheet的复制。原创 2024-09-02 18:03:33 · 384 阅读 · 0 评论 -
41 字符串中的编码解码
常用字符串编码api常用解码api;//解码是使用构造方法实现的public static void main(String[] args) throws Exception{ String s = "中国"; byte[] bytes = s.getBytes();//默认UTF-8 System.out.println(Arrays.toString(bytes)); }[-28, -72, -83, -27, -101, -67].原创 2021-12-25 11:07:26 · 295 阅读 · 0 评论 -
40 字符集概述
一个汉字的存储,如果是GBK编码,占用2个字节如果是utf-8编码,占用3个字节中文的数据,开头是负数,在指定编码的时候,如果是UTF-8,那么只拼接3个字节,如果是GBK,则拼接两个字节.这样就不会乱码。因为字节流操作中文不是很方便,所以出现了字符流字符流 = 字节流 + 编码表编码表:字符集:...原创 2021-12-23 23:23:56 · 165 阅读 · 0 评论 -
39 字节缓冲流复制视频
public static void main(String[] args) throws Exception{ BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\wjh\\紫.mp4")); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:\\wjh\\紫2.mp4"));原创 2021-12-23 23:02:13 · 1285 阅读 · 0 评论 -
38 字节缓冲流类 BufferedOutputStream & BufferedInputStream
继承自OutputStream目的是在输出字节数据的时候,减少底层系统的调用.通过加入 字节缓冲区数组 的方式构造方法: protected OutputStream out; public FilterOutputStream(OutputStream out) { this.out = out; }public BufferedOutputStream(OutputStream out, int size) { super(out); .原创 2021-12-23 22:40:38 · 563 阅读 · 0 评论 -
35 FileInputStream读取数据
读取数据: int read(byte[] len); //一次读取len.length()长度的数据public static void main(String[] args) throws Exception{ FileInputStream fis = new FileInputStream("D:\\wjh\\java1.txt"); //int read(byte[] len),一次读取b.length长度的数据 byte[] b = new.原创 2021-12-22 23:51:32 · 388 阅读 · 0 评论 -
34 FileOutputStream注意事项
字节流写入时的换行public static void main(String[] args) throws Exception { FileOutputStream fos = new FileOutputStream("D:\\wjh\\java1.txt"); for (int i=0;i<10;i++){ byte[] bytes = "abcde".getBytes(); fos.write(bytes,1.原创 2021-12-22 23:30:54 · 191 阅读 · 0 评论 -
33 IO流详解
io流的分类– 按照数据的流向输入流: 从磁盘读取数据到内存输出流: 从内存写数据到磁盘– 按照数据类型:字节流:字节输入流,字节输出流字符流:字符输入流,字符输出流在读取数据的时候,如何选择呢?如果通过windows自带的记事本打开,可以读懂,那么就使用字符流去操作,比如java.txt如果用记事本打开,里面读不懂(乱码),比如说xxx.png,则使用字节流去操作.如果实在不知道是哪种,那么就直接使用: >>> 字节流 <<<字..原创 2021-12-22 23:09:30 · 484 阅读 · 0 评论 -
34 递归查询文件夹下的所有文件
public static void main(String[] args) throws Exception { //输出该文件夹下的所有文件的绝对路径(包含子文件夹下的文件) File file = new File("D:\\wjh"); getAbs(file); } private static void getAbs(File srcFile){ File[] fileArray = srcFile.listFile原创 2021-12-22 21:26:25 · 169 阅读 · 0 评论 -
33 递归
public static void main(String[] args) throws Exception { //递归求斐波那契数列 int[] arr = new int[20]; arr[0] = 1; arr[1] = 1; for (int i=2;i<arr.length;i++){ arr[i] = arr[i-1] + arr[i-2]; } Sy原创 2021-12-22 21:06:04 · 184 阅读 · 0 评论 -
32 file类的删除
public static void main(String[] args) throws Exception { File file = new File("D:\\wjh\\java.txt"); System.out.println(file.delete()); }true注意: 如果删除文件夹的时候,该文件夹下存在文件夹或者文件的话,删除会失败的。需要先删除文件夹下的文件夹或者文件,才会删除成功...原创 2021-12-22 20:42:01 · 81 阅读 · 0 评论 -
31 file常用api
常用apipublic static void main(String[] args) throws Exception { File file = new File("D:\\wjh\\java.txt"); System.out.println(file.isDirectory());//判断是否为目录--> false File file2 = new File("D:\\wjh"); System.out.println.原创 2021-12-22 20:29:25 · 210 阅读 · 0 评论 -
31 File类常用api - 创建文件
1.public static void main(String[] args) throws Exception { //从父路径以及子路径上创建file对象,此时Java.txt依然是不存在的 File file = new File("D:\\wjh\\java.txt"); System.out.println(file.createNewFile()); }创建结果:true2. 创建一个目录: mkdir()public原创 2021-12-21 23:53:13 · 341 阅读 · 0 评论 -
30 File类 -- 1
构造方法一:public static void main(String[] args) { //此时该文件夹下并不存在java.txt File file1 = new File("D:\\wjh\\java.txt"); System.out.println(file1); }D:\wjh\java.txt说明重写了toString()方法,如图:3. 构造方法二:public static void main(String..原创 2021-12-21 22:49:59 · 84 阅读 · 0 评论 -
28 map的遍历
通过上文的key set的方式把key,value当作是一个整体看待:public static void main(String[] args) { HashMap<String,String> map = new HashMap<>(); map.put("k1","v1"); map.put("k2","v2"); map.put("k3","v3"); //把key,value当作是一个整.原创 2021-12-20 23:49:49 · 89 阅读 · 0 评论 -
27 Map常用方法
不能包含重复的key,每个键可以映射到最多一个值如果key重复,后面的key会覆盖前面的keyMap常用API:map的获取相关apipublic static void main(String[] args) { HashMap<String,String> map = new HashMap<>(); map.put("k1","v1"); map.put("k2","v2"); map.put("k.原创 2021-12-20 23:38:21 · 117 阅读 · 0 评论 -
26 泛型方法
泛型方法:public class Generic { /** * 泛型方法,在调用时指定 * @param t * @param <T> */ public <T> void show(T t){ System.out.println(t); }}public class ITest { public static void main(String[] args) { .原创 2021-12-20 22:42:07 · 74 阅读 · 0 评论 -
25 LinkedHashSet
LinkedHashSet底层由 :哈希表和链表实现的set接口.因为链表的原因,所以存入的元素和取出元素可以保持顺序性因为实现了set接口,因此哈希表用来保证元素的不重复性public static void main(String[] args) { LinkedHashSet<String> link = new LinkedHashSet(); link.add("a"); link.add("b"); link..原创 2021-12-18 11:40:10 · 368 阅读 · 0 评论 -
24 HashSet API
需要考虑重写hash,equal方法的情况,例如: public static void main(String[] args) { HashSet<Student> set = new HashSet(); Student s1 = new Student("jack",22); Student s2 = new Student("lily",22); Student s3 = new Student("rose",2.原创 2021-12-18 11:32:01 · 403 阅读 · 0 评论 -
23 数据结构之哈希表
哈希表: jdk1.8之前,底层采用的是 数组+链表实现,可以说是一个元素为链表的数组jdk1.8之后,在长度比较长的时候,底层实现了优化.示例:将以下元素放入hashset中(1)hashset集合的默认长度是16,因此底层数组长度为16.(2)将需要存储的元素对 %16 等到存储的下标索引.(3)那么此时的元素都存储在下标为2,3的位置上存储的元素先去比较hash值,如果hash值不一样,则直接将元素进行存储,如果hash值一样,那么则比较内容,内容一样,则不会存储进链表上....原创 2021-12-18 11:13:30 · 966 阅读 · 0 评论 -
22 HashSet集合特点
hashset特点:(1)HashSet底层数据结构是hash表(2)对集合的迭代顺序不做保证,不能保证取出的顺序和存入的顺序一致。(3)没有带索引的方法,所以不能使用普通的for循环遍历.(4)不包含重复元素HashSet是如何保证元素的唯一性的?在add元素的时候,就可以确保排序重复元素,根本就不会把相同的元素add进集合中去.public boolean add(E e) { return map.put(e, PRESENT)==null; }a..原创 2021-12-18 11:03:50 · 1973 阅读 · 0 评论 -
21 set集合概述及hash
set中的元素不能重复.set中没有带索引的方法,所以不能用使用普通的for循环遍历public static void main(String[] args) { Set<String> set = new HashSet<>(); set.add("a"); set.add("a"); set.add("b"); set.add("c"); //for遍历 fo.原创 2021-12-18 10:40:35 · 133 阅读 · 0 评论 -
20 数据结构之链表
链表中的某一个元素称为: 节点增,删快,查询慢原创 2021-12-17 23:37:29 · 206 阅读 · 0 评论 -
19 栈,队列数据结构
栈数据结构:2 队列数据结构: >>> 先进先出 <<<数据结构 - 数组:查询数据通过索引定位,查询任意位置数据耗时相同查询速度快.删除效率低(需要重新移动元素位置)新增元素的效率也低...原创 2021-12-17 23:31:35 · 204 阅读 · 0 评论 -
18 异常相关
异常体系结构:jvm对异常情况的默认处理方案:(1)程序停止执行(2)输出异常名称,位置,原因等.异常处理的两种方案:(1) try … catch(2)throws有些时候的异常,不是我们能够处理的,那么这种情况下就适用throws来处理异常.public void method() throws Exception{//代码}...原创 2021-12-15 23:12:33 · 185 阅读 · 0 评论 -
17 Date,SimpleDateFormat,
Date类的众多构造函数中,大多数已经是过期的,不建议使用的。通常我们用的是:Date();Date(long time);使用如下:SimpleDateFormat类常用操作:– 构造方法:SimpleDateFormat();//使用默认模式和日期格式SimpleDateFormat(String pattern);//使用给定模式和日期格式– 常用apiSimpleDateFormat format = new SimpleDateFormat();System.out..原创 2021-12-14 23:03:11 · 136 阅读 · 0 评论 -
16 Java包装类
基本类型和包装类| 基本数据类型| 包装类 |byte Byteshort Shortint Integerlong Longfloat Floatdouble Doublechar Characterboolean BooleanInetger的使..原创 2021-12-14 00:19:42 · 223 阅读 · 0 评论 -
15 Arrays类常用api
Arrays.sort(int[] arr);//排序原创 2021-12-14 00:02:31 · 206 阅读 · 0 评论 -
14冒泡排序
public static void main(String[] args) { int[] arr = {22,12,45,23}; for (int i = 0; i < arr.length; i++) { if(i >= arr.length - 1){ break; }else{ int v1 = arr[i]; int v2 = arr[i+1]; if(v1 > v2){ arr[i] = v2; arr[i+1] = v1; } } } for (int j = 0; j.原创 2021-12-13 23:52:16 · 509 阅读 · 0 评论 -
13 java常用api之System
System.exit(0);//终止jvm原创 2021-12-13 22:14:10 · 90 阅读 · 0 评论 -
java从入门到放弃01
i++,++i单独使用的时候,都是对变量i的+1操作;int j = i++; //此时i++参与了运算,所以先赋值,再自增int j = ++i; //++在前,就是比较着急自增,因此先自增,后赋值逻辑&,|与短路&&,||的区别:&&,||有短路效果,只要运算时,左侧如果为真,则右侧计算才会执行.为false,则右侧不会执行...原创 2021-12-11 15:50:15 · 308 阅读 · 0 评论 -
11. java序列化
序列化的作用:通俗点讲:它是处理对象流的一种机制,即可以很方便的保存内存中java对象的状态,同时也为了方便传输。什么情况下需要序列化?当你想把的内存中的对象保存到一个文件中或者数据库中时候; 当你想用序列化在网络上传送对象的时候; 当你想通过RMI传输对象的时候;注意:静态变量不会被序列化的,它可不在堆内存中,序列化只会序列化堆内存a)当一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口b)当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象.原创 2020-09-02 09:41:27 · 99 阅读 · 0 评论 -
10 xss攻击
什么是XSS攻击?XSS(Cross Site Scripting)攻击全称跨站脚本攻击.通俗的来说就是我们的页面在加载并且渲染绘制的过程中,如果加载并执行了意料之外的程序或代码(脚本、样式),就可以认为是受到了 XSS攻击.多发生于前段脚本注入。XSS攻击的危害包括1、盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力3、盗窃企业重要的具有商业价值的资料4、非法转账5、强制发送电子邮件6、网站挂马7、控..原创 2020-06-27 23:01:23 · 196 阅读 · 0 评论 -
9 模拟请求
使用token + 验证码来避免接口被模拟原创 2020-06-27 21:41:00 · 89 阅读 · 0 评论 -
8. 表单重复提交,防止Http重复提交
重复提交问题出现的原因:a. 网络延时b.重新刷新c. 交表单后,点击浏览器的【后退】按钮回退到表单页面后进行再次提交解决方案:a. 在js中申明一个变量,用来标识是否已经提交(治标不治本)b. 表单提交之后,将提交按钮设置为不可用(治标不治本)c. java代码中处理:使用token来解决:(1)在服务器端生成一个唯一的随机标识号,专业术语称为Token(令牌)(2)在当前用户的Session域中保存这个Token(3)然后将Token发送到客户端的Form表单中,在Fo..原创 2020-06-27 21:36:58 · 140 阅读 · 0 评论 -
7 跨域
跨域原因产生:在当前域名请求网站中,默认不允许通过ajax请求发送其他域名浏览器默认网站资源 都是必须在同一个资源下的。通常都是ajax请求不同域名导致的跨域。这种不会导致跨域解决方案:a. jsonp解决跨域,但是只支持get请求,不支持postb. 使用接口网关,在nginx中操作c. springcloud中使用的zuul(常用方式)d. 使用httpclient进行内部转发e. 在header请求头中设置参数允许跨域访问.response.setHeader(“Acc..原创 2020-06-27 00:26:01 · 183 阅读 · 0 评论 -
6 长连接与短连接
HTTP协议与TCP/IP协议的关系:HTTP的长连接和短连接本质上是TCP长连接和短连接。HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上可靠的传递数据包,使在网络上的另一端收到发端发出的所有包,并且顺序与发出顺序一致。TCP有可靠,面向连接的特点HTTP协议是无状态:TTP协议是无状态的,指的是协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。也就是说,打开一个服务器上的网页和你之前打开这..原创 2020-06-26 10:34:58 · 133 阅读 · 0 评论 -
5. http与https区别
两者之间最大的区别在于:https采用的是ssl + 证书 。超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协.原创 2020-06-26 09:34:15 · 853 阅读 · 0 评论 -
4. 反盗链技术&重定向的实现原理
http响应码中:304:表示从本地缓存中读取资源403:参数错误302:重定向502:正在发布服务为什么在请求的后面使用时间戳之后,可避免浏览器的缓存?浏览器在缓存的时候,会将资源路径(url)作为key缓存在本地,如果加了时间戳,那么这个key就会不一样,就不会去本地缓存读取资源了,而是去服务器请求资源。http防盗链技术:在浏览器的request header中,有一个参数可以查看当前请求的资源是否非法从别处获取的,如图所知:解决方案:a. 首先实现一个Filter接..原创 2020-06-25 20:11:00 · 243 阅读 · 0 评论 -
3 http协议知悉
http协议: 对浏览器客户端 和 服务器端 之间数据传输的格式规范。在B/S架构中,同步的概念指的就是一次请求与相应的过程,是请求发送以后的一种即时响应。异步请求: 通过中间件的操作,比如说消息中间件,不是即时响应。...原创 2020-06-23 23:55:35 · 161 阅读 · 0 评论