
Java基础
文章平均质量分 55
一个喜欢健身的程序员
你所努力的一切,最坏的结果也是个大器晚成
展开
-
Java虚拟机运行时数据区
概述Java虚拟机在执行Java程序的过程中会把管理的内存划分为若干个不同的数据区域,包括以下几个运行时数据区。程序计数器程序计数器(Program Counter Register)是一块较小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器。在虚拟机概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等都依赖这个计数器完成。线程切换后为了能恢复到正确的执行位置,每条线程都...原创 2022-03-02 15:53:35 · 1603 阅读 · 0 评论 -
解决服务器:“java.lang.OutOfMemoryError : unable to create new native Thread”异常问题
1.问题描述:启动springboot项目时候日志打印:“服务进程申请线程数量的限制”异常2.问题分析:(1)既然报“OutOfMemoryError”,而且还是“ unable to create new native Thread.”,那么很可能是程序申请的Thread数超过了系统能够承载的限制。但是作为一台性能还不错的服务器,不应该出现系统资源不够用。(2)系统资源够用的话应该就看一下,是否超过了 OS 允许的 max user process?(3)如果上面都不对的话,推测应该是原创 2022-02-19 19:12:53 · 5413 阅读 · 0 评论 -
spring 事务问题:Transaction rolled back because it has been marked as rollback-only
问题描述:同事测试时使用异常数据,代码报错但是并不是异常产生的错误,而出现:Transaction rolled back because it has been marked as rollback-only中文翻译就是:事务已回滚,因为它被标记成了只回滚代码片段: // 我的代码 @Transactional(readOnly = true, rollbackFor = Exception.class) public String select(Stri原创 2020-08-11 19:51:49 · 27259 阅读 · 2 评论 -
Oracle连接时报错ORA-12516 TNS:listener could not find available handler with matching protocol stack
定位原因-- 以sysdba身份登陆PL/SQL sqlplus / as sysdba;-- 查看当前连接进程数SQL>select count(*) from v$process;-- 查看连接数上限SQL>select value from v$parameter where name = 'processes';-- 查询processes数量SQL> show parameter processesNAME TYPE VALUE--------------原创 2020-07-13 18:59:17 · 627 阅读 · 0 评论 -
java死锁的原因及解决办法
1.什么是死锁所谓死锁是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵局状态时,若无外力作用,它们都将无法再向前推进。例:如果有个线程a,按照先锁a再锁b的顺序获取得锁,在此同时又有另一个线程b,按照先锁b再锁a的顺序获取锁。2.产生死锁的原因1.系统资源不足;2.进程推进顺序不合适;3.资源分配不当;3.死锁产生的必要条件互斥使用:即当资源被一...原创 2020-04-17 09:05:09 · 1570 阅读 · 1 评论 -
Java线程池使用及详解
1.什么是线程 线程池就是提前创建若干个线程,如果有任务需要处理,线程池里的线程就会处理任务,处理完之后线程并不会被销毁,而是等待下一个任务。由于创建和销毁线程都是消耗系统资源的,所以当你想要频繁的创建和销毁线程的时候就可以考虑使用线程池来提升系统的性能。java.util.concurrent.Executors提供了一个 java.util.concurrent.Executor...原创 2020-04-16 09:23:04 · 336 阅读 · 0 评论 -
华信智原java考试题及答案
华信智原java考试题1、用户设置环境变量的合法格式为()A、set path to c:\jdk1.5\binB、set classpath to c:\jdk1.5\binC、set classpath=c:\jdk1.5\binD、set classpath c:\jdk1.5\bin2、下面均为Java关键字的一组是()A、boolean,byte,long,trueB、b...原创 2018-10-24 00:06:03 · 1516 阅读 · 0 评论 -
华信智原java考试题及答案
试题在上篇文章,个人答案仅供参考1-5:CABDA 6-10:DBBDB11-15:CBABD16-20:CDADA21-25:DBACA26-30:BBDBD31-35:ADACA36-40:DBAAB41-45ADADD46-50BACBB原创 2018-10-24 00:15:22 · 944 阅读 · 0 评论 -
List中用Stream,filter代替for循环
首先创建一个Student类public Class Student{ private Long id; private String name; ..... ....省略get和set方法 }在List<Student>中查找name为ZhangSan的对象Strudent在Java8中我们可以这样操作1.查...原创 2018-11-16 19:49:28 · 14024 阅读 · 2 评论 -
JOOQ入门-DSL
1.DSL简介org.jooq.impl.DSL是生成所有JOOQ对象的主要类。它作为一个静态工厂生成数据库表达式,列表达式,条件表达式和其他查询部分。JOOQ 2.0以后,为了使客户端代码更加趋近于SQL,引进静态工厂方法。当你使用DSL,只需要简单的从DSL类引入静态方法即可。2.DSL用法DSLContext 和DSL是访问JOOQ类和功能的主要切入点。创建一个常量的字段,...原创 2018-12-14 15:14:07 · 2424 阅读 · 0 评论 -
强大的lombok注解@Getter @Setter详解
1.为什么强大? 项目中经常使用bean,entity等类,绝大部分数据类类中都需要get、set、toString、equals和hashCode方法,尽管IDE工具都会帮我们生成。但自动生成这些代码后,如果bean中的属性一旦有修改、删除或增加时,需要重新生成或删除get/set等方法,给代码维护增加负担。而使用了lombok之后,就不需要编写或生成setter或getter等方...原创 2018-12-25 18:46:16 · 54681 阅读 · 3 评论 -
WebSocket入门
1.什么是WebSocket?Web Socket是一种在单个TCP连接上进行全双工通信协议。2.WebSocket的作用?WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。3.使用优点?能够更好的节省服务器资源...原创 2019-06-18 13:56:29 · 151 阅读 · 0 评论 -
注解@JsonIgnore的作用
最近新接手一个项目维护,后天明明存在传到前端时候就显示为空,坑了我好久后来看到实体类有些属性的get和set方法中有这个注解,就上网了解总结一下。希望对大家有所帮助。 使用方法:一般标记在属性或者方法上,返回的json数据即不包含该属性。 作用:在json序列化时将java 中的一些属性忽略掉,序列化和反序列化都受影响。 图 中属性在通过Json传出时就不会显示...原创 2019-07-17 18:45:11 · 3860 阅读 · 0 评论 -
List使用Stream对BigDecimal求和方法
工作中经常碰到List中的对象为BigDecimal类型的,用习惯Stream后,如果用for或者iterator遍历来累加感觉很麻烦,就上网上找了一些方法,希望能帮到大家。 BigDecimal result2 = userList.stream() // 将user对象的age取出来map为Bigdecimal ...原创 2019-08-30 16:35:09 · 52692 阅读 · 10 评论 -
JDBC批量插入数据
批量操作的方式一般有两种:事务提交方式和批量处理1.使用事务提交方式:先将命令的提交方式设为false,即手动提交conn.setAutoCommit(false);最后在所有命令执行完之后再提交事务conn.commit();private String url = "jdbc:mysql://localhost:3306/test"; private String use...原创 2018-10-08 17:19:08 · 606 阅读 · 0 评论 -
什么是jedis?
讲到jedis,先来看看redis, redis是当今基本所有互联网产品都在使用的一种提供键值对形式的内存数据库。之所以说是内存数据库,是因为redis基于内存的读取和写入相比传统的数据库基于磁盘IO快上数倍。于是乎redis在现在的应用中使用的非常广泛。主要的作用在于:1、提供缓存服务,存储访问频率高的热数据防止穿透到数据库2、在分布式系统中可以作为实现分布式锁的一种实现方案...那je...原创 2018-09-26 17:13:57 · 1286 阅读 · 0 评论 -
Java经典面试题之:HashTable和HashMap区别
(1)继承父类不同:Hashtable继承自Dictionary类,HashMap继承AbstractMap类 (2)线程安全不同:HashMap线程不安全,Hashtable线程安全(3)HashMap没有contains方法,Hashtable实现contains方法;(4)HashMap可以有null,Hashtable的key和value不允许出现null值(5)两个遍历方式的内部实现不...原创 2018-04-26 14:46:44 · 258 阅读 · 0 评论 -
进程和线程区别
1.定义进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。线程是一个进程的实体,是CPU调度和分配的基本单位,它是比进程更小的能独立运行的基本单位,线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源,但是它可以和同属于一个进程的其他的线程共享进程所拥有的全部资源。2.关系 一个线程可以创建和撤销另一个线程,同一个进程的多个线程之...原创 2018-05-18 09:30:04 · 190 阅读 · 0 评论 -
常用的线程池的创建方式
1.SingleThread Executor:只有一个线程的线程池,因此所有提交的任务是顺序的,代码:Executors.newSingleThreadExecutor()2.Cached Thread Pool线程池里有很多线程需要同时执行,旧的可用线程将被新的任务重新执行,如果线程超过60秒内没执行,那么将被终止并从线程池中删除,代码:Executors.newCachedTreadPool...原创 2018-04-27 20:00:04 · 207 阅读 · 0 评论 -
Access restriction: The type 'Base64' is not API 的解决办法
右键单击项目-->properties-->Java Bulid Path-->JRE System Library-->Access rules-->Edit...选择Add...-->Resolution-->Accessible,下面填上** ,最后Apply等待刷新全部完成!...原创 2018-05-25 09:41:14 · 3234 阅读 · 0 评论 -
GROUP BY和HAVING入门
GROUP BY :分组查询,语句用于结合聚合函数,根据一个或多个列对结果集进行分组,最终得到一个分组汇总表。一个学生信息表结构如下:id name age teacher class ranking school1 sunyan 22 a 1 3 ...原创 2018-05-29 15:03:58 · 185 阅读 · 0 评论 -
JDBC连接数据库的主要步骤
1.加载JDBC驱动程序:在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机)这里通过java.lang.Class类的静态方法forName(String className)实现:try{//加载MySql的驱动类Class.forName("com.mysql.jdbc.Driver") ;}catch(ClassNotFoundException e){...原创 2018-07-10 19:41:53 · 388 阅读 · 0 评论 -
javax.inject中@Named注解
@Name和spring中的@Component相同。*@controller 控制器(注入服务)用于标注控制层,相当于struts中的action层@Name可以有值,如果没有值生成的bean名称默认和类名相同。例如:@Named public class personbean的名字就是person@Named(ps) public class Person 如...原创 2018-07-24 18:35:31 · 15822 阅读 · 1 评论 -
Spring注解之@Qualifier
@Qualifier:限定描述符,用于细粒度选择候选者;@Autowired默认是根据类型进行注入的,因此如果有多个类型一样的Bean候选者,则需要限定其中一个候选者,否则将抛出异常场景如下:现有有接口:public interface EmployeeService { public EmployeeDto getEmployeeById(Long id);}同...原创 2018-07-30 10:59:54 · 332 阅读 · 0 评论 -
synchronized的实现原理及JDK1.6之后的锁优化
概念:synchronized可以保证方法或代码块在运行时,同一时刻只有一个方法进入到临界区,同时它还保证共享变量的内存可见性;synchronized是一个重量级锁,相对Lock并不高效,显得更加笨重。实现原理同步代码块是使用monitorenter和monitorexit指令实现的,同步方法依靠的是方法修饰符上的ACCSYNCHRONIZED实现。Java对象头和mon...原创 2018-08-03 18:33:06 · 1924 阅读 · 0 评论 -
基于Java Scocket 简单的多线程聊天程序
一个简单的聊天程序,有客户端和服务端,可以进行群聊功能。只有两个文件,涉及Scocket和多线程知识。话不多说直接上代码服务器端代码:/** * Created by lean on 2018/7/30. */import java.awt.FlowLayout;import java.awt.event.ActionEvent;import java.awt.event...原创 2018-07-30 18:45:09 · 743 阅读 · 0 评论 -
Guava简介
Guava是什么?Guava是一种基于开源的Java库,Google Guava源于2007年的"Google Collections Library"。这个库是为了方便编码,并减少编码错误。这个库用于提供集合,缓存,支持原语句,并发性,常见注解,字符串处理,I/O和验证的实用方法。Guava的好处标准化 - Guava库是由谷歌托管。 高效 - 可靠,快速和有效的扩展JAVA标准库...原创 2018-07-27 14:34:10 · 35651 阅读 · 1 评论 -
jdk1.8新特性Lambda表达式
lambda表达式其实就是指一个匿名函数,它支持Java也能进行简单的“函数式编程”,是一个匿名函数,即没有函数名的函数。而能够使用lambda表达式的一个前提要求是,该变量必须实现某个函数式接口。基本语法:(parameters) -> expression 或 (parameters) ->{ statements; }即: 参数 -> 带返回值的表达式/无返回...原创 2018-08-02 17:07:22 · 323 阅读 · 0 评论 -
字符串如何转为JSON对象
首先导入commons-codec-1.11.jar包然后下面代码就可以帮助你取到想要的值了public class JsonTest { public static void main(String[] args){ String strJson="[{id:'001',name:'张三',age:32}]"; JSONObject jsonOb...原创 2018-09-11 19:10:07 · 3363 阅读 · 0 评论 -
Object类的equals()方法入门详解
equals(Object o)定义:比较是否相等,Object中的equals()方法与==相同(如下源码),都是比较两个对象的内存地址。子类一般情况下需要重写equals方法。 public boolean equals(Object obj) { return (this == obj);}由此可见,原生的Object的equals()方法内部调用的是==,那么问题来了,既然是这样,...原创 2018-04-26 14:17:52 · 7874 阅读 · 0 评论