202110-01 每日六道java新手入门面试题,通往自由的道路--线程池 目录1.你知道线程池吗?为什么需要使用线程池?小结:2.你知道有多少种创建线程池的方式3.线程池的五种状态你有了解吗?4.你知道ThreadPoolExecutor的构造方法和参数吗5.你可以说下线程池的执行过程原理吗6.能否写一个简单线程池的demo?总结1.你知道线程池吗?为什么需要使用线程池?在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源。而在Java中,JVM中每创建和销毁线程... 继续阅读 >
202109-30 每日六道java新手入门面试题,通往自由的道路--多线程 目录1.你可以讲下进程与线程的区别?为什么要用多线程?2.什么是上下文切换?3.说说你知道的几种创建线程的方式4.昨天你讲到创建线程后使用start方法去调用线程,为什么run方法不行呢?有什么区别?5.你知道你开启一个线程后,它的状态有那些吗?6.既然讲到超时方法,那你讲下sleep和wait的区别和他们需要怎样唤醒总结:1.你可以讲下进程与线程的区别?为什么要用多线程?进程:进程是程序的一次执行过程,是系统运行... 继续阅读 >
202109-30 Java并发编程必备之Future机制 前言Java5在concurrency包中引入了java.util.concurrent.Callable接口,它和Runnable接口很相似,但它可以返回一个对象或者抛出一个异常。Callable接口使用泛型去定义它的返回类型。Executors类提供了一些有用的方法在线程池中执行Callable内的任务。由于Callable任务是并行的,我们必须等待它返回的结果。而线程是属于异步计算模型,所以不可能直接从别的线程中得到函数返回值。java.util.concurrent.Future对象为我们解决了这... 继续阅读 >
202109-30 每日六道java新手入门面试题,通往自由的道路--JVM 目录1.JVM是如何判断对象是否可回收2.你知道有什么垃圾回收的常见算法吗?3.你知道有什么垃圾收集器吗?4.那你知道什么时候才会触发FullGC5.JVM中四种引用你有了解过吗?6.说说你知道的几种主要的JVM参数1.堆设置2.收集器设置3.并行收集器设置4.并发收集器设置5.JVM调优的参数总结1.JVM是如何判断对象是否可回收垃圾收集器在做垃圾回收的时候,首先需要判断一个对象是存活状态还是死亡状态,死亡的对象将会被标识为垃圾数... 继续阅读 >
202109-30 浅谈Java安全编码之文件和共享目录的安全性 目录一、linux下的文件基本权限二、linux文件的特殊权限2.1、SetUID和SetGID2.2、StickyBit2.3、SUID/SGID/SBIT权限设置三、文件隐藏属性四、特殊文件五、java中在共享目录中使用文件要注意的问题六、安全目录一、linux下的文件基本权限chmod是linux下面的权限管理命令,我们可以通过chmod来对文件的权限进行修改。普通文件的权限有三种,rwx分别是读,写和执行。再加上三个用户分组:owner,group,other我们可以很方便的使... 继续阅读 >
202109-30 浅谈Java中Lambda表达式的相关操作 为什么要使用Lambda?可以对一个接口进行非常简洁的实现。Lambda对接口的要求?接口中定义的抽象方法有且只有一个才可以。传统实现一个接口需要这样做:方法一://实现接口,同时必须重写接口中抽象方法classTestimplementsIntrfacefN{@OverridepublicvoidgetUser(inta,intb){}}//@FunctionalInterface注解意思:函数式接口,用来做规范,有这个注解,说明此接口有且只有一个抽象方法!!!@FunctionalI... 继续阅读 >
202109-30 每日六道java新手入门面试题,通往自由的道路第二天 目录1.你可以讲下你对String类有什么其他的了解吗?2.==和equals的区别3.Strings=newString(“nz”)创建了几个字符串对象?4.你可以讲下JVM的运行时数据区或者说内存结构吗?5.类加载过程6.而其中类加载器是什么,那有哪些呢?总结1.你可以讲下你对String类有什么其他的了解吗?在看String的源码过程中,可以发现String内部实际存储结构为char数组,在String中有几个比较重要的构造函数://默认的无参构造pub... 继续阅读 >
202109-30 Java下变量大小写驼峰、大小写下划线、大小写连线转换 目录写在前面引入guava依赖包怎么做变量转换写在前面有时候需要处理对象属性的getter、setter方法,或者将属性与数据表字段进行相互转换,这时候就需要用到将小写驼峰转换为小写下划线方式,当然我们可以自己手撸一段代码来实现,但Google的大神们,已经给我们提供了一个现成的开发包,也就是Googleguava包。直接拿来主义吧!引入guava依赖包这个非常简单,只需要在工程的pom.xml中引入依赖的坐标即可。<dependency>... 继续阅读 >
202109-30 每日六道java新手入门面试题,通往自由的道路 目录1.面试第一步,自我介绍。2.请你简述下对面向对象的理解,面向对象和面向过程的区别?1.个人理解:2.面向对象3.面向过程3.那你再讲下面向对象的特征有哪些方面4.请问:我们是否可以继承String类?5.我再问下final、finally、finalize这三者有什么区别吗?6.请讲下String和StringBuilder、StringBuffer之间的区别?总结1.面试第一步,自我介绍。这个自我介绍,在整个面试当中可以说是第一步,如果你能把你想说的重点说... 继续阅读 >
202109-30 ReentrantReadWriteLock不能锁升级的原因总结 为什么ReentrantReadWriteLock不能锁升级在ReentrantReadWriteLock中,锁是不可以升级的,只能降级。也就是如果当前线程持有了ReadLock,那么就不能再获取WriteLock,但是,如果当前线程持有了WriteLock,可以直接获取ReadLock下面用代码尝试一下:Loggerlogger=LoggerFactory.getLogger(this.getClass());ReentrantReadWriteLockreentrantReadWriteLock=newReentrantReadWriteLock();ReentrantReadWriteLock.ReadLockread... 继续阅读 >
202109-30 浅谈Java基准性能测试之JMH 目录一、JMHvsJMeter二、JMH基本用法2.1、创建JMH项目2.2、编写基准测试代码2.3、JMH打包、运行2.4、JMH与Springboot三、JMH注解3.1、JMHBenchmarkModes3.2、BenchmarkTimeUnits3.3、BenchmarkState3.4、StateObject@Setup@TearDown3.5、Fork3.6、Thread3.7、Warmup3.8、Measurement四、输出测试结果一、JMHvsJMeterJMeter可能是最常用的性能测试工具。它既支持图形界面,也支持命令行,属于黑盒测试的范畴,对非开发... 继续阅读 >
202109-30 详解Java中CountDownLatch异步转同步工具类 使用场景由于公司业务需求,需要对接socket、MQTT等消息队列。众所周知socket是双向通信,socket的回复是人为定义的,客户端推送消息给服务端,服务端的回复是两条线。无法像http请求有回复。下发指令给硬件时,需要校验此次数据下发是否成功。用户体验而言,点击按钮就要知道此次的下发成功或失败。如上图模型,第一种方案使用Tread.sleep优点:占用资源小,放弃当前cpu资源缺点:回复速度快,休眠时间过长,仍然需要等待休眠结... 继续阅读 >
202109-29 半小时实现Java手撸网络爬虫框架(附完整源码) 最近在做一个搜索相关的项目,需要爬取网络上的一些链接存储到索引库中,虽然有很多开源的强大的爬虫框架,但本着学习的态度,自己写了一个简单的网络爬虫,以便了解其中的原理。今天,就为小伙伴们分享下这个简单的爬虫程序!!首先介绍每个类的功能:DownloadPage.java的功能是下载此超链接的页面源代码.FunctionUtils.java的功能是提供不同的静态方法,包括:页面链接正则表达式匹配,获取URL链接的元素,判断是否创建文... 继续阅读 >
202109-29 浅谈Java中FastJson的使用 FastJson的使用使用maven导入依赖包<!--下边依赖跟aop没关系,只是项目中用到了JSONObject,所以引入fastjson--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.70</version></dependency>常用方法:1.JSON.toJSONString(obejct)-java对象转JSON字符串,注意:默认情况下,如果int类型和boolean类型的属性没赋值的时候 (publicbooleana;publicintb;),调用J... 继续阅读 >
202109-29 Java8新特性:lambda表达式总结 一、Lambda表达式的基础语法Lambda表达式的基础语法:Java8中引入了一个新的操作符"->"该操作符称为箭头操作符或Lambda操作符箭头操作符将Lambda表达式拆分成两部分:左侧:Lambda表达式的参数列表右侧:Lambda表达式中所需执行的功能,即Lambda体语法格式一:无参数,无返回值()->System.out.println("HelloLambda!");语法格式二:有一个参数,并且无返回值(x)->System.out.println(x)语法格式三:若只... 继续阅读 >
202109-29 Java基础之详解HashSet的使用方法 JavaHashSetHashSet基于HashMap来实现的,是一个不允许有重复元素的集合。HashSet允许有null值。HashSet是无序的,即不会记录插入的顺序。HashSet不是线程安全的,如果多个线程尝试同时修改HashSet,则最终结果是不确定的。您必须在多线程访问时显式同步对HashSet的并发访问。HashSet实现了Set接口。HashSet中的元素实际上是对象,一些常见的基本类型可以使用它的包装类。添加元素HashSet类提供类很多有用的方... 继续阅读 >