os2 = Optional.of(student2);
}
2)判断 Optional 容器中是否包含对象
- boolea isPresent():判断是否包含对象.
- void ifPresent(Consumer consumer): 如果 Optional 中有值,就执行Consumer接口的实现代码,并且该值会作为参数传给它.
public void test2() {
//ifPresent 无参使用: 判断 os1 中是否有值
Student student = new Student();
Optional os1 = Optional.of(student);
System.out.println(os1.isPresent()); //true
//ifPresent 有参使用: 若 student 对象不为空,则对该对象进行赋值,并打印一句话
os1.ifPresent(aa -> { //此处的 aa 就代指 student
aa.setName("cyk");
aa.setAge(20);
System.out.println("个人信息已初始化: " + student);
});
}
3)获取 Optional 容器的对象
- T get():如果 Optional 包含值,则返回值,否则抛出异常.
- T orElse(T other):如果 Optional 包含值就返回,否则返回指定的 other 对象.
- T orElseGet(Supplier other):如果 Optional 包含值就返回,否则返回由Supplier接口实现提供的对象.
- T orElseThrow(Supplier exceptionSupplier):如果 Optional 包含值则将其返回,否则抛出由 Supplier 接口实现提供的异常.
public void test3() throws Exception {
//get 获取空对象,报错
Student student = null;
Optional os1 = Optional.ofNullable(student);
Student student1 = os1.get(); //此处抛出异常: java.util.NoSuchElementException: No value present
//如果 student 为空,就返回一个新对象
Student student2 = os1.orElse(new Student());
//如果 student 为空,就调用我们自己实现的函数
Student student3 = os1.orElseGet(() -> new Student());
//如果 student 为空,就抛出我们指定的异常
os1.orElseThrow(() -> new Exception("自定义异常"));
}
4)过滤
- Optional filter(Predicate predicate):如果值存在,并且这个值匹配给定的 predicate,返回一个Optional用以描述这个值,否则返回一个空的Optional。
public void test4() {
Student student = new Student("cyk", 20);
Optional os1 = Optional.ofNullable(student);
os1.filter(aa -> aa.getName().equals("cyk")) //此处 aa 代指 student
.ifPresent(result -> System.out.println("ok!"));
}
5)映射
map:入参就是 Optional 中的值,并且具有返回值(返回类型就是Optional 对象中的值类型),如果值才执行函数体,否则返回空的 Optional.
public void test5() {
Student student = new Student("cyk", 20);
Optional os1 = Optional.ofNullable(student);
//如果 os1 中存在值,就执行 lambda 表达式,如果不存在值,就返回一个空的 Optional
Optional result = os1.map(aa -> {
aa.setAge(aa.getAge() + 1);
return aa;
});
System.out.println(result); //输出: Optional[Student(name=cyk, age=21)]
}
c)使用场景
1)例如当你根据 id 从数据库中获取到用户数据时,如果用户数据不为 null,才能可以将年龄 +1.
public void test1(Integer id) {
//写法一: 原生
Userinfo userinfo = userinfoMapper.getUserinfoById(id);
if(userinfo != null) {
userinfo.setAge(userinfo.getAge() + 1);
}
//写法二: 使用 Optional 函数式编程,一行搞定
Optional.ofNullable(userinfoMapper.getUserinfoById(id)).ifPresent(p -> p.setAge(p.getAge() + 1));
}
2)当传入的用户数据需要进行判空抛异常处理时
public void test2() {
Userinfo userinfo = new Userinfo(1, null, 20);
//原生
if(userinfo == null || isEmpty(userinfo.getUsername())
|| isEmpty(userinfo.getAge())) {
throw new RuntimeException("用户数据不能为空!");
}
//用 Optional 改进
Optional.ofNullable(userinfo)
.filter(p -> isEmpty(p.getUsername()) || isEmpty(p.getAge()))
.orElseThrow(() -> new RuntimeException("用户数据不能为空"));
}
3)对象赋值,如果有值,则执行业务逻辑,如果没有值,则返回一个默认的对象.
Optional.ofNullable(userinfo)
.map(u -> {
//业务逻辑...
u.setId(2);
u.setUsername("cyk");
u.setAge(20);
return u;
})
.orElse(new Userinfo(100, "xxx", 0));
1.2、JDK9 新特性
1.2.1、Optional - ifPresentOrElse 解决 if-else
为了解决 if-else 的判断判空情况,JDK9 增强了 Optional,提供了 ifPresentOrElse.
Userinfo userinfo = new Userinfo(1, "cyk", 20);
//if-else
if(userinfo != null) {
System.out.println("hello " + userinfo.getUsername());
} else {
System.out.println("world");
}
//ifPresentOrElse
Optional.ofNullable(userinfo)
.ifPresentOrElse(u -> System.out.println("hello " + u.getUsername()),
() -> System.out.println("world"));
1.2.2、Optional - or 解决多重 if 嵌套
多重 if 容易导致代码可读性降低,误判引发空指针,并且对于多种if嵌套的情况我还是建议大家提前 return(逻辑更清晰),因此 JDK9 增强 Optional ,提供了 or 方法.
Userinfo nullinfo = null;
//原生
if(nullinfo == null) {
Userinfo userinfo1 = new Userinfo();
userinfo1.setId(1);
if(userinfo1 == null) {
Userinfo userinfo2 = new Userinfo();
userinfo2.setId(2);
return userinfo2;
}
return userinfo1;
}
//Optional 改进后
Optional or = Optional.ofNullable(nullinfo)
.or(() -> { // nullinfo 为 null,因此执行此 or
Userinfo userinfo1 = new Userinfo();
userinfo1.setId(1);
return Optional.ofNullable(null); //返回一个空的 Optional
})
.or(() -> { // 上一个 or 返回的 Optional 中没有值时,执行此 or
Userinfo userinfo2 = new Userinfo();
userinfo2.setId(2);
return Optional.ofNullable(userinfo2);
});
System.out.println(or); //输出: Optional[Userinfo(id=2, username=null, age=null)]
1.2.3、Optional - orElseThrow 内置异常
Optional.ofNullable(null).orElseThrow();
该方法会抛出Optional的内置异常NoSuchElementException.
1.2.4、集合增强 - 集合静态工厂
- 此方式创建的集合对象都不允许任何写操作,并且都不能为 null.
- set/map 不能保证输出顺序和定义的顺序一致.
- 与 Arrays.asList 创建的 List 不同,Arrays 创建的 List 可以 update不能 add/remove ,而静态工厂创建的完全不能进行写操作.
//1.创建不可变的 List
List strList = List.of("aaa", "bbb", "ccc");
//strList.add("ddd"); //报错: Exception in thread "main" java.lang.UnsupportedOperationException
//2.创建一个不可变的 set/map
Set set = Set.of("aaa", "bbb", "ccc");
Map map1 = Map.of("1", "aaa", "2", "bbb", "3", "ccc");
//以上 map 创建方式可能会导致分不清 key value,因此也可以通过以下方式创建
Map map2 = Map.ofEntries(Map.entry("1", "bbb"), Map.entry("2", "bbb"));
//set/map 不能保证输出的顺序和定义 键值对 的顺序一致
System.out.println(map1);
1.2.5、集合增强 - takeWhile 方法
takeWhile 用来从前向后遍历,遇到不满足的就结束流,最后返回从前到不满足的截断结果(流对象).
List list = List.of(1, 2, 3, 4, 5, 6, 7);
List result = list.stream().takeWhile(val -> val < 5).toList();
System.out.println(result); //输出: [1, 2, 3, 4]
Ps:如果使用不可修改的Set或者Map 在使用这个方法是要注意 会存在每次输出的结果都是不一样的
1.2.6、集合增强 - dropWhile 方法
takeWhile 用来从前向后删除,遇到不满足的就结束流,最后返回原始流剩下的结果(流对象).
因此,也可以理解为 takeWhile 的补集.
List list = List.of(1, 2, 3, 4, 5, 6, 7);
List result = list.stream().dropWhile(val -> val < 5).toList();
System.out.println(result); //输出: [5, 6, 7]
System.out.println(list); //Ps: 这里的删除,不影响 list 中原本的值
Ps:如果使用不可修改的Set或者Map 在使用这个方法和takeWhile一样是要注意;
1.2.7、接口可以定义私有方法
接口可以定义一些私有的方法给 default 方法调用,仅此而已。
1.3、JDK10
1.3.1、copyOf 方法
集合提供了 copyOf 方法,返回的不可以修改的集合(修改就抛异常).
Ps:这里使用的深拷贝,因此修改原集合不会影响副本.
List srcList = new ArrayList<>();
srcList.add("aaa");
srcList.add("bbb");
List copyList = List.copyOf(srcList);
srcList.add("ccc");
System.out.println(srcList); //[aaa, bbb, ccc]
System.out.println(copyList);//[aaa, bbb]
1.4、JDK14 新特性
1.4.1、支持文本块
文本代码块让整个String看上去都是比较整洁的,并且无需进行繁琐的转义.
//原始
String before = "{\n" +
" \"name\":\"cyk\",\n" +
" \"age\": 20;\n" +
"}";
//增强
String after = """
{
"name": "cyk",
"age": 20
}
""";
1.4.2、空指针异常的精确定位
不光可以定义是哪行代码空指针异常,还能定位到调用到哪个方法/属性出现的异常.
//Before:
Exception in thread "main" java.lang.NullPointerException
at com.dev.wizard.feature.JDK17Demo.optionalMethod_orElseThrow(JDK17Demo.java:99)
at com.dev.wizard.feature.JDK17Demo.main(JDK17Demo.java:23)
//After:
Exception in thread "main" java.lang.NullPointerException: Cannot read field "student" because "persons" is null
at com.dev.wizard.feature.JDK17Demo.optionalMethod_orElseThrow(JDK17Demo.java:99)
at com.dev.wizard.feature.JDK17Demo.main(JDK17Demo.java:23)
1.4.3、instanceof 类型转换
以往 instanceof 只能帮我们检查数据类型是否符合,JDK14 中不仅可以进行类型匹配,还会将匹配到的类型直接赋值新的引用,简化了开发,提高了可读性.
Object val = "aaa";
//before
if(val instanceof String) {
String newVal = (String) val;
System.out.println(newVal);
}
//after
if(val instanceof String newVal) {
System.out.println(newVal);
}
1.5、JDK16 新特性
1.5.1、toList 方法
stream().toList
和 Collectors.toUnmodifiableList()
都是不可修改的集合,Collectors.toList()
是生成的是普通的list,可写。
性能比较:toList(优) --> Collectors.toList() --> Collectors.toUnmodifiableList(劣)
List list1 = List.of("aaa", "bbb");
//可读可写
List list2 = list1.stream().toList();
//可读,不可写
List list3 = list2.stream().collect(Collectors.toList());
List list4 = list1.stream().collect(Collectors.toUnmodifiableList());
1.6、JDK17 新特性
1.6.2、switch 增强
JDK17 中的 switch 主要是使用 -> 替代了 break 语句,看上去更加简洁.
看上去 switch 是想替代 if-else 的感觉~
1)字符串匹配
//1.字符串匹配
String val1 = "aaa";
//before
switch (val1) {
case "abc":
System.out.println("abc!");
break;
case "aaa":
System.out.println("aaa!");
break;
default:
System.out.println("error!");
}
//after
switch (val1) {
case "abc" -> System.out.println("abc!");
case "aaa" -> System.out.println("aaa");
default -> System.out.println("error");
}
2)类型判断
//2.类型判断
Object val2 = "aaa";
//before
if(val2 instanceof String) {
String newVal = (String) val2;
System.out.println("String:" + newVal);
} else if(val2 instanceof Integer) {
Integer newVal = (Integer) val2;
System.out.println("Integer:" + newVal);
} else {
System.out.println(val2);
}
//after
switch (val2) {
case String str -> {
String newVal = str;
System.out.println("String:" + newVal);
}
case Integer num -> {
Integer newVal = num;
System.out.println("Integer:" + newVal);
}
default -> System.out.println(val2);
}
3)对 null 的处理
//3.对 null 的处理
String val3 = null;
switch (val3) {
case null -> System.out.println("null!");
case "aaa" -> System.out.println("aaa!");
case "bbb" -> System.out.println("bbb!");
default -> System.out.println("error");
}
4)对条件判断的处理
//4.对条件判断的处理
Object obj = 1;
switch (obj) {
case String str -> {
String newVal = str;
System.out.println("String:" + newVal);
}
case Integer num && num < 3 -> {
Integer newVal = num;
System.out.println("Integer:" + newVal);
}
default -> System.out.println("error!");
}

你可能感兴趣的:(经验分享,开发语言,java,jdk17)
- 正则表达式regex
GotoMeiben
正则表达式
工具网站:RegExr:Learn,Build,&TestRegEx正则表达式(RegularExpression,Regex)是一种强大的字符串匹配工具,广泛用于文本搜索、数据处理和输入验证等场景。无论是Python、Java、JavaScript还是Shell脚本,Regex都是不可或缺的技能。本文将深入介绍正则表达式的各种用法,包括:基本匹配(字母、数字)特殊符号^$\b量词{}*+?字符类
- Java中锁升级的探究
我心向阳iu
#Java多线程Java面试知识点精讲javajvm开发语言
文章目录锁升级概述四种锁介绍1.无锁2.偏向锁实现原理3.轻量级锁(自旋锁)实现原理4.重量级锁实现原理锁升级过程锁升级过程举例说明锁升级原理锁升级概述JDK1.6之前,synchronized还是一个重量级锁,是一个效率比较低下的锁。但是在JDK1.6后,JVM为了提高锁的获取与释放效率对synchronized进行了优化,引入了偏向锁和轻量级锁,从此以后锁的状态就有了四种:无锁:无锁是指没有对
- Java零基础入门笔记:(3)程序控制
Sherlock Ma
JavaJava入门java笔记开发语言程序人生学习方法改行学it跳槽
前言本笔记是学习狂神的java教程,建议配合视频,学习体验更佳。【狂神说Java】Java零基础学习视频通俗易懂_哔哩哔哩_bilibiliScanner对象之前我们学的基本语法中我们并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类,我们可以获取用户的输入。Scanner类是Java中的一个实用工具类,位于java.util包中,主要用于从用户输入、文件或其他输入源中读取数据。它提
- Java零基础入门笔记:(4)方法
Sherlock Ma
JavaJava入门java笔记开发语言学习方法改行学it跳槽程序人生
前言本笔记是学习狂神的java教程,建议配合视频,学习体验更佳。【狂神说Java】Java零基础学习视频通俗易懂_哔哩哔哩_bilibili第1-2章:Java零基础入门笔记:(1-2)入门(简介、基础知识)-CSDN博客第3章:Java零基础入门笔记:(3)程序控制-CSDN博客--方法何谓方法Java方法是语句的集合,它们在一起执行一个功能。方法是解决一类问题的步骤的有序组合方法包含于类或对象
- Java Pjsip (Pjsua2 api ) 2.10 windows sip语音呼叫教程
java_lilin
pjsippjsipsippjsua2javasip
1.安装swigwin-4.0.1下载地址http://www.swig.org/download.html注意是swigwinWindowsusersshoulddownloadswigwin-4.0.1whichincludesaprebuiltexecutable.配置目录到winpath2.下载pjproject-2.10.zip(如果有python错误请安装py2.7及环境path配置)
- 优化Java中锁的性能
BrchCpp
java开发语言编程
在Java编程中,锁(Lock)是一种用于控制多线程并发访问共享资源的重要机制。然而,使用不当或性能较差的锁实现可能会导致性能瓶颈和线程竞争。本文将介绍一些优化Java中锁性能的方法,并提供相应的源代码示例。减少锁的粒度:锁的粒度越小,允许并发执行的线程数量就越多。因此,在设计多线程应用程序时,应尽量将锁的范围限定在最小必要范围内。例如,如果只需要保护某个特定字段的访问,而不是整个对象,可以使用细
- Java中的锁
向画
javajava开发语言
这里举例6种悲观锁和乐观锁是两种不同的并发控制策略,用于解决多线程或多进程环境下对共享资源访问时可能出现的数据不一致问题。下面分别介绍它们的概念、实现方式以及代码示例。悲观锁概念悲观锁假设在整个数据处理过程中,会有其他线程或进程来修改数据,因此在操作数据之前会先对数据进行加锁,确保在自己操作期间其他线程无法访问和修改该数据,直到操作完成并释放锁。这种锁的策略比较“悲观”,常用于写操作频繁的场景。实
- 基于SSM的实验室管理系统设计与实现 JAVA MYSQL
tangyuzhidao
java项目javamysql实验室管理系统java项目毕业设计
10175_基于SSM的实验室管理系统技术:SSM工具:eclipse+tomcat+mysql+jdk功能详情介绍:管理员界面:用户管理、实验室管理、设备管理、耗材管理、统计管理教师界面:个人信息管理、实验室管理、设备管理、耗材管理
- 【Java】Java 常用核心类篇(二)
hrrrrb
#Java基础java开发语言
目录Math类Math类概述常用常量Math.PIMath.E常用方法三角函数方法反三角函数方法指数和对数方法取整方法绝对值和最值方法随机数方法角度转换方法Math类Math类概述在Java编程里,Math类是一个极其重要的工具类,它存于java.lang包下。java.lang包是Java语言的核心包,在使用其中的类时,无需额外导入,Java编译器会自动处理。Math类有两个显著特点:被fina
- 学习疯狂JAVA讲义——运算符与位运算符
红鲤鱼与绿鲤鱼与哈士奇
学习java开发语言
笔记备忘,方便以后忘了查询(如有错误,敬请指点)★变量:-变量的定义、赋值(简单值、表达式)-8个基本类型:byte、short、int、long、float、double、char、boolean★运算符▲算数运算符(7个):+、-、*、/、%++:将单个变量的值加1放在变量之后:表示先用变量的值,再自加放在变量之前:表示先自加,再用变量的值--:将单个变量的值减1放在变量之后:表示先用变量的值
- 深入理解Java的集合框架
一碗黄焖鸡三碗米饭
java
深入理解Java的集合框架Java集合框架(JavaCollectionsFramework,简称JCF)是Java语言中最常用的API之一,它为开发者提供了强大且灵活的数据结构支持。集合框架通过一系列的接口和实现类,帮助我们管理、存储和操作数据。Java集合框架包括常见的List、Set、Map等接口及其具体实现类,合理选择适当的集合类型,对于程序性能和代码可维护性至关重要。本文将深入解析Jav
- 深入剖析Java内存管理与垃圾回收:优化程序性能的核心技能
一碗黄焖鸡三碗米饭
Java基础知识全面解析java开发语言后端jvm
深入剖析Java内存管理与垃圾回收:优化程序性能的核心技能在现代Java开发中,内存管理与垃圾回收(GC)是至关重要的议题。良好的内存管理不仅能够有效避免内存泄漏,还能提高程序的性能。Java作为一种高效的编程语言,采用了自动垃圾回收机制(GarbageCollection),大大简化了内存管理。但这并不意味着开发者可以完全忽视内存的管理与优化。本文将深入探讨Java的内存管理机制、堆与栈的概念、
- (01)ES6 教程——let与const、解构赋值、Symbol
欲游山河十万里
web框架学习es6前端javascript
前言ES6,全称ECMAScript6.0,是JavaScript的下一个版本标准,2015.06发版。ES6主要是为了解决ES5的先天不足,比如JavaScript里并没有类的概念,但是目前浏览器的JavaScript是ES5版本,大多数高版本的浏览器也支持ES6,不过只实现了ES6的部分特性和功能。ECMAScript的背景JavaScript是大家所了解的语言名称,但是这个语言名称是商标(O
- 【Java】逻辑运算符详解:&&、|| 与&、 | 的区别及应用
小ᶻ☡꙳ᵃⁱᵍᶜ꙳
springboot
博客主页:[小ᶻ☡꙳ᵃⁱᵍᶜ꙳]本文专栏:Java文章目录前言一、基本概念与运算符介绍二、短路与与非短路与:&&与&的区别1.`&&`:短路与(AND)2.`&`:非短路与(AND)三、短路或与非短路或:||与|的区别1.`||`:短路或(OR)2.`|`:非短路或(OR)四、总结:什么时候使用短路与非短路运算符五、拓展:短路与非短路运算符的副作用六、结论前言在Java编程中,逻辑运算符是非常常见
- Electron学习
星空0107
electronjavascriptecmascript
Electron的简介Electron基于chromium和Node.js,让我们可以使用Javascript,HTML,CSS构建跨平台的桌面应用程序,同时Electron兼容Mac,Window,和Linux,可以构建出三个平台的应用程序Electron的安装运行cmd,输入npminit,然后一直按enter换行即可输入cnpmielectron-S(如果电脑没有安装cnpm会报错,需要安装
- electron学习笔记
weixin_46452138
electron学习javascript
electron个人学习笔记一、electron简单了解Electron是一个跨平台的、基于Web前端技术的桌面GUI应用程序开发框架。可以使用HTML、CSS来绘制界面和控制布局,使用JavaScript来控制用户行为和业务逻辑,使用Node.js来通信、处理音频视频等,几乎所有的Web前端技术和框架(jQuery、Vue、React、Angular等)都可以应用到桌面GUI开发中。二、开发前基
- HTML之JavaScript对象
录大大i
javascripthtml前端
HTML之JavaScript对象Document/*参考文档地址:https://www.runoob.com/js/js-obj-intro.htmljsonjava数据类型变量数据类型变量运算符运算符流程控制流程控制函数方法对象面向对象常见对象*Java常用类(类库)1.数组1.数组创建方式2.数组API*/vararr=newArray();//类似于object集合vararr1=new
- 探索AutoJS:一款强大的Android自动化工具
夏庭彭Maxine
探索AutoJS:一款强大的Android自动化工具去发现同类优质开源项目:https://gitcode.com/在如今高度数字化的世界中,自动化扮演着越来越重要的角色。尤其在移动端,AutoJS是一个专为Android设计的强大自动化工具,它允许用户编写JavaScript代码来实现各种自动化任务,极大地提高了效率。这篇推荐文章将带你了解AutoJS的核心技术、应用场景以及其独特之处。项目简介
- 虚拟DOM和真实DOM的区别
水煮庄周鱼鱼
概念前端
虚拟DOM(VirtualDOM)、DOM(RealDOM)是前端开发中常用的两种概念。什么是真实DOM?真实DOM是浏览器中实际存在的DOM结构,它由浏览器解析HTML生成,并且直接与浏览器交互。当页面中的数据发生变化时,真实DOM会重新计算布局和渲染,这个过程比较耗费性能。什么是虚拟DOM?虚拟DOM是一种在内存中以JavaScript对象的形式表示的轻量级的DOM结构。它是对真实DOM的一种
- 网络安全常识
网络安全queen
网络网络安全网络协议web安全
随着互联网和移动互联网的持续火热,人们的生活也越来越离不开网络,网络安全,在这个信息化时代显得尤为重要,那么网络攻击和安全,这一攻守之间,主要涵盖哪些要点呢,下面我们就来对此进行抽丝剥茧,逐条解析。XSS(跨站脚本攻击)最常见的是cookie劫持,简单来说就是我们用浏览器登录一个网站,主要是用存在客户端浏览器里的cookie来保存客户唯一标识的令牌,在Java写就的网站里,是一个jsessioni
- 【JAVA工程师从0开始学AI】,第五步:Python类的“七十二变“——当Java的铠甲遇见Python的液态金属
架构默片
JAVA工程师从0开始学AIpythonjava开发语言
副标题:从继承大战到猴子补丁,看动态类型如何颠覆面向对象认知当Java工程师还在为implements和extends绞尽脑汁时,Python的类已化身"终结者T-1000",在代码世界肆意变形。这里没有private的保险箱,super()能穿越多重继承时空,甚至能在运行时给类"整容换脑"。本文将用五个震撼场景,带你体验Python面向对象编程的"量子纠缠"——原来类的__init__只是开始,
- Java开发实习面试笔试题(含答案)
小钊(求职中)
java面试开发语言springspringbootmaventomcat
在广州一家中大公司面试(BOSS标注是1000-9999人,薪资2-3k),招聘上写着Java开发,基本没有标注前端要求,但是到场知道是前后端分离人不分离。开始先让你做笔试(12道问答+4道SQL题),接着面试也是八股文之类的,没有问项目,没有做算法,现分享笔试和面试题目给大家做参考。(基础的没复习忘了不会,只会几道感觉已经寄了,最重要的是前端基本不会)一、笔试内容1.Java有哪些数据类型,什么
- 怎么把list中的数据选出其中一条放在第一位 java
隔壁蜡笔
listjavawindows数据结构开发语言
在Java中将List中的特定数据移至首位在Java开发中,操作集合类是频繁且基本的需求。例如,假设我们有一个包含多个元素的列表,需要将其中的某一特定元素移动到列表的第一位。这种需求在许多场景中都很常见,例如在用户界面排序、任务优先级调整等。本文将通过示例代码和图示化流程来说明如何实现这一功能。问题描述设想我们有一个包含多个字符串的列表,我们希望将某个特定的字符串(如果存在)移动到列表的第一位。比
- 什么是BIO、NIO、AIO?
PLuto777_
niojavaaio
在高性能的IO体系设计中,BIO、NIO、AIO的概念,常常会让我们感到困惑不解。在Java面试中,我们也经常会被问到这个问题。譬如:BIO、NIO、AIO的概念同步/异步、阻塞/非阻塞的区别NIO如何实现多路复用功能BIOBIO全称是BlockingIO,是JDK1.4之前的传统IO模型,本身是同步阻塞模式。线程发起IO请求后,一直阻塞IO,直到缓冲区数据就绪后,再进入下一步操作。针对网络通信都
- List获取指定位置元素
mini宝儿
arraylist
ArrayList中怎么获取指定第几个元素,例如获取第5个元素,可以通过list.get(4)得到。源码如下:publicclassArrayListextendsAbstractList implementsList,RandomAccess,Cloneable,java.io.Serializable{ privatestaticfinallongserialVersionUID=8683
- 如何使用 DeepSeek 帮助自己的工作?
C_V_Better
AI人工智能javajavaaiAI编程人工智能
DeepSeek是一款强大而灵活的AI工具,可以帮助你提高工作效率、优化工作流程并提升工作质量。以下是一些实用的建议,你可以根据自己的工作需求来选择使用。一、使用DeepSeek进行编程调试在编程过程中,遇到代码报错是很常见的问题。DeepSeek可以帮助你快速定位和解决这些问题。例如,当你在开发一个Java应用程序时,如果代码中出现了一个NullPointerException,你可以将错误信息
- 【一文读懂】JS与Java的区别
Bl_a_ck
JS进阶javascriptjava开发语言
相同点这两个语言除了注释长得差不多之外就没什么相同点了不同点设计初衷:JS从开发到上线就经历了10天的时间,最初的目的是实现网页端的动态交互效果,由于设计时间太短,语言的一些细节考虑得不够严谨,导致后来很长一段时间,Javascript写出来的程序混乱不堪。所以现在有了TS来代替JSJava设计用于编写跨平台的、运行在虚拟机上的应用程序设计理念:Java是典型的面相对象的语言,具有面向对象的三大特
- java list如何让指定元素排在第一位
C_V_Better
javajavalist
可以通过以下几种方式实现:一、使用List的方法实现方法1:使用add(0,element)和remove()获取指定元素的索引。将该元素从当前位置移除。使用add(0,element)方法将其插入到第一位。示例代码:importjava.util.ArrayList;importjava.util.List;publicclassMain{publicstaticvoidmain(String[
- 【如何实现 JavaScript 的防抖和节流?】
程序员远仔
前端面试高频问题宝典javascriptvue.js前端框架前端html5开发语言
如何实现JavaScript的防抖和节流?前言防抖(Debounce)和节流(Throttle)是JavaScript中优化高频事件处理的两种常用技术。它们可以有效减少事件处理函数的调用次数,提升性能并改善用户体验。本文将详细介绍防抖和节流的实现原理及其应用场景。关键词JavaScript、防抖、节流、高频事件、性能优化、事件处理、前端开发、前端面试、前端基础、前端进阶、前端工程化、前端开发最佳实
- java脚本弹出输入框,使用弹出框编辑(增加)表单内容
jordan.xue
java脚本弹出输入框
0、背景使用Amazeui中Prompt模态窗口Modal1、JQuery功能:表单复位获取表单的值,并显示在修改弹出框中(文本框、单选、多选、下拉框)发送Post异步请求给后台自刷新$(function(){//编辑功能$('table.edit').on("click",function(){//表单复位document.getElementById("form-machineRole").r
- java工厂模式
3213213333332132
java抽象工厂
工厂模式有
1、工厂方法
2、抽象工厂方法。
下面我的实现是抽象工厂方法,
给所有具体的产品类定一个通用的接口。
package 工厂模式;
/**
* 航天飞行接口
*
* @Description
* @author FuJianyong
* 2015-7-14下午02:42:05
*/
public interface SpaceF
- nginx频率限制+python测试
ronin47
nginx 频率 python
部分内容参考:http://www.abc3210.com/2013/web_04/82.shtml
首先说一下遇到这个问题是因为网站被攻击,阿里云报警,想到要限制一下访问频率,而不是限制ip(限制ip的方案稍后给出)。nginx连接资源被吃空返回状态码是502,添加本方案限制后返回599,与正常状态码区别开。步骤如下:
- java线程和线程池的使用
dyy_gusi
ThreadPoolthreadRunnabletimer
java线程和线程池
一、创建多线程的方式
java多线程很常见,如何使用多线程,如何创建线程,java中有两种方式,第一种是让自己的类实现Runnable接口,第二种是让自己的类继承Thread类。其实Thread类自己也是实现了Runnable接口。具体使用实例如下:
1、通过实现Runnable接口方式 1 2
- Linux
171815164
linux
ubuntu kernel
http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.1.2-unstable/
安卓sdk代理
mirrors.neusoft.edu.cn 80
输入法和jdk
sudo apt-get install fcitx
su
- Tomcat JDBC Connection Pool
g21121
Connection
Tomcat7 抛弃了以往的DBCP 采用了新的Tomcat Jdbc Pool 作为数据库连接组件,事实上DBCP已经被Hibernate 所抛弃,因为他存在很多问题,诸如:更新缓慢,bug较多,编译问题,代码复杂等等。
Tomcat Jdbc P
- 敲代码的一点想法
永夜-极光
java随笔感想
入门学习java编程已经半年了,一路敲代码下来,现在也才1w+行代码量,也就菜鸟水准吧,但是在整个学习过程中,我一直在想,为什么很多培训老师,网上的文章都是要我们背一些代码?比如学习Arraylist的时候,教师就让我们先参考源代码写一遍,然
- jvm指令集
程序员是怎么炼成的
jvm 指令集
转自:http://blog.csdn.net/hudashi/article/details/7062675#comments
将值推送至栈顶时 const ldc push load指令
const系列
该系列命令主要负责把简单的数值类型送到栈顶。(从常量池或者局部变量push到栈顶时均使用)
0x02 &nbs
- Oracle字符集的查看查询和Oracle字符集的设置修改
aijuans
oracle
本文主要讨论以下几个部分:如何查看查询oracle字符集、 修改设置字符集以及常见的oracle utf8字符集和oracle exp 字符集问题。
一、什么是Oracle字符集
Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。它使数据库工具,错误消息,排序次序,日期,时间,货
- png在Ie6下透明度处理方法
antonyup_2006
css浏览器FirebugIE
由于之前到深圳现场支撑上线,当时为了解决个控件下载,我机器上的IE8老报个错,不得以把ie8卸载掉,换个Ie6,问题解决了,今天出差回来,用ie6登入另一个正在开发的系统,遇到了Png图片的问题,当然升级到ie8(ie8自带的开发人员工具调试前端页面JS之类的还是比较方便的,和FireBug一样,呵呵),这个问题就解决了,但稍微做了下这个问题的处理。
我们知道PNG是图像文件存储格式,查询资
- 表查询常用命令高级查询方法(二)
百合不是茶
oracle分页查询分组查询联合查询
----------------------------------------------------分组查询 group by having --平均工资和最高工资 select avg(sal)平均工资,max(sal) from emp ; --每个部门的平均工资和最高工资
- uploadify3.1版本参数使用详解
bijian1013
JavaScriptuploadify3.1
使用:
绑定的界面元素<input id='gallery'type='file'/>$("#gallery").uploadify({设置参数,参数如下});
设置的属性:
id: jQuery(this).attr('id'),//绑定的input的ID
langFile: 'http://ww
- 精通Oracle10编程SQL(17)使用ORACLE系统包
bijian1013
oracle数据库plsql
/*
*使用ORACLE系统包
*/
--1.DBMS_OUTPUT
--ENABLE:用于激活过程PUT,PUT_LINE,NEW_LINE,GET_LINE和GET_LINES的调用
--语法:DBMS_OUTPUT.enable(buffer_size in integer default 20000);
--DISABLE:用于禁止对过程PUT,PUT_LINE,NEW
- 【JVM一】JVM垃圾回收日志
bit1129
垃圾回收
将JVM垃圾回收的日志记录下来,对于分析垃圾回收的运行状态,进而调整内存分配(年轻代,老年代,永久代的内存分配)等是很有意义的。JVM与垃圾回收日志相关的参数包括:
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintGCDateStamps
-Xloggc
-XX:+PrintGC
通
- Toast使用
白糖_
toast
Android中的Toast是一种简易的消息提示框,toast提示框不能被用户点击,toast会根据用户设置的显示时间后自动消失。
创建Toast
两个方法创建Toast
makeText(Context context, int resId, int duration)
参数:context是toast显示在
- angular.identity
boyitech
AngularJSAngularJS API
angular.identiy 描述: 返回它第一参数的函数. 此函数多用于函数是编程. 使用方法: angular.identity(value); 参数详解: Param Type Details value
*
to be returned. 返回值: 传入的value 实例代码:
<!DOCTYPE HTML>
- java-两整数相除,求循环节
bylijinnan
java
import java.util.ArrayList;
import java.util.List;
public class CircleDigitsInDivision {
/**
* 题目:求循环节,若整除则返回NULL,否则返回char*指向循环节。先写思路。函数原型:char*get_circle_digits(unsigned k,unsigned j)
- Java 日期 周 年
Chen.H
javaC++cC#
/**
* java日期操作(月末、周末等的日期操作)
*
* @author
*
*/
public class DateUtil {
/** */
/**
* 取得某天相加(减)後的那一天
*
* @param date
* @param num
*
- [高考与专业]欢迎广大高中毕业生加入自动控制与计算机应用专业
comsci
计算机
不知道现在的高校还设置这个宽口径专业没有,自动控制与计算机应用专业,我就是这个专业毕业的,这个专业的课程非常多,既要学习自动控制方面的课程,也要学习计算机专业的课程,对数学也要求比较高.....如果有这个专业,欢迎大家报考...毕业出来之后,就业的途径非常广.....
以后
- 分层查询(Hierarchical Queries)
daizj
oracle递归查询层次查询
Hierarchical Queries
If a table contains hierarchical data, then you can select rows in a hierarchical order using the hierarchical query clause:
hierarchical_query_clause::=
start with condi
- 数据迁移
daysinsun
数据迁移
最近公司在重构一个医疗系统,原来的系统是两个.Net系统,现需要重构到java中。数据库分别为SQL Server和Mysql,现需要将数据库统一为Hana数据库,发现了几个问题,但最后通过努力都解决了。
1、原本通过Hana的数据迁移工具把数据是可以迁移过去的,在MySQl里面的字段为TEXT类型的到Hana里面就存储不了了,最后不得不更改为clob。
2、在数据插入的时候有些字段特别长
- C语言学习二进制的表示示例
dcj3sjt126com
cbasic
进制的表示示例
# include <stdio.h>
int main(void)
{
int i = 0x32C;
printf("i = %d\n", i);
/*
printf的用法
%d表示以十进制输出
%x或%X表示以十六进制的输出
%o表示以八进制输出
*/
return 0;
}
- NsTimer 和 UITableViewCell 之间的控制
dcj3sjt126com
ios
情况是这样的:
一个UITableView, 每个Cell的内容是我自定义的 viewA viewA上面有很多的动画, 我需要添加NSTimer来做动画, 由于TableView的复用机制, 我添加的动画会不断开启, 没有停止, 动画会执行越来越多.
解决办法:
在配置cell的时候开始动画, 然后在cell结束显示的时候停止动画
查找cell结束显示的代理
- MySql中case when then 的使用
fanxiaolong
casewhenthenend
select "主键", "项目编号", "项目名称","项目创建时间", "项目状态","部门名称","创建人"
union
(select
pp.id as "主键",
pp.project_number as &
- Ehcache(01)——简介、基本操作
234390216
cacheehcache简介CacheManagercrud
Ehcache简介
目录
1 CacheManager
1.1 构造方法构建
1.2 静态方法构建
2 Cache
2.1&
- 最容易懂的javascript闭包学习入门
jackyrong
JavaScript
http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html
闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。
下面就是我的学习笔记,对于Javascript初学者应该是很有用的。
一、变量的作用域
要理解闭包,首先必须理解Javascript特殊
- 提升网站转化率的四步优化方案
php教程分享
数据结构PHP数据挖掘Google活动
网站开发完成后,我们在进行网站优化最关键的问题就是如何提高整体的转化率,这也是营销策略里最最重要的方面之一,并且也是网站综合运营实例的结果。文中分享了四大优化策略:调查、研究、优化、评估,这四大策略可以很好地帮助用户设计出高效的优化方案。
PHP开发的网站优化一个网站最关键和棘手的是,如何提高整体的转化率,这是任何营销策略里最重要的方面之一,而提升网站转化率是网站综合运营实力的结果。今天,我就分
- web开发里什么是HTML5的WebSocket?
naruto1990
Webhtml5浏览器socket
当前火起来的HTML5语言里面,很多学者们都还没有完全了解这语言的效果情况,我最喜欢的Web开发技术就是正迅速变得流行的 WebSocket API。WebSocket 提供了一个受欢迎的技术,以替代我们过去几年一直在用的Ajax技术。这个新的API提供了一个方法,从客户端使用简单的语法有效地推动消息到服务器。让我们看一看6个HTML5教程介绍里 的 WebSocket API:它可用于客户端、服
- Socket初步编程——简单实现群聊
Everyday都不同
socket网络编程初步认识
初次接触到socket网络编程,也参考了网络上众前辈的文章。尝试自己也写了一下,记录下过程吧:
服务端:(接收客户端消息并把它们打印出来)
public class SocketServer {
private List<Socket> socketList = new ArrayList<Socket>();
public s
- 面试:Hashtable与HashMap的区别(结合线程)
toknowme
昨天去了某钱公司面试,面试过程中被问道
Hashtable与HashMap的区别?当时就是回答了一点,Hashtable是线程安全的,HashMap是线程不安全的,说白了,就是Hashtable是的同步的,HashMap不是同步的,需要额外的处理一下。
今天就动手写了一个例子,直接看代码吧
package com.learn.lesson001;
import java
- MVC设计模式的总结
xp9802
设计模式mvc框架IOC
随着Web应用的商业逻辑包含逐渐复杂的公式分析计算、决策支持等,使客户机越
来越不堪重负,因此将系统的商业分离出来。单独形成一部分,这样三层结构产生了。
其中‘层’是逻辑上的划分。
三层体系结构是将整个系统划分为如图2.1所示的结构[3]
(1)表现层(Presentation layer):包含表示代码、用户交互GUI、数据验证。
该层用于向客户端用户提供GUI交互,它允许用户