text += "去修改
另一边的jsp可以直接接收
35、生成验证码工具类
package com.qf.utils;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Arrays;
import java.util.Random;
import javax.imageio.ImageIO;
/**
* 生成验证码工具类
*/
@SuppressWarnings("all")
public class VerifyCodeUtils {
// 使用到Algerian字体,系统里没有的话需要安装字体,字体只显示大写,去掉了1,0,i,o几个容易混淆的字符
public static final String VERIFY_CODES = "23456789ABCDEFGHJKLMNPQRSTUVWXYZ";
private static Random random = new Random();
/**
* 使用系统默认字符源生成验证码
*
* @param verifySize 验证码长度
* @return
*/
public static String generateVerifyCode(int verifySize) {
return generateVerifyCode(verifySize, VERIFY_CODES);
}
/**
* 使用指定源生成验证码
*
* @param verifySize 验证码长度
* @param sources 验证码字符源
* @return
*/
public static String generateVerifyCode(int verifySize, String sources) {
if (sources == null || sources.length() == 0) {
sources = VERIFY_CODES;
}
int codesLen = sources.length();
Random rand = new Random(System.currentTimeMillis());
StringBuilder verifyCode = new StringBuilder(verifySize);
for (int i = 0; i < verifySize; i++) {
verifyCode.append(sources.charAt(rand.nextInt(codesLen - 1)));
}
return verifyCode.toString();
}
/**
* 生成随机验证码文件,并返回验证码值
*
* @param w
* @param h
* @param outputFile
* @param verifySize
* @return
* @throws IOException
*/
public static String outputVerifyImage(int w, int h, File outputFile, int verifySize) throws IOException {
String verifyCode = generateVerifyCode(verifySize);
outputImage(w, h, outputFile, verifyCode);
return verifyCode;
}
/**
* 输出随机验证码图片流,并返回验证码值
*
* @param w
* @param h
* @param os
* @param verifySize
* @return
* @throws IOException
*/
public static String outputVerifyImage(int w, int h, OutputStream os, int verifySize) throws IOException {
String verifyCode = generateVerifyCode(verifySize);
outputImage(w, h, os, verifyCode);
return verifyCode;
}
/**
* 生成指定验证码图像文件
*
* @param w
* @param h
* @param outputFile
* @param code
* @throws IOException
*/
public static void outputImage(int w, int h, File outputFile, String code) throws IOException {
if (outputFile == null) {
return;
}
File dir = outputFile.getParentFile();
if (!dir.exists()) {
dir.mkdirs();
}
try {
outputFile.createNewFile();
FileOutputStream fos = new FileOutputStream(outputFile);
outputImage(w, h, fos, code);
fos.close();
} catch (IOException e) {
throw e;
}
}
/**
* 输出指定验证码图片流
*
* @param w
* @param h
* @param os
* @param code
* @throws IOException
*/
public static void outputImage(int w, int h, OutputStream os, String code) throws IOException {
int verifySize = code.length();
BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
Random rand = new Random();
Graphics2D g2 = image.createGraphics();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
Color[] colors = new Color[5];
Color[] colorSpaces = new Color[] { Color.WHITE, Color.CYAN, Color.GRAY, Color.LIGHT_GRAY, Color.MAGENTA,
Color.ORANGE, Color.PINK, Color.YELLOW };
float[] fractions = new float[colors.length];
for (int i = 0; i < colors.length; i++) {
colors[i] = colorSpaces[rand.nextInt(colorSpaces.length)];
fractions[i] = rand.nextFloat();
}
Arrays.sort(fractions);
g2.setColor(Color.GRAY);// 设置边框色
g2.fillRect(0, 0, w, h);
Color c = getRandColor(200, 250);
g2.setColor(c);// 设置背景色
g2.fillRect(0, 2, w, h - 4);
// 绘制干扰线
Random random = new Random();
g2.setColor(getRandColor(160, 200));// 设置线条的颜色
for (int i = 0; i < 20; i++) {
int x = random.nextInt(w - 1);
int y = random.nextInt(h - 1);
int xl = random.nextInt(6) + 1;
int yl = random.nextInt(12) + 1;
g2.drawLine(x, y, x + xl + 40, y + yl + 20);
}
// 添加噪点
float yawpRate = 0.05f;// 噪声率
int area = (int) (yawpRate * w * h);
for (int i = 0; i < area; i++) {
int x = random.nextInt(w);
int y = random.nextInt(h);
int rgb = getRandomIntColor();
image.setRGB(x, y, rgb);
}
shear(g2, w, h, c);// 使图片扭曲
g2.setColor(getRandColor(100, 160));
int fontSize = h - 4;
Font font = new Font("Algerian", Font.ITALIC, fontSize);
g2.setFont(font);
char[] chars = code.toCharArray();
for (int i = 0; i < verifySize; i++) {
AffineTransform affine = new AffineTransform();
affine.setToRotation(Math.PI / 4 * rand.nextDouble() * (rand.nextBoolean() ? 1 : -1),
(w / verifySize) * i + fontSize / 2, h / 2);
g2.setTransform(affine);
g2.drawChars(chars, i, 1, ((w - 10) / verifySize) * i + 5, h / 2 + fontSize / 2 - 10);
}
g2.dispose();
ImageIO.write(image, "jpg", os);
}
private static Color getRandColor(int fc, int bc) {
if (fc > 255)
fc = 255;
if (bc > 255)
bc = 255;
int r = fc + random.nextInt(bc - fc);
int g = fc + random.nextInt(bc - fc);
int b = fc + random.nextInt(bc - fc);
return new Color(r, g, b);
}
private static int getRandomIntColor() {
int[] rgb = getRandomRgb();
int color = 0;
for (int c : rgb) {
color = color << 8;
color = color | c;
}
return color;
}
private static int[] getRandomRgb() {
int[] rgb = new int[3];
for (int i = 0; i < 3; i++) {
rgb[i] = random.nextInt(255);
}
return rgb;
}
private static void shear(Graphics g, int w1, int h1, Color color) {
shearX(g, w1, h1, color);
shearY(g, w1, h1, color);
}
private static void shearX(Graphics g, int w1, int h1, Color color) {
int period = random.nextInt(2);
boolean borderGap = true;
int frames = 1;
int phase = random.nextInt(2);
for (int i = 0; i < h1; i++) {
double d = (double) (period >> 1)
* Math.sin((double) i / (double) period + (6.2831853071795862D * (double) phase) / (double) frames);
g.copyArea(0, i, w1, 1, (int) d, 0);
if (borderGap) {
g.setColor(color);
g.drawLine((int) d, i, 0, i);
g.drawLine((int) d + w1, i, w1, i);
}
}
}
private static void shearY(Graphics g, int w1, int h1, Color color) {
int period = random.nextInt(40) + 10; // 50;
boolean borderGap = true;
int frames = 20;
int phase = 7;
for (int i = 0; i < w1; i++) {
double d = (double) (period >> 1)
* Math.sin((double) i / (double) period + (6.2831853071795862D * (double) phase) / (double) frames);
g.copyArea(i, 0, 1, h1, 0, (int) d);
if (borderGap) {
g.setColor(color);
g.drawLine(i, (int) d, i, 0);
g.drawLine(i, (int) d + h1, i, h1);
}
}
}
public static void main(String[] args) throws IOException {
File dir = new File("E:/verifies");
int w = 200, h = 80;
for (int i = 0; i < 50; i++) {
String verifyCode = generateVerifyCode(4);
File file = new File(dir, verifyCode + ".jpg");
outputImage(w, h, file, verifyCode); }
}
}
38、图片文件上传(多)
(1)方式一
/**
* 新增
*
* @param request
* @return
*/
@Override
public ResultVo addUser(HttpServletRequest request) throws Exception {
//实例化结果集对象
ResultVo resultVo = new ResultVo();
//实例化user对象
User user = new User();
//获取服务器文件夹路径
String realPath = request.getServletContext().getRealPath("WEB-INF/upload");
//构建文件对象
File f = new File(realPath);
//判断是否是第一次创建文件夹/是否存在
if (!f.exists()) {
//不存在则创建文件夹
f.mkdirs();
}
//判断是否以文件上传的格式进行提交
boolean multipartContent = ServletFileUpload.isMultipartContent(request);
if (multipartContent) {
//是文件上传格式
//获取文件工厂对象
FileItemFactory factory = new DiskFileItemFactory();
//获取文件上传核心对象
ServletFileUpload servletFileUpload = new ServletFileUpload(factory);
//获取所有的条目
List fileItemList = servletFileUpload.parseRequest(request);
//对集合进行判断
if (fileItemList != null && fileItemList.size() > 0) {
for (FileItem fileItem : fileItemList) {
//判断条目是普通文本还是文件
//普通文件
if (fileItem.isFormField()) {
//判断普通类型
//获取name属性值
String fieldName = fileItem.getFieldName();
if ("name".equals(fieldName)) {
user.setName(fileItem.getString("UTF-8"));
} else if ("sex".equals(fieldName)) {
user.setSex(Integer.parseInt(fileItem.getString("UTF-8")));
} else if ("phone_number".equals(fieldName)) {
user.setPhone_number(fileItem.getString("UTF-8"));
} else if ("area".equals(fieldName)) {
user.setArea(fileItem.getString("UTF-8"));
} else if ("username".equals(fieldName)) {
user.setUsername(fileItem.getString("UTF-8"));
} else if ("password".equals(fieldName)) {
user.setPassword(fileItem.getString("UTF-8"));
}
} else {
//是文件对象
//获取文件名称
String fileItemName = fileItem.getName();
//判断类型
//是图片类型
if (fileItemName.endsWith("png") || fileItemName.endsWith("jpeg") || fileItemName.endsWith("jpg")) {
//构建唯一的文件对象
fileItemName = System.currentTimeMillis() + fileItemName;
File f1 = new File(f, fileItemName);
//设置图片
user.setPhoto(fileItemName);
//向服务器写入文件
fileItem.write(f1);
} else {
//不是图片类型
resultVo.setData(null);
resultVo.setMessage("图片上传格式不正确!");
resultVo.setStatus(400);
return resultVo;
}
}
}
}
//将数据插入到数据库
user.setCreate_time(LocalDateTime.now());
user.setManager(1);
//执行查询
int num = userDao.addUser(user);
resultVo.setData(num > 0 ? true : false);
resultVo.setMessage(num > 0 ? "注册成功" : "注册失败");
resultVo.setStatus(num > 0 ? 200 : 400);
} else {
//不是文件上传的格式
resultVo.setData(null);
resultVo.setMessage("文件上传格式不对");
resultVo.setStatus(400);
}
return resultVo;
}
39、模糊查询问题
if (!StringUtils.isEmpty(realname)) {
//如果不为空,则添加条件
sb.append(" and realname like ? ");
dataList.add("'%"+realname+"%'");
}
在Java中,dataList.add("%"+realname+"%");
这行代码是正确的,因为字符串的拼接在Java中是通过+
操作符完成的。这里,%
字符被当作普通字符对待,而不是SQL中的通配符。
40、查询的时候是可以多加字段的,他只是select或者说只是映射而已,新增的时候给他限定的构造器就可以了,获取到了之后再查order如何再set回去就可以拼接显示了
package com.qf.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 售后
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Reject implements Serializable {
private Integer id;
private Integer uid;
private Integer oid;
private String reason;
private LocalDateTime time;
//订单信息
private Order order;
public Reject(Integer id, Integer uid, Integer oid, String reason, LocalDateTime time) {
this.id = id;
this.uid = uid;
this.oid = oid;
this.reason = reason;
this.time = time;
}
}
41、null passed where not-null expected,string转integer类型的时候,不能直接转
应该
productVo.setState(StringUtils.isEmpty(state)?null:Integer.parseInt(state));
42、获取到的string类型的uid,增加的时候就用这个方法
rejectVo.setUid(StringUtils.isEmpty(uid)?null:Integer.parseInt(uid));
除非是必填的就Integer.parseInt(uid)
43、新增功能字段类型是String的话,参数不用额外+“”
44、如果参数很多的话,可以把参数封装成一个实体类
package com.qf.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class RejectVo implements Serializable {
private Integer uid;
private Integer oid;
private String startTime;
private String endTime;
private Integer currentPageNo;
private Integer pageSize;
}
45、项目流程
(1)写数据库、引入maven依赖、properties
(2)写工具类
(DBUtils数据库连接、PageUtils分页,JsonUtils返回结果集成json,resultVo结果集封装,BaseServlet封装)
还有一些参数多的用去封装
(2)写实体类(不一定要对应表)
(3)写dao层
(4)写service层(一般返回ResultVo结果集对象)
(5)写Servlet去调用
46、调用数据库类DBUTils
package com.qf.utils;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import lombok.Getter;
import org.apache.commons.dbutils.QueryRunner;
import javax.sql.DataSource;
import java.io.InputStream;
import java.util.Properties;
@Getter
public enum DBUtils {
/**
* 数据库枚举项
*/
DB;
private QueryRunner qr;
DBUtils(){
try {
//实例化properties
Properties pro = new Properties();
//通过反射加载配置文件
InputStream is = DBUtils.class.getResourceAsStream("db.properties");
//加载到配置文件
pro.load(is);
//实例化数据库连接池获取数据源对象
DataSource ds = DruidDataSourceFactory.createDataSource(pro);
//实例化queryRunner对象
qr = new QueryRunner(ds);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
47、BaseServlet(servlet的基类)
package com.qf.servlet;
import com.alibaba.druid.util.StringUtils;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* servlet的基类
*/
public class BaseServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置编码格式
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=UTF-8");
//获取前端传递的方法名称
String methodName = req.getParameter("mark");
//进行非空判断
if (StringUtils.isEmpty(methodName)){
throw new RuntimeException("方法名不存在!");
}
try {
//有方法名称
//获取class对象
Class extends BaseServlet> cla = this.getClass();
//获取方法
Method method = cla.getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
//执行方法
method.invoke(this,req,resp);
} catch (NoSuchMethodException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
} catch (InvocationTargetException e) {
throw new RuntimeException(e);
}
}
}
47、PageUtils分页的基类
package com.qf.utils;
import lombok.*;
import java.util.List;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageUtils {
//当前页
private Integer currentPageNo;
//页量
private Integer pageSize;
//总记录数
private Integer totalCount;
//总页数
private Integer totalPageSize;
//集合
private List userList;
}
48、ResultVo结果集工具类的封装
package com.qf.utils;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 结果集工具类封装
* @param
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ResultVo {
//状态码
private Integer status;
//提示信息
private String message;
//数据
private T data;
}
49、JonUtils结果集转json工具类
package com.qf.utils;
import com.alibaba.fastjson.JSON;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
* 返回结果集的工具类
*/
public class JsonUtils {
public static void writeJsonString(HttpServletResponse response,ResultVo resultVo) throws IOException {
PrintWriter pw = response.getWriter();
//将数据转为json格式
String s = JSON.toJSONString(resultVo);
//写入到前端
pw.print(s);
pw.close();
}
}
50、关于批量获取前端传递的数据,导入beanUtils依赖
public void updateProduct(HttpServletRequest request ,HttpServletResponse response) throws InvocationTargetException, IllegalAccessException, IOException {
//从前端获取参数
Map parameterMap = request.getParameterMap();
//实例化商品对象
Product product = new Product();
BeanUtils.populate(product,parameterMap);
实体类属性顺序必须对应
51、postman用法
你可能感兴趣的:(java)
关于 java:8. Java 内存模型与 JVM 基础
shenyan~
java jvm 开发语言
一、堆Java堆是JVM中所有线程共享的运行时内存区域,用于存放所有对象实例、数组以及类的实例字段值。在Java中:Stringstr=newString("abc");newString("abc")创建的对象就分配在堆中。1.1堆的特点特性说明共享区域所有线程共享堆GC管理垃圾回收器对堆管理最频繁分代模型为提高GC性能,堆被划分为新生代/老年代等区域空间大堆是JVM管理内存中最大的区域慢速堆分
Java用CompareTo方法实现根据两个或多个属性对对象进行排序
偶遇急雨洗心尘
java jvm 开发语言 servlet 算法
CompareTo方法CompareTo是String类的方法,CompareTo(Objecto1,Objecto2),就是用o1和o2进行比较o1.compateTo(o2)大于0则o1大o1.compateTo(o2)小于0则o2大o1.compateTo(o2)等于0则一样大升序降序升序:publicstaticvoidmain(String[]args){ArrayListlist=ne
JAVA设计模式之模板模式
偶遇急雨洗心尘
java 设计模式 开发语言
设计模式设计模式(DesignPattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行
Java多线程如何保证线程池里的线程都执行完毕
偶遇急雨洗心尘
java jvm 开发语言
背景:项目中为了提高性能常常会引入多线程,当我们使用线程池时有时要满足“当线程池里的线程都执行完毕后才能进行下一步”这种业务场景,例如:当多线程操作一个文件时要保证所有线程都运行完毕才能保证文件的完整;当用多线程给一个对象的多个属性进行赋值时要保证线程都运行完毕才将此对象返回,否则就会出现对象属性不全。实现方式:1、使用isTerminated方法2、使用CountDownLatch3、使用awa
Java中for循环中用break是跳出内层循环还是外层循环
偶遇急雨洗心尘
java 算法 jvm 数据结构 开发语言
背景:我们知道:for循环中常用“continue”跳过当前循环执行下个循环,常用“break”跳出循环,但是在for循环嵌套中break是仅跳出内层循环还是跳出所有循环呢?测试:publicstaticvoidmain(String[]args){for(inti=0;i<5;i++){for(intj=0;j<5;j++){if(j==3){break;}System.out.println(
Spring boot 注解实现幂等性
夏壹分享
微服务技术体系 java 数据库 spring
1.添加SpringAOP依赖在pom.xml中添加如下依赖:2.创建自定义幂等性注解创建一个新的Java注解类,通过@interface关键字来定义,并可以添加元注解以及属性。/***《像乌鸦一样思考》让孩子学会观察和独立思考!*https://www.sanzhiwa.top/6718.html*/@Retention(RetentionPolicy.RUNTIME)//程序运行时有效@Tar
Java 中 DataSource-数据源 的基础介绍
Java中DataSource-数据源的基础介绍一、核心概念解析1.1数据源(DataSource)1.2数据库连接池(ConnectionPool)1.3二者关系1.4DataSource接口二、DataSource解决的问题与优势2.1DataSource的作用2.2传统方式的局限性2.3使用连接池DataSource的改进三、SpringBoot中DataSource的配置与使用3.1自动配
Java--SpringBoot使用@Transactional注解添加事务
m0_54883970
面试 学习路线 阿里巴巴 android 前端 后端
一、Java事务1、通常的观念认为,事务仅与数据库相关。事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、**隔离性(isolation)和持久性(durability)**的缩写。事务的原子性:表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。事务的一致性:表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事
Java 接口性能优化二
hqxstudying
数据库 oracle sql
三、数据库层面:优化数据交互的「最后一公里」数据库是接口性能的「重灾区」——超过60%的接口响应慢问题可追溯至低效的数据交互。优化需从「SQL执行效率」「索引设计」「连接管理」三个维度突破。SQL优化:让查询「少走弯路」核心原则:减少无效数据扫描,让数据库「只做必要的工作」。常见问题与优化:**避免SELECT***:问题:返回冗余字段,增加数据传输量,无法利用覆盖索引。优化:明确指定需要的字段,
java使用json一篇就够了
渐暖°
一篇就够了 java json python
java在调用第三方的接口时经常会获取到一堆json,一般都想转化成对应的实体来操作,具体的方式如下目录:raised_hand:四种方式:see_no_evil:分别举例1.JSON-Java库2.Jaskon3.Gson3.FastJSON:ram:FastJSON和GSON的区别✋四种方式1.JSON-Java库,org.json,这个库提供了用于解析和操作Java中的JSON的类。此外,这
Java 解析JSON的 6 种方案
奔向理想的星辰大海
Java研发实用技巧 java json 数据库
1.使用Jackson:业界标配功能特点强大的序列化和反序列化:支持将JSON字符串转为Java对象,也支持将Java对象转换为JSON。支持复杂结构:处理嵌套对象、数组、泛型等场景非常轻松。支持注解:如@JsonIgnore、@JsonProperty等,能精细控制序列化与反序列化的行为。性能高:Jackson的性能非常出色,是很多企业级项目的首选。代码示例1.JSON转对象(反序列化)impo
java操作JSON
呜呜你好特别
java json 开发语言
一、Jackson概念1、作用它是用来前后端的交互功能,属于SpringMVC二、ObjectMapper2.1、作用是用来后端接收的json数据转换成各种格式。也可以转换各种格式2.1.1、第一步,初始化ObjectMappermapper=newObjectMapper();2.1.2、写到文件中Useruser=newUser("243582","h2435823336");//mapper
java中操作JSON字符串
莫笑皮皮猪
随笔 java json 开发语言
java操作JSON串在java操作JSON字符串中,通常分为两种,一种是有对象对应的,一种是没有对象对应的有对象对应的话,可以转换成vo对象的集合没有对象对应的,可以转换成JSON对象来进行相应操作无论有对象对应还是没有对象的,解析复杂的JSON串(多级JSON),解析完之后,没有被解析的子JSON,还是以JSON字符串的形式存在,被解析的以对象的形式存在我们操作数据,一般都是把JSON串转换成
JAVA:常见 JSON 库的技术详解
拾荒的小海螺
JAVA java json 开发语言
1、简述在现代应用开发中,JSON(JavaScriptObjectNotation)已成为数据交换的标准格式。Java提供了多种方式将对象转换为JSON或从JSON转换为对象,常见的库包括Jackson、Gson和org.json。本文将介绍几种常用的JSON处理方式,并通过简单示例展示其应用。2、什么是JSON?JSON是一种轻量级的数据交换格式,使用键值对来表示数据。它易于人阅读和编写,同时
Java IO流 文件读写详解
Y1_again_0_again
Java java 开发语言
IO流的概念与分类IO(Input/Output)流是Java中用于处理输入输出操作的抽象概念。流可以看作一个数据序列的管道,数据像水流一样在程序与数据源之间传输。JavaIO流主要分为两大类:按流向分类:输入流(InputStream/Reader):用于读取数据输出流(OutputStream/Writer):用于写入数据按数据类型分类:字节流:以字节为单位传输数据(8位)字符流:以字符为单位
如何比较两个 APK 的签名是否一致?
微信公众号:AI创造财富
android adb android-studio java xml
D:\AS\build-tools\34.0.0\lib>java-jarapksigner.jarverify--print-certsD:\2025\beforecob\KP36\KP36\ScanDemoGit\app\build\outputs\apk\debug\ScanDemo-1.1.6_20250630.apkSigner#1certificateDN:EMAILADDRESS=a
Attempt to invoke virtual method ‘void com.dawn.java.ui.widget.TopToolbar.setMainTitle(java.lang.Str
微信公众号:AI创造财富
python 开发语言 androidx android 安卓 android-studio
E/AndroidRuntime:FATALEXCEPTION:mainProcess:com.kte.uniformscan,PID:9198java.lang.RuntimeException:UnabletostartactivityComponentInfo{com.kte.uniformscan/com.dawn.java.ui.homePage.HomeActivity}:java.l
Java 服务网格:Istio 在微服务中的应用与挑战
向哆哆
Java入门到精通 java istio 微服务
Java服务网格:Istio在微服务中的应用与挑战服务网格的概念与价值在微服务架构中,服务之间的通信变得复杂且难以管理。服务网格(ServiceMesh)作为一种新兴的基础设施层,专注于处理服务间通信,提供流量管理、安全性和可观测性等功能。Istio是目前最流行的开源服务网格之一,它通过在每个服务实例旁边注入一个代理(Envoy)来实现对服务通信的拦截和管理。Istio的核心价值在于:流量管理:支
Python保龄球计分Demo
清风序来
python 开发语言
找工作,笔试题,恶心到想吐,和大家分享下,在网上只有Java的demo,我这个python菜鸟,分享下python的demo......需求:保龄球计分规则如下,写出一个计分的demo一局有十格,每格有两次投球机会,如在第一次投球时没能全中,就有需要投第二球。每格可能出现的情况:1、失球在两次投后,未能击倒10个瓶,此格的分数为击倒的个数。如果一次击球未击到一个,则用一个“-”标记2、补中第二次补
类、对象和引用的关系
孜孜不倦,不紧不慢
java java
类和对象的关系类是对象的模板,对象是类的一个实例;一个java程序中类名相同的类只能有一个,也就是类型不会重名;一个类可以有很多对象;一个对象只能根据一个类来创建。引用和类以及对象的关系引用必须是,只能是一个类的引用;引用只能指向其它所属的类型的类和对象;相同类型的引用之间可以赋值;只能通过指向一个对象的引用,来操作一个对象,比如访问某个成员变量。
linux部署Java项目流程
呆萌IT少女
linux 项目部署 mysql linux java 服务器 nginx
项目部署流程开始准备需要的包,我用的是openJDK8,Mysql8,nginx0.6.361.搭建Linux环境若操作系统为windows环境,首先安装虚拟机并搭建对应的linux操作系统。2.安装Openjdk1.81.创建jdk目录mkdir-p/usr/local/javacd/usr/local/java2.解压tar-zxvfjdk包3.配置环境变量vim/etc/profileexp
华为OD机考2025B卷 - 特殊的加密算法(Java & Python& JS & C++ & C )
算法大师
最新华为OD机试真题 华为OD机试真题 (Java/JS/Py/C) 华为od java python 华为OD机考2025B卷 javascript c++
最新华为OD机试真题目录:点击查看目录华为OD面试真题精选:点击立即查看2025华为od机试2025B卷-华为机考OD2025年B卷题目描述有一种特殊的加密算法,明文为一段数字串,经过密码本查找转换,生成另一段密文数字串。规则如下:明文为一段数字串由0~9组成密码本为数字0~9组成的二维数组需要按明文串的数字顺序在密码本里找到同样的数字串,密码本里的数字串是由相邻的单元格数字组成,上下和左右是相邻
华为OD机考2025B卷 - 查找接口成功率最优时间段(Java & Python& JS & C++ & C )
算法大师
最新华为OD机试真题 华为OD机试真题 (Java/JS/Py/C) 华为od java python javascript c++
最新华为OD机试真题目录:点击查看目录华为OD面试真题精选:点击立即查看2025华为od机试2025B卷-华为机考OD2025年B卷题目描述服务之间交换的接口成功率作为服务调用关键质量特性,某个时间段内的接口失败率使用一个数组表示,数组中每个元素都是单位时间内失败率数值,数组中的数值为0~100的整数,给定一个数值(minAverageLost)表示某个时间段内平均失败率容忍值,即平均失败率小于等
华为OD机考2025B卷 - 停车费用统计 (Java & Python& JS & C++ & C )
算法大师
最新华为OD机试真题 华为OD机试真题 (Java/JS/Py/C) 华为od java python 华为OD机考2025B卷 javascript c++
最新华为OD机试真题目录:点击查看目录华为OD面试真题精选:点击立即查看2025华为od机试2025B卷-华为机考OD2025年B卷题目描述停车场统计当日总收费,包月的车不统计,不包月的车半个小时收一块钱,不满半小时不收钱,如果超过半小时,零头不满半小时按半小时算,每天11:30-13:30时间段不收钱,如果一辆车停车时间超过8小时后不收费(网友回忆,数值不一定为8,正式机考的时候注意一下)。输入
JS 与 CSS 的交互式开发:打造灵动的网页体验
维他奶糖61
pandas 数据库 前端
在当今的网页开发领域,静态的网页早已无法满足用户日益增长的交互需求。JavaScript(JS)和层叠样式表(CSS)作为前端开发的两大支柱,它们的强强联合能够创造出令人惊叹的交互式网页效果。从简单的按钮点击变色,到复杂的动画过渡和动态页面布局变换,JS与CSS的交互式开发赋予了网页生命与活力。接下来,就让我们深入探索这一奇妙的领域。理解JS与CSS的分工与协作在开始交互式开发之前,我们需要明确J
JavaEE:分布式session
一、使用Redis存储分布式session:1.SpringBoot整合Redis,见如下地址:JavaEE:SpringBoot整合Redis_a526001650a-CSDN博客2.代码实现分布式session存储(此处以token为例):@AutowiredprivateRedisTemplateredisTemplate;//Redis数据操作类//登录接口,存储token到redis中@
JavaEE:CAS单点登录
杨先生_
JavaEE java-ee java
说明:CAS单点登录用于实现多个顶级域名不同的系统或各子系统实现统一登录,一处登录,各系统免登录。JWT工具类实现:JavaEE:JWT生成/解析token与Spring拦截器_jwt可以解析token吗-CSDN博客一、CAS登录/登出实现:1.单点登录(创建全局ticket+临时ticket):/** *登录CAS系统(供CAS登录页调用) *1.登录验证,并创建用户分布式会话(Token存入
js代码开发
当然可以!为你说明在VSCode中进行JavaScript开发的环境配置,这是一个非常普遍且高效的组合。别担心,配置过程非常直接。JS开发环境的核心主要包括两大部分:运行时(Runtime):即能够执行JavaScript代码的环境。开发工具(Tooling):即让编码过程更高效、更不容易出错的工具,这部分主要通过VSCode扩展来实现。下面我为你分解成清晰的步骤,跟着做就行。第一步:安装Node
Go语言的单元测试与基准测试详解
旧游无处不堪寻
golang 单元测试 测试工具 测试用例 jenkins 集成测试 功能测试
单元测试以一个加法函数为例,对其进行单元测试。首先编写add.go文件://add.gopackagemainfuncadd(a,bint)int{returna+b}其次编写add_test.go文件,在go语言中,测试文件均已_test结尾,这里只需要在被测试的文件后加上_test即可。并且测试文件与要被测试的文件需要放在同一个包中,并不像Java那样需要将所有的测试文件放在一个专门的测试文件
用Pytorch训练手写签名模型并进行签名识别
TBM矩阵
# AI体系学习 pytorch 人工智能 python
整体思路收集至少两个人的手写签名图片,每个人至少20张使用Pytorch进行模型训练使用Flask搭建Web服务使用Html/JavaScript实现前端调用进行签名识别项目结构signature-systemdatatrainuser001001.png...user002001.png...templatesindex.htmlapp.pymodel.pytrain.py建模:model.py
scala的option和some
矮蛋蛋
编程 scala
原文地址:
http://blog.sina.com.cn/s/blog_68af3f090100qkt8.html
对于学习 Scala 的 Java™ 开发人员来说,对象是一个比较自然、简单的入口点。在 本系列 前几期文章中,我介绍了 Scala 中一些面向对象的编程方法,这些方法实际上与 Java 编程的区别不是很大。我还向您展示了 Scala 如何重新应用传统的面向对象概念,找到其缺点
NullPointerException
Cb123456
android BaseAdapter
java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getImportantForAccessibility()' on a null object reference
出现以上异常.然后就在baidu上
PHP使用文件和目录
天子之骄
php文件和目录 读取和写入 php验证文件 php锁定文件
PHP使用文件和目录
1.使用include()包含文件
(1):使用include()从一个被包含文档返回一个值
(2):在控制结构中使用include()
include_once()函数需要一个包含文件的路径,此外,第一次调用它的情况和include()一样,如果在脚本执行中再次对同一个文件调用,那么这个文件不会再次包含。
在php.ini文件中设置
SQL SELECT DISTINCT 语句
何必如此
sql
SELECT DISTINCT 语句用于返回唯一不同的值。
SQL SELECT DISTINCT 语句
在表中,一个列可能会包含多个重复值,有时您也许希望仅仅列出不同(distinct)的值。
DISTINCT 关键词用于返回唯一不同的值。
SQL SELECT DISTINCT 语法
SELECT DISTINCT column_name,column_name
F
java冒泡排序
3213213333332132
java 冒泡排序
package com.algorithm;
/**
* @Description 冒泡
* @author FuJianyong
* 2015-1-22上午09:58:39
*/
public class MaoPao {
public static void main(String[] args) {
int[] mao = {17,50,26,18,9,10
struts2.18 +json,struts2-json-plugin-2.1.8.1.jar配置及问题!
7454103
DAO spring Ajax json qq
struts2.18 出来有段时间了! (貌似是 稳定版)
闲时研究下下! 貌似 sruts2 搭配 json 做 ajax 很吃香!
实践了下下! 不当之处请绕过! 呵呵
网上一大堆 struts2+json 不过大多的json 插件 都是 jsonplugin.34.jar
strut
struts2 数据标签说明
darkranger
jsp bean struts servlet Scheme
数据标签主要用于提供各种数据访问相关的功能,包括显示一个Action里的属性,以及生成国际化输出等功能
数据标签主要包括:
action :该标签用于在JSP页面中直接调用一个Action,通过指定executeResult参数,还可将该Action的处理结果包含到本页面来。
bean :该标签用于创建一个javabean实例。如果指定了id属性,则可以将创建的javabean实例放入Sta
链表.简单的链表节点构建
aijuans
编程技巧
/*编程环境WIN-TC*/ #include "stdio.h" #include "conio.h"
#define NODE(name, key_word, help) \ Node name[1]={{NULL, NULL, NULL, key_word, help}}
typedef struct node { &nbs
tomcat下jndi的三种配置方式
avords
tomcat
jndi(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。命名服务将名称和对象联系起来,使得我们可以用名称
访问对象。目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性。
tomcat配置
关于敏捷的一些想法
houxinyou
敏捷
从网上看到这样一句话:“敏捷开发的最重要目标就是:满足用户多变的需求,说白了就是最大程度的让客户满意。”
感觉表达的不太清楚。
感觉容易被人误解的地方主要在“用户多变的需求”上。
第一种多变,实际上就是没有从根本上了解了用户的需求。用户的需求实际是稳定的,只是比较多,也比较混乱,用户一般只能了解自己的那一小部分,所以没有用户能清楚的表达出整体需求。而由于各种条件的,用户表达自己那一部分时也有
富养还是穷养,决定孩子的一生
bijian1013
教育 人生
是什么决定孩子未来物质能否丰盛?为什么说寒门很难出贵子,三代才能出贵族?真的是父母必须有钱,才能大概率保证孩子未来富有吗?-----作者:@李雪爱与自由
事实并非由物质决定,而是由心灵决定。一朋友富有而且修养气质很好,兄弟姐妹也都如此。她的童年时代,物质上大家都很贫乏,但妈妈总是保持生活中的美感,时不时给孩子们带回一些美好小玩意,从来不对孩子传递生活艰辛、金钱来之不易、要懂得珍惜
oracle 日期时间格式转化
征客丶
oracle
oracle 系统时间有 SYSDATE 与 SYSTIMESTAMP;
SYSDATE:不支持毫秒,取的是系统时间;
SYSTIMESTAMP:支持毫秒,日期,时间是给时区转换的,秒和毫秒是取的系统的。
日期转字符窜:
一、不取毫秒:
TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS')
简要说明,
YYYY 年
MM 月
【Scala六】分析Spark源代码总结的Scala语法四
bit1129
scala
1. apply语法
FileShuffleBlockManager中定义的类ShuffleFileGroup,定义:
private class ShuffleFileGroup(val shuffleId: Int, val fileId: Int, val files: Array[File]) {
...
def apply(bucketId
Erlang中有意思的bug
bookjovi
erlang
代码中常有一些很搞笑的bug,如下面的一行代码被调用两次(Erlang beam)
commit f667e4a47b07b07ed035073b94d699ff5fe0ba9b
Author: Jovi Zhang <
[email protected] >
Date: Fri Dec 2 16:19:22 2011 +0100
erts:
移位打印10进制数转16进制-2008-08-18
ljy325
java 基础
/**
* Description 移位打印10进制的16进制形式
* Creation Date 15-08-2008 9:00
* @author 卢俊宇
* @version 1.0
*
*/
public class PrintHex {
// 备选字符
static final char di
读《研磨设计模式》-代码笔记-组合模式
bylijinnan
java 设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
import java.util.ArrayList;
import java.util.List;
abstract class Component {
public abstract void printStruct(Str
利用cmd命令将.class文件打包成jar
chenyu19891124
cmd jar
cmd命令打jar是如下实现:
在运行里输入cmd,利用cmd命令进入到本地的工作盘符。(如我的是D盘下的文件有此路径 D:\workspace\prpall\WEB-INF\classes)
现在是想把D:\workspace\prpall\WEB-INF\classes路径下所有的文件打包成prpall.jar。然后继续如下操作:
cd D: 回车
cd workspace/prpal
[原创]JWFD v0.96 工作流系统二次开发包 for Eclipse 简要说明
comsci
eclipse 设计模式 算法 工作 swing
JWFD v0.96 工作流系统二次开发包 for Eclipse 简要说明
&nb
SecureCRT右键粘贴的设置
daizj
secureCRT 右键 粘贴
一般都习惯鼠标右键自动粘贴的功能,对于SecureCRT6.7.5 ,这个功能也已经是默认配置了。
老版本的SecureCRT其实也有这个功能,只是不是默认设置,很多人不知道罢了。
菜单:
Options->Global Options ...->Terminal
右边有个Mouse的选项块。
Copy on Select
Paste on Right/Middle
Linux 软链接和硬链接
dongwei_6688
linux
1.Linux链接概念Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。
【硬连接】硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连
DIV底部自适应
dcj3sjt126com
JavaScript
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml&q
Centos6.5使用yum安装mysql——快速上手必备
dcj3sjt126com
mysql
第1步、yum安装mysql
[root@stonex ~]# yum -y install mysql-server
安装结果:
Installed:
mysql-server.x86_64 0:5.1.73-3.el6_5 &nb
如何调试JDK源码
frank1234
jdk
相信各位小伙伴们跟我一样,想通过JDK源码来学习Java,比如collections包,java.util.concurrent包。
可惜的是sun提供的jdk并不能查看运行中的局部变量,需要重新编译一下rt.jar。
下面是编译jdk的具体步骤:
1.把C:\java\jdk1.6.0_26\sr
Maximal Rectangle
hcx2013
max
Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and return its area.
public class Solution {
public int maximalRectangle(char[][] matrix)
Spring MVC测试框架详解——服务端测试
jinnianshilongnian
spring mvc test
随着RESTful Web Service的流行,测试对外的Service是否满足期望也变的必要的。从Spring 3.2开始Spring了Spring Web测试框架,如果版本低于3.2,请使用spring-test-mvc项目(合并到spring3.2中了)。
Spring MVC测试框架提供了对服务器端和客户端(基于RestTemplate的客户端)提供了支持。
&nbs
Linux64位操作系统(CentOS6.6)上如何编译hadoop2.4.0
liyong0802
hadoop
一、准备编译软件
1.在官网下载jdk1.7、maven3.2.1、ant1.9.4,解压设置好环境变量就可以用。
环境变量设置如下:
(1)执行vim /etc/profile
(2)在文件尾部加入:
export JAVA_HOME=/home/spark/jdk1.7
export MAVEN_HOME=/ho
StatusBar 字体白色
pangyulei
status
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
/*you'll also need to set UIViewControllerBasedStatusBarAppearance to NO in the plist file if you use this method
如何分析Java虚拟机死锁
sesame
java thread oracle 虚拟机 jdbc
英文资料:
Thread Dump and Concurrency Locks
Thread dumps are very useful for diagnosing synchronization related problems such as deadlocks on object monitors. Ctrl-\ on Solaris/Linux or Ctrl-B
位运算简介及实用技巧(一):基础篇
tw_wangzhengquan
位运算
http://www.matrix67.com/blog/archives/263
去年年底写的关于位运算的日志是这个Blog里少数大受欢迎的文章之一,很多人都希望我能不断完善那篇文章。后来我看到了不少其它的资料,学习到了更多关于位运算的知识,有了重新整理位运算技巧的想法。从今天起我就开始写这一系列位运算讲解文章,与其说是原来那篇文章的follow-up,不如说是一个r
jsearch的索引文件结构
yangshangchuan
搜索引擎 jsearch 全文检索 信息检索 word分词
jsearch是一个高性能的全文检索工具包,基于倒排索引,基于java8,类似于lucene,但更轻量级。
jsearch的索引文件结构定义如下:
1、一个词的索引由=分割的三部分组成: 第一部分是词 第二部分是这个词在多少