JDK

JVM系列之:String.intern和stringTable

*爱你&永不变心* 提交于 2020-10-06 06:52:35
简介 StringTable是什么?它和String.intern有什么关系呢?在字符串对象的创建过程中,StringTable有起到了什么作用呢? 一切的答案都在本文中,快来看看吧。 intern简介 intern是String类中的一个native方法,所以它底层是用c++来实现的。感兴趣的同学可以去查看下JVM的源码了解更多的内容。 这里我们主要谈一下intern的作用。 intern返回的是这个String所代表的对象,怎么理解呢? String class维护了一个私有的String pool, 这个String pool也叫StringTable,中文名字叫做字符串常量池。 当我们调用intern方法的时候,如果这个StringTable中已经包含了一个相同的String对象(根据equals(Object)方法来判断两个String对象是否相等),那么将会直接返回保存在这个StringTable中的String。 如果StringTable中没有相同的对象,那么这个String对象将会被加入StringTable,并返回这个String对象的引用。 所以,当且仅当 s.equals(t) 的时候s.intern() == t.intern()。 intern和字符串字面量常量 我们知道在类文件被编译成class文件时,每个class文件都有一个常量池

java开发安全策略_风险漏洞与解决方案

自闭症网瘾萝莉.ら 提交于 2020-10-06 06:48:50
项目语言:java 项目环境:JDK1.8 Web服务器Nginx+tomcat 数据库mysql 前端技术bootstrap+layui+jquery+ajax 后端技术maven+springboot+shiro+jpa+druid+log4j 1、 敏感信息泄露 a) 漏洞描述:敏感信息泄露漏洞,是一种通过提交错误请求,使系统出现异常处理并报错,并且将系统程序、配置、路径、类、方法 等敏感信息泄露出来的漏洞。 b) 解决方案:创建统一错误页面,在后端将异常进行拦截处理,将错误信息存储到日志中,并返回对应的错误描述或状态码。 2、 用户密码未加密传输 a) 漏洞描述:用户登录时,密码进行明码传输,导致请求被拦截获取账号信息。 b) 解决方案:使用不可逆的加密算法,采取salt(盐)+用户名+密码进行加密的方式,由前端加密后传输到后端进行身份认证。 3、 SQL注入 a) 漏洞描述:通过在string(字符串)类型的字段中,输入敏感SQL语句,进行免密登录或越权操作。 b) 解决方案:对输入信息进行敏感字符拦截,并在后端开发中使用对象SQL注入方式进行数据库访问,避免使用SQL拼接的形式进行数据库访问。 4、 越权敏感信息修改 a) 漏洞描述:修改信息时,仅根据id参数进行操作,存在越权修改任意数据问题。 b) 解决方案:后端使用session机制

面试官:换人!他连哈希扣的都不懂

妖精的绣舞 提交于 2020-10-06 02:35:08
前言 相信你面试的时候,肯定被问过 hashCode 和 equals 相关的问题 。如: hashCode 是什么?它是怎么得来的?有什么用? 经典题,equals 和 == 有什么区别? 为什么要重写 equals 和 hashCode ? 重写了 equals ,就必须要重写 hashCode 吗?为什么? hashCode 相等时,equals 一定相等吗?反过来呢? 好的,上面就是灵魂拷问环节。其实,这些问题仔细想一下也不难,主要是平时我们很少去思考它。 正文 下面就按照上边的问题顺序,一个一个剖析它。扒开 hashCode 的神秘面纱。 什么是 hashCode? 我们通常说的 hashCode 其实就是一个经过哈希运算之后的整型值。而这个哈希运算的算法,在 Object 类中就是通过一个本地方法 hashCode() 来实现的(HashMap 中还会有一些其它的运算)。 public native int hashCode(); 可以看到它是一个本地方法。那么,想要了解这个方法到底是用来干嘛的,最直接有效的方法就是,去看它的源码注释。 下边我就用我蹩脚的英文翻译一下它的意思。。。 返回当前对象的一个哈希值。这个方法用于支持一些哈希表,例如 HashMap 。 通常来讲,它有如下一些约定: 若对象的信息没有被修改,那么,在一个程序的执行期间,对于相同的对象

Spring和Spring Boot源码阅读环境搭建

天大地大妈咪最大 提交于 2020-10-06 01:29:32
一:Spring 第一步:安装git和gradle,以及Java8,并配置环境变量。 第二步:打开gitbash,cd到你要放置spring源码工程的目录,输入:git clone https://github.com/spring-projects/spring-framework.git 等待下载完毕。 或者下载指定的release版本解压缩。 第三步 :预编译spring-oxm模块。官网说:Pre-compile spring-oxm with ./gradlew cleanIdea :spring-oxm:compileTestJava ,即打开cmd,切换到spring-framework工程目录下,运行:gradlew cleanIdea :spring-oxm:compileTestJava 第四步:开始导入工程,File->import project->选中spring-framework工程->import from external model->Gradle->finish经过一段时间项目导入成功 第五步:设置project sdk为1.8,右键project->open module settings->sdks->点+号新建jdk1.8,找到jdk1.8的路径,再选中project选项卡,设置project sdk为1.8 第六步

阿里面试官最喜欢问的21个HashMap面试题

别来无恙 提交于 2020-10-05 18:54:56
1.HashMap 的数据结构? A:哈希表结构(链表散列:数组+链表)实现,结合数组和链表的优点。当链表长度超过 8 时,链表转换为红黑树。 transient Node<K,V>\[\] table; 2.HashMap 的工作原理? HashMap 底层是 hash 数组和单向链表实现,数组中的每个元素都是链表,由 Node 内部类(实现 Map.Entry接口)实现,HashMap 通过 put & get 方法存储和获取。 存储对象时,将 K/V 键值传给 put() 方法: ①、调用 hash(K) 方法计算 K 的 hash 值,然后结合数组长度,计算得数组下标; ②、调整数组大小(当容器中的元素个数大于 capacity * loadfactor 时,容器会进行扩容resize 为 2n); ③、i.如果 K 的 hash 值在 HashMap 中不存在,则执行插入,若存在,则发生碰撞; ii.如果 K 的 hash 值在 HashMap 中存在,且它们两者 equals 返回 true,则更新键值对; iii. 如果 K 的 hash 值在 HashMap 中存在,且它们两者 equals 返回 false,则插入链表的尾部(尾插法)或者红黑树中(树的添加方式)。(JDK 1.7 之前使用头插法、JDK 1.8 使用尾插法)(注意:当碰撞导致链表大于

我的并发编程(一):java锁的分类

为君一笑 提交于 2020-10-05 18:05:10
一、概述 在我们的开发工作中,需要利用多线程处理高并发的情况,那么我们就不可避免的需要用到锁机制。分类总览图如下: 二、锁的分类 1. 公平锁与非公平锁 (1) 公平锁:在并发环境中,多个线程需要对同一资源进行访问,同一时刻只能有一个线程能够获取到锁并进行资源访问, 其他的 每个线程都在等待 资源访问 的机会,并且遵循 先来后到 的顺序,这样的锁就叫做公平锁。 (2)非公平锁:如果针对上诉情况,后来的锁反而比先来的锁先获得 资源访问的权限,也就是其他线程获取资源的顺序是 随机 的,那么对于先来的锁就是不公平的,这样的锁就叫非公平锁。 公平锁表示线程获取锁的顺序是按照线程加锁的顺序来分配的,即先来先得的FIFO先进先出顺序。而非公平锁就是一种获取锁的抢占机制,是随机获得锁的,和公平锁不一样的就是先来的不一定先得到锁,这个方式可能造成某些线程一直拿不到锁,结果也就是不公平的了。利用 ReetrantLock类 我们可以创建 公平锁与非公平锁,只需要在创建的 ReetrantLock类的实例的时候,为构造函数传入true或者false。如果是true,则会创建一个ReetrantLock公平锁;如果是false,则会创建一个ReetrantLock非公平锁。ReetrantLock类不仅可以创建公平锁和非公平锁,它还是一把可重入锁,也是一把互斥锁,它具有与

你会吗?Python+Appium实现自动化测试

為{幸葍}努か 提交于 2020-10-05 14:56:58
一、环境准备 1 .脚本语言:Python3.x IDE:安装P ycharm 2.安装Java JDK 、Android SDK 3.adb环境,path添加E:\Software\Android_SDK\platform-tools 4.安装Appium for windows,官网地址 http://appium.io/ 点击下载按钮会到GitHub的下载页面,选择对应平台下载 安装完成后,启动Appium,host和port默认的即可,然后设置Android SDk和Java JDK 然后点下边那个保存并重启的按钮,然后点第一个Start Server按钮,将会看到 加入我们,642830685,群,领取免费的福利,大厂面试资料,自动化接口、框架搭建等资料 二、真机测试 1.连接手机 打开开发者模式,USB线连接手机和电脑,并且在开发者选项当中,开启USB调试 测试是否连接成功,可执行命令adb devices 出现上图就证明手机和电脑连接成功。。。 2. 点击Start Inspector Session, 按如下配置Desired Capabilities platformName:声明是ios还是Android系统 platformVersion: Android内核版本号,可通过命令adb shell getprop ro.build.version

这一次搞懂Spring代理创建及AOP链式调用过程

可紊 提交于 2020-10-05 14:26:35
@ 目录 前言 正文 基本概念 代理对象的创建 小结 AOP链式调用 AOP扩展知识 一、自定义全局拦截器Interceptor 二、循环依赖三级缓存存在的必要性 三、如何在Bean创建之前提前创建代理对象 总结 前言 AOP,也就是面向切面编程,它可以将公共的代码抽离出来,动态的织入到目标类、目标方法中,大大提高我们编程的效率,也使程序变得更加优雅。如事务、操作日志等都可以使用AOP实现。这种织入可以是 在运行期动态生成代理对象 实现,也可以在 编译期 、 类加载时期 静态织入到代码中。而Spring正是通过第一种方法实现,且在代理类的生成上也有两种方式:JDK Proxy和CGLIB,默认当类实现了接口时使用前者,否则使用后者;另外Spring AOP只能实现对方法的增强。 正文 基本概念 AOP的术语很多,虽然不清楚术语我们也能很熟练地使用AOP,但是要理解分析源码,术语就需要深刻体会其含义。 增强(Advice):就是我们想要额外增加的功能 目标对象(Target):就是我们想要增强的目标类,如果没有AOP,我们需要在每个目标对象中实现日志、事务管理等非业务逻辑 连接点(JoinPoint):程序执行时的特定时机,如方法执行前、后以及抛出异常后等等。 切点(Pointcut):连接点的导航,我们如何找到目标对象呢?切点的作用就在于此,在Spring中就是匹配表达式。 引介

抢占云原生市场,阿里开源服务发现组件 Nacos快速入门

落花浮王杯 提交于 2020-10-05 13:55:06
最近几年随着云计算和微服务不断的发展,各大云厂商也都看好了微服务解决方案这个市场,纷纷推出了自己针对微服务上云架构的解决方案,并且诞生了云原生,Cloud Native的概念。 云原生是一种专门针对云上应用而设计的方法,用于构建和部署应用,以充分发挥云计算的优势。 云原生应用的特点是可以实现快速和频繁的构建、发布、部署,可以方便的满足在扩展性,可用性,可移植性等方面的要求,并提供更好的经济性。 针对云原生,云厂商也纷纷提出了自己的解决方案,阿里巴巴开源的Nacos就是其中之一,Nacos同时集成到了Spring Cloud Alibaba中,作为一个整体的解决方案。 Nacos解决两个核心问题:动态配置管理,服务注册发现。 一、Nacos支持功能 Nacos支持以下的功能,包括服务发现,配置管理,元数据管理,地址服务器,支持云原生,支持Docker和K8s等。 服务发现 服务注册与发现 健康检查:支持服务端探测、客户端心跳 路由策略:支持权重、保护阈值、就近访问 配置管理 配置管理:支持发布、修改、查询、监听配置 灰度配置:支持灰度发布 元数据管理 对接第三方CMDB 地址服务器 支持Nacos寻址 云原生支持 对接Istio 对接ConfigMap 多客户端支持 支持多种客户端,包括Java客户端、Go客户端、Node.js客户端、C#客户端 支持Docker和K8s

阿里P5-基础知识

让人想犯罪 __ 提交于 2020-10-05 12:26:12
阿里P5-基础知识 1.Try…catch…finally 执行中,在 try 或 catch代码块中return还会执行finally代码? 答案首先是肯定的,因为Try…catch…finally代码块里的finally子句里的语句是一定会被执行的。只是在finally子句的语句会对整个代码块的执行结果会有影响吗?会有的,主要有两大类情况: a.finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。 b.如果finally中没有return语句,但是改变了要返回的值,这里有点类似与引用传递和值传递的区别,分以下两种情况: 1)如果return的数据是基本数据类型或文本字符串,则在finally中对该基本数据的改变不起作用,try中的return语句依然会返回进入finally块之前保留的值。 2)如果return的数据是引用数据类型,而在finally中对该引用数据类型的属性值的改变起作用,try中的return语句返回的就是在finally中改变后的该属性的值。 2. Interface与abstract类的区别 含有abstract修饰符的class即为抽象类,abstract 类不能创建的实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的