Java编程问题总结
Java编程问题总结
整理自 https://github.com/giantray/stackoverflow-java-top-qa
基础语法
将InputStream转换为String
- apache commons-io
String content = IOUtils.toString(new FileInputStream(file), StandardCharsets.UTF_8);
//String value = FileUtils.readFileToString(file, StandardCharsets.UTF_8);
- javase
static String convertStreamToString(java.io.InputStream is) {java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");return s.hasNext() ? s.next() : "";
}
将数组加入到List
- Arrays.asList
String[] array = {"hello", "world", "cat"};
List<String> l1 = new ArrayList<>(Arrays.asList(array));
- Collections
List<String> arraylist = new ArrayList<>();
Collections.addAll(arraylist, array);
如何测试一个数组是否包含指定的值
- Arrays.asList(…).contains(…)
- 使用 Apache Commons Lang 包中的 ArrayUtils.contains
String[] array = {"hello", "world", "cat"};
boolean isContain = ArrayUtils.contains(array, "hello");
从一个多层嵌套循环中直接跳出
OUTER_LOOP:
for (int i = 0; i < 5; i++) {for (int j = 0; j < 5; j++) {if (i * j > 6) {break OUTER_LOOP;}}
}
如何将String转换为Int
- javase
Integer x = Integer.valueOf(str);
int y = Integer.parseInt(str);
- commons-lang3
int z = NumberUtils.toInt("100", -1);
String#split()方法的注意事项
该方法的参数是个正则表达式,要注意对某些字符做转码。
例如,.
在正则表达式中表示任意字符,因此,如果你要通过 .
号做分割,
需要这样写,split("\\.")
或者 split(Pattern.quote("."))
Map<Key,Value>基于Value值排序
@Testpublic void test3() {Map<String, Double> map = new HashMap<>();map.put("A", 60.5);map.put("B", 70.4);map.put("C", 67.4);map.put("D", 44.3);System.out.println(map);ValueComparator bvc = new ValueComparator(map);Map<String, Double> sortedMap = new TreeMap<>(bvc);sortedMap.putAll(map);System.out.println(sortedMap);}class ValueComparator implements Comparator<String> {Map<String, Double> map;public ValueComparator(Map<String, Double> map) {this.map = map;}public int compare(String a, String b) {return map.get(a) >= map.get(b) ? 1 : -1;}}
如何便捷地将两个数组合到一起
- commons-lang3
String[] both = ArrayUtils.addAll(first, second);
- javase
public <T> T[] concatenate(T[] a, T[] b) {if (Objects.isNull(a) && Objects.isNull(b)) {return null;}if (Objects.isNull(a)) {return b;}if (Objects.isNull(b)) {return a;}int aLen = a.length;int bLen = b.length;@SuppressWarnings("unchecked")T[] c = (T[]) Array.newInstance(a.getClass().getComponentType(), aLen + bLen);System.arraycopy(a, 0, c, 0, aLen);System.arraycopy(b, 0, c, aLen, bLen);return c;}
生成 “min <= 随机数 <= max ” 的随机数
int min = 5;int max = 10; // Math.random() 可以产生一个 大于等于 0 且 小于 1 的双精度伪随机数int num1 = min + (int) (Math.random() * (max - min + 1));System.out.println(num1);int num2 = min + new Random().nextInt((max - min) + 1);System.out.println(num2);System.out.println(RandomUtils.nextInt(min, max));
该什么时候使用 ThreadLocal变量,它是如何工作的?
public class Foo{// SimpleDateFormat is not thread-safe, so give one to each threadprivate static final ThreadLocal<SimpleDateFormat> formatter = new ThreadLocal<SimpleDateFormat>(){@Overrideprotected SimpleDateFormat initialValue(){return new SimpleDateFormat("yyyyMMdd HHmm");}};public String formatIt(Date date){return formatter.get().format(date);}
}
因为ThreadLocal是一个既定线程内部的数据引用,你可能在使用线程池的应用服务器上因此引起类加载时候的内存泄漏。你需要使用remove()方法很小心地清理TheadLocal中get()或者set()的变量。 如果程序执行完毕没有清理的话,它持有的任何对类的引用将作为部署的Web应用程序的一部分仍保持在永久堆,永远无法得到回收。重新部署/取消部署也无法清理对应用程序类的引用,因为线程不是被你的应用程序所拥有的。 每次成功部署都会创建一个永远不会被垃圾回收类的实例。
最后将会遇到内存不足的异常-java.lang.java.lang.OutOfMemoryError: PermGen space -XX:MaxPermSize,在google了很多答案之后你可能只是增加了-XX:MaxPermSize,而不是修复这个bug。 倘若你的确遇到这种问题,可以通过Eclipse’s Memory Analyzer或根据Frank Kieviet’s guide 和 followup来判断哪些线程和类保留了那些引用。
更新:又发现了Alex Vasseurs blog entry,它帮助我查清楚了一些ThreadLocal的问题。
这是一段有问题的代码
int x = 0;
while (x < 3) {x = x++;System.out.println(x);
}
如何在整数左填充0
如何在整数左填充0 举例 1 = “0001”
int x = 1;
String a = String.format("%05d", x);DecimalFormat decimalFormat = new DecimalFormat("00000");
String c = decimalFormat.format(x);// ApacheCommonsLanguage
String b = StringUtils.leftPad(String.valueOf(x), 5, '0');// guava
String d = Strings.padStart(String.valueOf(x), 5, '0');
如何创建泛型java数组
数组是不能通过泛型创建的,因为我们不能创建不可具体化的类型的数组。
public class GenSet<E> {private E[] a;private int length;private int index;public GenSet(Class<E> c, int s) {// 使用原生的反射方法,在运行时知道其数组对象类型@SuppressWarnings("unchecked") final E[] a = (E[]) Array.newInstance(c, s);this.a = a;this.length = s;this.index = 0;}E get(int i) {if (this.length <= i) {return null;}return a[i];}//...如果传入参数不为E类型,那么强制添加进数组将会抛出异常void add(E e) {if (this.length < 1) {return;}if (this.length <= this.index) {return;}a[this.index++] = e;}
}
Java内部类和嵌套静态类
public class OuterClass {public static class InterStaticClass {}class InterClass {}
}
OuterClass.InterStaticClass interStaticClass = new OuterClass.InterStaticClass();OuterClass outerClass = new OuterClass();OuterClass.InterClass interClass = outerClass.new InterClass();
创建一个文件并向该文件写文本内容
https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/how-to-create-a-file-and-write-to-a-file-in-java.md
编程技巧
如何产生一个随机的字母数字串作为 session 的唯一标识符
private SecureRandom random = new SecureRandom();public String nextSessionId() {return new BigInteger(130, random).toString(32);}
为什么在java中存放密码更倾向于char[]而不是String
String是不可变的。虽然String加载密码之后可以把这个变量扔掉,但是字符串并不会马上被GC回收,一但进程在GC执行到这个字符串之前被dump,dump出的的转储中就会含有这个明文的字符串。那如果我去“修改”这个字符串,比如把它赋一个新值,那么是不是就没有这个问题了?答案是否定的,因为String本身是不可修改的,任何基于String的修改函数都是返回一个新的字符串,原有的还会在内存里。
然而对于数组,你可以在抛弃它之前直接修改掉它里面的内容或者置为乱码,密码就不会存在了。但是如果你什么也不做直接交给gc的话,也会存在上面一样的问题。
怎样将堆栈追踪信息转换为字符串
org.apache.commons.lang.exception.ExceptionUtils.getStackTrace(Throwable);
Throwable t;
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
t.printStackTrace(pw);
sw.toString(); // stack trace as a string
Exception e;
StringWriter sw = new StringWriter();
e.printStackTrace(new PrintWriter(sw));
String exceptionAsString = sw.toString();
打印数组
Arrays.toString(intArray);
Arrays.deepToString(strArray); // 多维数组依然可用
相关文章:
Java编程问题总结
Java编程问题总结 整理自 https://github.com/giantray/stackoverflow-java-top-qa 基础语法 将InputStream转换为String apache commons-io String content IOUtils.toString(new FileInputStream(file), StandardCharsets.UTF_8); //String value FileUtils.readFileT…...
binutils工具集——objcopy的用法
以下内容源于网络资源的学习与整理,如有侵权请告知删除。 一、工具简介 objcopy主要用来转换目标文件的格式。 在实际开发中,我们会用该工具进行格式转换与内容删除。 (1)在链接完成后,将elf格式的.out文件转化为bi…...
Windows使用Stable Diffusion时遇到的各种问题和知识点整理(更新中...)
Stable Diffusion安装完成后,在使用过程中会出现卡死、文件不存在等问题,在本文中将把遇到的问题陆续记录下来,有兴趣的朋友可以参考。 如果要了解如何安装sd,则参考本文《Windows安装Stable Diffusion WebUI及问题解决记录》。如…...
MySQL workbench基本查询语句
1.查询所有字段所有记录 SELECT * FROM world.city; select 表示查询;“*” 称为通配符,也称为“标配符”。表示将表中所有的字段都查询出来;from 表示从哪里查询;world.city 表示名为world的数据库中的city表; 上面…...
软件测试详解
文章目录一、软件危机(一)概念(二)产生软件危机的原因(三)消除软件危机的途径二、软件过程模型(一)软件生命周期概念(二)软件开发模型1. 瀑布模型2. 螺旋模型…...
YOLOS学习记录
在前面,博主已经完成了YOLOS项目的部署与调试任务,并在博主自己构造的数据集上进行了实验,实验结果表明效果并不显著,其实这一点并不意外,反而是在情理之中。众所周知,Transformer一直以来作为NLP领域的带头…...
数组边遍历(for循环)边删除为什么删不干净 及三种实现删除的方法
文章目录1、为什么删不干净倒序删迭代器lambda表达式删除为什么说数组边for循环遍历边删除会出现删不干净的情况1、为什么删不干净 先写一个例子:可以先猜一下控制台会打印出什么内容? public class removeIterator {public static void main(String[]…...
环境配置之Keepass
前言很久以前,就有了想要一个自己密码管理器的念头。毕竟,即使浏览器能记住各个网站的账号密码,但是在登录单独客户端的时候,仍然要翻找密码。为了省事,也曾经是一个密码走天下。然后被劫持了QQ给同学发黄色小网站&…...
Java 电话号码的组合
电话号码的字母组合中等给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例 1:输入:digits "23…...
MATLAB——将直接型转化为并联型和级联型
题目1(IIR): 已知一个系统的传递函数为: H(z)8−4z−111z−2−2z−31−1.25z−10.75z−2−0.125z−3H(z)\frac{8-4z^{-1}11z^{-2}-2z^{-3}}{1-1.25z^{-1}0.75z^{-2}-0.125z^{-3}}H(z)…...
.NET Framework .NET Core与 .NET 的区别
我们在创建C#程序时,经常会看到目标框架以下的选项,那么究竟有什么区别? 首先 .NET是一种用于构建多种应用的免费开源开发平台,可以使用多种语言,编辑器和库开发Web应用、Web API和微服务、云中的无服务器函数、云原生应用、移动应用、桌面应用、Windows WPF、Windows窗体…...
carla与ros2的自动驾驶算法-planning与control算法开发与仿真
欢迎仪式 carla与ros2的自动驾驶算法-planning与control算法开发与仿真欢迎大家来到自动驾驶Player(L5Player)的自动驾驶算法与仿真空间,在这个空间我们将一起完成这些事情: 控制算法构建基础模块并仿真调试:PID、LQR、Stanley 、MPC、滑膜控…...
corn表达式
简单理解corn表达式:在使用定时调度任务的时候,我们最常用的,就是cron表达式了。通过cron表达式来指定任务在某个时间点或者周期性的执行。cron表达式配置起来简洁方便,无论是Spring的Scheduled还是用Quartz框架,都支持…...
推荐系统中对抗性机器学习-文献综述与未来发展整理分享
对抗学习是一种机器学习技术,旨在通过提供欺骗性输入来欺骗模型。最常见的原因是导致机器学习模型出现故障。大多数机器学习技术旨在处理特定的问题集,其中从相同的统计分布(IID)生成训练和测试数据。当这些模型应用于现实世界时&…...
Proteus8.15安装教程
1、解压Proteus8.15 安装包,然后双击进去,找到setup文件,右键,以管理员身份运行。 2、需要安装一些插件,点击“next”。把插件安装完成。 点击“finfish” 点击“install” 点击“Cancel” 3、如果没有上面步骤&…...
Shell 基本运算符
Shell 和其他编程语言一样,支持多种运算符,包括: 算数运算符关系运算符布尔运算符字符串运算符文件测试运算符 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。…...
Linux基础命令-sed流编辑器
Linux三剑客-grep命令 Sed 一. 命令介绍 先到帮助文档中查看命令的描述信息 NAME sed - stream editor for filtering and transforming text sed命令是操作、过滤和转换文本内容的强大工具,常用功能包括结合正则表达式对文件实现快速增删改查,其中查询…...
C语言笔试题(1)
#include <stdio.h> #include <stdlib.h> #include <string.h> void getmemory(char *p) { p(char *) malloc(100); strcpy(p,“hello world”); } int main(void) { char *strNULL; getmemory(str); printf(“%s/n”,str); free(str); return 0; } 上述程序…...
网络连接的三种模式
文章目录前言一、三种连接模式介绍二、三种网络连接模式的区别前言 在进行虚拟机配置时,网络连接分为三种模式:桥接模式,NAT模式,主机模式 一、三种连接模式介绍 张三、李四、王五在同一个网段,所以他们之间可以相互…...
大学模拟电路期末考试模拟题详解
(一)选择题 3.4.5.6.7.8.9.10. (二)填空题 1.漂流电流是温度电流,它由少数、载流子形成、其大小与温度有关,而与外加电压无关。 反向电流是由少数载流子形成、其大小与温度有关,而与外加电压无…...
C/C++内存管理讲解
c/C内存管理讲解 C/C内存分布 首先通过一些题目的引入讲解带大家走进C/C的内存分布。 eg1: 根据上述变量的定义,来判断它们所在的内存位置。 从接下来的4个选项中选出最佳答案填入(注:可重复选)。 A、栈 B、堆 C、数…...
【Linux】网络原理
本篇博客让我们一起来了解一下网络的基本原理 1.网络发展背景 关于网络发展的历史背景这种东西就不多bb了,网上很容易就能找到参考资料,我的专业性欠缺,文章参考意义也不大。这里只做简单说明。 网络发展经过了如下几个模式 独立模式&…...
list模拟实现
list模拟实现list原理讲解节点结构list类设计push_backIterators:begin与endconst对象的迭代器重载->运算符反向迭代器迭代器所有代码迭代器总结constructor:clear~listfront与backinsert与erasesize与empty与swappop_back()总代码:节点类正向迭代器类反向迭代器类list类lis…...
CSS看这一篇就够啦,CSS基础大全,可用于快速回顾知识,面试首选
1 CSS简介 CSS 是层叠样式表 ( Cascading Style Sheets ) 的简称。 CSS 是也是一种标记语言,主要用于设置 HTML 页面中的文本内容(字体、大小、对齐方式等)、图片的外形(宽高、边框样式、 边距等)以及版面的布局和外观…...
Canvas详细使用方法(一)
Canvas Canvas的注意事项 < canvas > 和 < img > 元素很相像,唯一的不同就是它并没有 src 和 alt 属性。 -< canvas > 标签只有两个属性——width和height( 单位默认为px )。当没有设置宽度和高度时,canvas 会初始化宽为 300px 和高…...
CentOS定时任务——crontab
crontab Linux crontab 是用来定期执行程序的命令。 crond 命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。 注意:新创建的 cron 任务,不会马上执行,至少要过 2 分钟后才可以,当然你…...
C51---蓝牙模块---连接软件---控制LED灯
1.器件:C51、HC-08蓝牙模块、Ty-C数据线、杜邦线 2.软件:HC蓝牙助手 3.接线:VCC-VCC、GND-GND、RXD-TXD、TXD-RXD 4.烧写:STC-ISP串口助手 5.代码: #include "reg52.h" #include "intrins.h" …...
Linux 学习笔记——二、主机规划与磁盘分区
一、Linux 与硬件的搭配 Linux 中所有设备均被视为文件,其命名规则如下: 设备文件名SCSI/SATA/USB 硬盘机/dev/sd[a-p]USB 闪存盘/dev/sd[a-p](与 SATA 相同)Virtl/O 界面/dev/vd[a-p](用于虚拟机内)软盘…...
麒麟服务器V10 版本 安装 Anaconda教程,也就是安装Python环境的教程(亲测有效)
目录1 Anaconda 是什么2 安装1 Anaconda 是什么 你可以理解为一个软件,和QQ一样的软件,你安装之后,里面就有naconda包括Conda、Python以及一大堆安装好的工具包,比如:numpy、pandas等 1)包含conda&#x…...
【3维视觉】网格细分Mesh Subdivision算法介绍(Loop, Catmull-Clark, Doo-Sabin)
引言 介绍了Loop, Catmull-Clark, Doo-Sabin细分。 算法介绍 1. Loop细分 Loop细分是Charles Loop在1987年在硕士论文中提出的一种对三角网格的细分算法。 Loop细分是递归定义的,每一个三角形一分为四,对于新生成的点和旧点以不同的规则更新。 点的…...
php网站源代码/企业营销策略有哪些
temp input(不妨想一想小甲鱼现在心里想的哪一个数字:) guess int(temp) if guess 8:print(你是小甲鱼心里的蛔虫吗?)print(哼,猜中了也没有奖励!) else:if guess > 8:print(哥,大了大了...)else:print(嘿,小了小…...
石更口马牙wordpress/商家推广平台有哪些
爆肝三天终于写完了,一文教你从零开启Unity制作像素鸟游戏前言一,新建目录二,制作材质三,场景搭建四,创建地图五,制作管道六,创建主角七,小鸟动起来八,游戏状态控制九&am…...
网页制作与网站建设技术大全 pdf/网站模板及源码
更有趣的问题是如何在服务器上执行此类操作,例如,将以下查询转换为LINQ to SQL.var q from single in Enumerable.Range(1, 1)let xs sourceSequenceselect new{Aggregate1 xs.Sum(),Aggregate2 xs.Average(),// etc};但是,如果您使用LINQ to Objects,那么尝试将其塞入一个…...
已经有域名如何做网站/黑龙江新闻
RequestMapping的分类 类级别的和方法级别的RequestMapping的几种形式: RequestMapping(method RequestMethod.GET) RequestMapping(value"/{day}", method RequestMethod.GET)//day为方法中的参数 RequestMapping (value"/new", method …...
做视频网站投入要多少/怎样制作一个自己的网站
互联网时代,很多企业都意识到网络信息化的重要性,很多企业都在尝试做自己的官方网站,对于大型企业来说,难度相对较低,人员和资金充足,但是对于中小型企业来说,建站的成本、时间、难度、后期功能…...
重庆网站建设技术支持/百度一下网页版浏览器百度
目录1.运行时数据区简单回顾2.栈、堆、方法区的交互关系3.方法区的理解4.HotSpot中方法区的演进过程1.运行时数据区简单回顾 运行时数据区划分为下图所示的五个部分: 从线程共享与否的角度,可以划分为线程共享的堆和元空间。线程私有的是栈区、程序计数…...