JDK

java基础面试题1

二次信任 提交于 2020-08-20 09:31:30
&和&&的区别? & 无论左边表达式执行结果如何,都会执行右边 && 左边执行不符合条件时,右边不执行 1 public static void main(String[] args) { 2 int i = 1 ; 3 int j = 2 ; 4 5 // & 6 if (++i==10 & ++j==10) { // false 7 System.out.println(i); 8 System.out.println(j); 9 } 10 System.out.println(i); // 2 11 System.out.println(j); // 3 12 13 // & 14 if (++i==10 && ++j==10) { // false 15 System.out.println(i); 16 System.out.println(j); 17 } 18 System.out.println(i); // 3 19 System.out.println(j); // 3 20 } int 和 Integer 有什么区别?(基本数据类型有哪些?)(String不是基本数据类型) Java 为每个基本类型都提供了包装类,int 的包装类就是 Integer,并且从 jdk1.5 引入了自动拆箱、装箱机制,使得二者可以相互转换。 原始类型:boolean,char

Java并发问题--乐观锁与悲观锁以及乐观锁的一种实现方式-CAS

China☆狼群 提交于 2020-08-20 09:19:40
首先介绍一些乐观锁与悲观锁:   悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。再比如 Java里面的同步原语 synchronized关键字的实现也是悲观锁 。   乐观锁:顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁, 但是在更新的时候会判断一下在此期间别人有没有去更新这个数据 ,可以使用版本号等机制。 乐观锁适用于多读的应用类型 ,这样可以提高吞吐量,像数据库提供的类似于write_condition机制,其实都是提供的乐观锁。在 Java中java.util.concurrent.atomic包下面的 原子变量类就是使用了乐观锁的一种实现方式CAS实现的 。 乐观锁的一种实现方式-CAS(Compare and Swap 比较并交换):   锁存在的问题:      Java在JDK1.5之前都是靠 synchronized关键字保证同步的 ,这种通过使用一致的锁定协议来协调对共享状态的访问,可以确保无论哪个线程持有共享变量的锁,都采用独占的方式来访问这些变量。这就是一种独占锁,独占锁其实就是一种悲观锁,所以可以说 synchronized 是悲观锁。  

【Spring】Spring AOP 代理对象生成逻辑源码分析

非 Y 不嫁゛ 提交于 2020-08-20 08:16:23
1. spring aop案例(POJO注入) 1.0 被代理接口 TargetInterface /** * 被代理的接口 * @author Yang ZhiWei */ public interface TargetInterface { void show(); String showName(); } 1.1 被代理对象 @Slf4j public class TargetObject implements TargetInterface { @Override public void show() { log.info("show----->I am a TargetObject!"); } @Override public String showName() { return "showName--->TargetObject !"; } } 1.2 通知 MyAdvice @Slf4j public class MyAdvice { public void takeSeat() { log.info("====> MethodBeforeAdvice:Take Seat!"); } public void turnOffPhone() { log.info("==> MethodBeforeAdvice:turn Off Phone!"); } public

尚硅谷Java——宋红康笔记【day6-day10】

a 夏天 提交于 2020-08-20 08:08:42
day6 一、数组的概述 1.数组的理解:数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。 2.数组相关的概念: 数组名 元素 角标、下标、索引 数组的长度:元素的个数 3.数组的特点: 1)数组是有序排列的 2)数组属于引用数据类型的变量。数组的元素,既可以是基本数据类型,也可以是引用数据类型 3)创建数组对象会在内存中开辟一整块连续的空间 4)数组的长度一旦确定,就不能修改。 4.数组的分类: ① 按照维数:一维数组、二维数组、。。。 ② 按照数组元素的类型:基本数据类型元素的数组、引用数据类型元素的数组 5.一维数组的使用 ① 一维数组的声明和初始化 ② 如何调用数组的指定位置的元素 ③ 如何获取数组的长度 ④ 如何遍历数组 ArrayTest.java public class ArrayTest { public static void main(String[] args) { //1. 一维数组的声明和初始化 int num;//声明 num = 10;//初始化 int id = 1001;//声明 + 初始化 int[] ids;//声明 //1.1 静态初始化:数组的初始化和数组元素的赋值操作同时进行 ids = new int[]{1001,1002,1003,1004}; //1

pytest+requests+Python3.7+yaml+Allure+Jenkins+docker实现接口自动化测试

强颜欢笑 提交于 2020-08-20 07:52:50
接口自动化测试框架(用例自动生成) 项目说明 本框架是一套基于 pytest+requests+Python3.7+yaml+Allure+Jenkins+docker 而设计的数据驱动接口自动化测试框架, pytest 作为执行器,本框架无需你使用代码编写用例,那你可能会担心万一有接口之间相互依赖,或者说需要登入的token等之类的接口,该如何编写用例呢,在这里告诉你们本框架已经完美解决此问题,所有的一切将在yaml中进行!!本框架实现了在yaml中进行 接口用例编写,接口依赖关联,接口断言,自定义测试用例运行顺序 ,还有很重要的一点,实现了类 jmeter函数助手 的功能,譬如生成MD5、SHA1、随机定长字符串、时间戳等,只需要你在yaml中使用特殊的写法 $Function(arg)$ ,就能够使用这些函数啦,此外在测试执行过程中,还可以 对失败用例进行多次重试 ,其重试次数和重试时间间隔可自定义;而且可以根据实际需要扩展接口协议,目前已支持 http接口和webservice接口 。 技术栈 requests suds-py3 Allure pytest pytest-html yaml logging Jenkins docker 函数助手 环境部署 命令行窗口执行pip install -r requirements.txt 安装工程所依赖的库文件 解压allure

处理“ java.lang.OutOfMemoryError:PermGen空间”错误

别来无恙 提交于 2020-08-20 07:32:23
问题: Recently I ran into this error in my web application: 最近,我在Web应用程序中遇到此错误: java.lang.OutOfMemoryError: PermGen space java.lang.OutOfMemoryError:PermGen空间 It's a typical Hibernate/JPA + IceFaces/JSF application running on Tomcat 6 and JDK 1.6. 这是在Tomcat 6和JDK 1.6上运行的典型Hibernate / JPA + IceFaces / JSF应用程序。 Apparently this can occur after redeploying an application a few times. 显然,这可能是在重新部署应用程序几次之后发生的。 What causes it and what can be done to avoid it? 是什么原因引起的,可以采取什么措施避免它发生? How do I fix the problem? 我该如何解决该问题? 解决方案: 参考一: https://stackoom.com/question/Mx9/处理-java-lang-OutOfMemoryError-PermGen空间

面试官:小伙子,你给我说一下HashMap 为什么线程不安全?

心不动则不痛 提交于 2020-08-20 07:27:06
前言:我们都知道HashMap是线程不安全的,在多线程环境中不建议使用,但是其线程不安全主要体现在什么地方呢,本文将对该问题进行解密。 1.jdk1.7中的HashMap 在jdk1.8中对HashMap做了很多优化,这里先分析在jdk1.7中的问题,相信大家都知道在jdk1.7多线程环境下HashMap容易出现死循环,这里我们先用代码来模拟出现死循环的情况: 1 public class HashMapTest { 2 3 public static void main(String[] args) { 4 HashMapThread thread0 = new HashMapThread(); 5 HashMapThread thread1 = new HashMapThread(); 6 HashMapThread thread2 = new HashMapThread(); 7 HashMapThread thread3 = new HashMapThread(); 8 HashMapThread thread4 = new HashMapThread(); 9 thread0.start(); 10 thread1.start(); 11 thread2.start(); 12 thread3.start(); 13 thread4.start(); 14 } 15 }

JDK9的新特性:JVM的xlog如何正确运用?案例详解

一世执手 提交于 2020-08-20 07:06:20
JVM是java程序运行的基础,JVM中各种事件比如:GC,class loading,JPMS,heap,thread等等其实都可以有日志来记录。通过这些日志,我们可以监控JVM中的事件,并可以依次来对java应用程序进行调优。 在JDK9中引入的Xlog日志服务就是为这个目的而创建的。另外注意:很多人在学Java高级过程中难免会遇到各种问题解决不了。为此我建了个裙 783802103,里面很多架构师一起交流解答,没基础勿进哦! 通过xlog,JDK将JVM中的各种事件统一起来,以统一的形式对外输出。通过tag参数来区分子系统,通过log level来区分事件的紧急性,通过logging output来配置输出的地址。 更多内容请访问 www.flydean.com xlog的使用 先看一个最简单的xlog的使用例子: java -Xlog -version 输出结果: [0.016s][info][os] Use of CLOCK_MONOTONIC is supported [0.016s][info][os] Use of pthread_condattr_setclock is not supported [0.016s][info][os] Relative timed-wait using pthread_cond_timedwait is associated

大白话说Java反射:入门、使用、原理

◇◆丶佛笑我妖孽 提交于 2020-08-20 06:56:27
文章首发于 【博客园-陈树义】 ,点击跳转到原文 《大白话说Java反射:入门、进阶、原理》 反射之中包含了一个「反」字,所以想要解释反射就必须先从「正」开始解释。 一般情况下,我们使用某个类时必定知道它是什么类,是用来做什么的。于是我们直接对这个类进行实例化,之后使用这个类对象进行操作。 Apple apple = new Apple(); //直接初始化,「正射」 apple.setPrice(4); 上面这样子进行类对象的初始化,我们可以理解为「正」。 而反射则是一开始并不知道我要初始化的类对象是什么,自然也无法使用 new 关键字来创建对象了。 这时候,我们使用 JDK 提供的反射 API 进行反射调用: Class clz = Class.forName("com.chenshuyi.reflect.Apple"); Method method = clz.getMethod("setPrice", int.class); Constructor constructor = clz.getConstructor(); Object object = constructor.newInstance(); method.invoke(object, 4); 上面两段代码的执行结果,其实是完全一样的。但是其思路完全不一样,第一段代码在未运行时就已经确定了要运行的类(Apple)

JDK安装及JAVA环境变量配置(JDK1.8版本)

时光毁灭记忆、已成空白 提交于 2020-08-20 06:39:05
一:JDK官网下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk12-downloads-5295953.html JDK1.8下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 1.1如图进入官网下载页面,下载JDK12.0.1 1.2:点击接受条款,选择你的操作系统,我是Windows 64位的,选择最后一个。 1.3:如果下载的是1.8版本的jdk,如下图选择安装。 注:jdk目前最新的是12.0.1,zip格式,也就是压缩包格式不用安装,这个格式本人还没试过,以后再更新。 个人使用的是1.8版本的,以下教程都是JDK1.8的配置 二:jdk环境配置 2.1:下载放到E盘,建议在E盘下新建一个名为 Java 的文件夹,双击exe文件进行安装 2.2:JDK的安装会出现两次提示选择安装路径,第一次是填JDK的路径,第二次是填JRE的路径,这两个不能在同一目录下面,否则会有问题,之前安装就是掉进这个坑。 故我在Java文件夹下又新建一个jre文件夹。 2.3: 安装过程中提示填jdk路径为 E:\Java\jdk1.8.0_144 , 安装的JRE路径为 E:\Java