首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
java 手写AES
2024-08-25
用Java实现AES加密(坑!)
大坑!使用SecureRandom默认的加密方式即SHA1PRNG生成的密码有误,即使使用相同的password来生成,不同runtime或时刻生成的随机密码也有可能不同,造成的错误为javax.crypto.BadPaddingException: pad block corrupted.即key不同!!! 详细解释 可用的方法: public static String encrypt(final String plainMessage, final String symKeyHex) {
教你如何使用Java手写一个基于链表的队列
在上一篇博客[教你如何使用Java手写一个基于数组的队列]中已经介绍了队列,以及Java语言中对队列的实现,对队列不是很了解的可以我上一篇文章.那么,现在就直接进入主题吧. 这篇博客主要讲解的是如何使用单链表实现一个简单版的队列.单向链表队列是属于非循环队列,同时队列的长度是不受限制的,也就是说添加数据的速度比拉取数据的速度快时,队列的长度是无限增长的.单链队列其本质就是一个链表,只不过是在获取或添加数据的时候跟普通的链表有所区别,队列在获取数据的同时也将该节点删除,并且每次获取数据都是从表头获
java 手写 jvm高性能缓存
java 手写 jvm高性能缓存,键值对存储,队列存储,存储超时设置 缓存接口 package com.ws.commons.cache; import java.util.function.Function; public interface ICache { void expire(String key, int timeOutSecond); void leftPush(String key, Object value); void rightPush(String key, Object
java手写多级缓存
多级缓存实现类,时间有限,该类未抽取接口,目前只支持两级缓存:JVM缓存(实现 请查看上一篇:java 手写JVM高性能缓存).redis缓存(在spring 的 redisTemplate 基础实现) package com.ws.commons.cache; import java.util.function.Supplier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.ws.commons.too
利用Java手写简单的httpserver
前言: 在看完尚学堂JAVA300中讲解如何实现一个最简单的httpserver部分的视频之后, 一.前置知识 1.HTTP协议 当前互联网网页访问主要采用了B/S的模式,既一个浏览器,一个服务器,浏览器向服务器请求资源,服务器回应请求,浏览器再将接收到的回应解析出来展现给用户.这一问一答的过程可以抽象成浏览器向服务器发送一个Request然后服务器返回一个Response的过程 其中Request和Reponse在HTTP中有有具体的格式要求 一个Request的例子 Method Path-
教你如何使用Java手写一个基于数组实现的队列
一.概述 队列,又称为伫列(queue),是先进先出(FIFO, First-In-First-Out)的线性表.在具体应用中通常用链表或者数组来实现.队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行删除操作.队列的操作方式和堆栈类似,唯一的区别在于队列只允许新数据在后端进行添加. 在Java中队列又可以分为两个大类,一种是阻塞队列和非阻塞队列. 1.没有实现阻塞接口: 1)实现java.util.Queue的LinkList, 2)实现java.util.Abstra
java手写线程池,完善中
package com.test001.threadpool; import java.util.LinkedList; import java.util.List; import java.util.Random; import java.util.Vector; import java.util.concurrent.Callable; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.S
Java手写简单HashMap一(包括增加,查找,toString,泛型)
@Java 300 学习总结 HashMap底层采用实现采用了哈希表,结合了"数组和链表". 原理如图 一.定义HashMap类. 首先需要定义一个节点来存储数据,构成链表结构. public class Node { int hash; Object key; Object value; Node next; } public class ggHashMap { Node[] table; //位桶数组,用于存放链表的第一个节点 int size; public ggHashMap(
Java:手写幼儿园级线程安全LRU缓存X探究影响命中率的因素
最近遇到一个需求,需要频繁访问数据库,但是访问的内容只是 id + 名称 这样的简单键值对. 频繁的访问数据库,网络上和内存上都会给数据库服务器带来不小负担. 于是打算写一个简单的LRU缓存来缓存这样的键值对.考虑到tomcat的用户办法访问是多线程进行的. 所以还要保证cache是线程安全的.避免在用户操作的时候修改了cache导致其他用户读到不合法的信息. 构思 一, 数据结构选取 思路: 1.最简单的是用链表,最新访问的元素所在节点插入到头节点的后面,当要回收的时候就去释放链表尾部节点.
java手写的动态数组JimisunArray
/** * @Author:jimisun * @Description: * @Date:Created in 22:10 2018-07-18 * @Modified By: */ public class JimisunArray<E> { private E[] data; private int size; /** * 构造函数,传入数组的容量capacity构造Array * * @param capacity */ public JimisunArray(int capacity
java手写单例模式
1 懒汉模式 public class Singleton { private Singleton singleton = null; private Singleton() { } public Singleton getInstance() { if (singleton == null) { singleton = new Singleton(); } else { return singleton; } }} 问题在于不是线程安全的.要线程安全,在getInstance前面加
Java手写简单Linkedlist一(包括增加,插入,查找,toString,remove功能)
@Java300 学习总结 一.自定义节点 LinkList底层为双向链表.特点为查询效率低,但增删效率高,线程不安全. 链表数据储存在节点,且每个节点有指向上个和下个节点的指针. 创建ggLinkedList类,可以先创建一个节点对象Entry. public class Entry { Entry previous; Entry next; Object element; public Entry(Entry previous, Entry next, Object element) { s
Java手写数组栈
public class ArrayStack{ private String[] items; //数组 private int count; //栈内元素 private int n; //栈大小 //初始化 public ArrayStack(int n){ this.items = new String[n]; this.n = n; this.count = 0; } //入栈 public boolean push(String item){ if(n==count) return
使用java语言基于SMTP协议手写邮件客户端
使用java语言基于SMTP协议手写邮件客户端 1. 说明 电子邮件是互联网上常见的应用,他是互联网早期的产品,直至今日依然受到广大用户的喜爱(在中国可能因为文化背景不同,电子邮件只在办公的时候常用). 电子邮件系统由以下几个部分组成: 用户代理 邮件服务器 邮件传输协议 总所周知,目前市面上流行的电子邮箱有qq邮箱,163邮箱等,我们可以去申请一个qq邮箱或者163邮箱,原因是因为腾讯和网易提供了邮件服务器. 同时我们也知道我们不仅仅可以通过qq邮箱的官方客户端收发邮件,而且可以通过其他客户端
手写JAVA虚拟机(二)——实现java命令行
查看手写JAVA虚拟机系列可以进我的博客园主页查看. 我们知道,我们编译.java并运行.class文件时,需要一些java命令,如最简单的helloworld程序. 这里的程序最好不要加包名,因为加了包名的话编译和运行需要有所改动. 看这里的命令.javac为编译命令,我们知道java的特点是一次编译,到处运行.这里的编译指的就是javac,对于java程序即.java文件,先要用javac编译成字节码.然后将字节码(.class文件)放到java虚拟机中运行,即上图中的java HelloW
手写JAVA虚拟机(三)——搜索class文件并读出内容
查看手写JAVA虚拟机系列可以进我的博客园主页查看. 前面我们介绍了准备工作以及命令行的编写.既然我们的任务实现命令行中的java命令,同时我们知道java命令是将class文件(字节码)转换成机器码,那么我们现在的任务就是读出这个class文件里面的内容. 正文: java虚拟机规范中是没有规定虚拟机该从哪里找类,也就是找class文件的,而oracle的是根据类路径,也就是classpath来搜索类的.搜索的优先级:启动类路径(bootstrap classpath)>扩展类路径(exten
Java多线程之Executor框架和手写简易的线程池
目录 Java多线程之一线程及其基本使用 Java多线程之二(Synchronized) Java多线程之三volatile与等待通知机制示例 线程池 什么是线程池 线程池一种线程使用模式,线程池会维护多个线程,等待着分配可并发执行的任务,当有任务需要线程执行时,从线程池中分配线程给该任务而不用主动的创建线程. 线程池的好处 如果在我们平时如果需要用到线程时,我们一般是这样做的:创建线程(T1),使用创建的线程来执行任务(T2),任务执行完成后销毁当前线程(T3),这三个阶段是必须要有的. 而如
java面试:手写代码
二分查找法. /** * 二分查找法:给定一组有序的数组,每次都从一半中查找.直到找到要求的数据. * 主要是得找到下标的表示方法. */ public class BinaryFind { /** * 使用二分法,找到有序数组中的某个数,返回下标. * @param sortedArray * @param number * @return */ public int find(int[] sortedArray,int number){ if(sortedArray==null) { thr
算法是什么(二)手写个链表(java)
算法是什么(二)手写个链表(java) liuyuhang原创,未经允许禁止转载 目录 算法是什么(〇) 很多语言的API中都提供了链表实现,或者扩展库中实现了链表. 但是更多的情况下,Map(或hash)和List(非定容数组)的使用率更高. 这并非意味着链表不应该掌握或不使用了. 链表本质上是一种及其高等的数据结构展现,扩展性极强. 链表可轻松扩展成树结构,二叉树,环,栈,队列,双向队列等. 很多种数据结构都是依据链表的形式扩展出来的,虽然我知道的并不多,但是我知道链表的重要性. 所以,
servlet(1) - 手写第一个servlet程序 - 小易Java笔记
声明:如tomcat的安装目录为D:\Java\tomcat6,下面要根据tomcat的安装目录而定 1. 建立程序的文件结构 ==>找到tomcat的安装目录,在webapps目录下新建一个名为servlet的目录 ==>在servlet目录下新建名为WEB-INF的目录 ==>在WEB-INF目录下新建一个名为classes的目录 ==>在WEB-INF目录下新建一个名为web.xml的文件 ==>在classes目录下新建一个名为FirstServlet.java的文件
6 手写Java LinkedHashMap 核心源码
概述 LinkedHashMap是Java中常用的数据结构之一,安卓中的LruCache缓存,底层使用的就是LinkedHashMap,LRU(Least Recently Used)算法,即最近最少使用算法,核心思想就是当缓存满时,会优先淘汰那些近期最少使用的缓存对象 LruCache的缓存算法 LruCache采用的缓存算法为LRU(Least Recently Used),最近最少使用算法.核心思想是当缓存满时,会首先把那些近期最少使用的缓存对象淘汰掉 LruCache的实现 LruCac
热门专题
cgal 二次型规划
vue连接greenplum
Qt5 鼠标悬停显示
kubectl get rc 发布之后current为0
centos pppoe 路由添加
js能记录的最小的数字
V891刷机后没有声音
kylin rowkey顺序调整
远程管理AD域服务器
idea怎么删除maven框架
CSpinButtonCtrl 浮点数
visual studio enterprise 密钥
String頧柙son撖寡情
gcc连接sqlserver
springboot校验输入是整数不是小数
AD建立封装库时的异型焊盘
windows 部署 openvpn server端
Discuz如何存储远程附件到七牛云
sqlserver表结构快捷键
ormlite没有创建表