JDK

【面试官之你说我听】-MyBatis常见面试题

拟墨画扇 提交于 2020-10-28 17:04:22
关注公众号【 Ccww笔记 】,原创技术文章第一时间推出 “致"高级"工程师(BUG工程师) 一颗折腾的心 💗 欢迎关注文章系列,一起学习 如果此文对你有帮助、喜欢的话,那就点个“在看”呗,点个关注呗! 精讲#{}和${}的区别是什么? mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值。 mybatis在处理${}时,就是把${}替换成变量的值。 使用#{}可以有效的防止SQL注入,提高系统安全性。原因在于:预编译机制。 预编译完成之后,SQL的结构已经固定,即便用户输入非法参数,也不会对SQL的结构产生影响,从而避免了潜在的安全风险。 预编译是提前对SQL语句进行预编译,而其后注入的参数将不会再进行SQL编译。我们知道,SQL注入是发生在编译的过程中,因为恶意注入了某些特殊字符,最后被编译成了恶意的执行操作。而预编译机制则可以很好的防止SQL注入。 既然${}会引起sql注入,为什么有了#{}还需要有${}呢?那其存在的意义是什么? #{}主要用于预编译,而预编译的场景其实非常受限,而${}用于替换,很多场景会出现替换,而这种场景可不是预编译 数据库链接中断如何处理 数据库的访问底层是通过tcp实现的,当链接中断是程序是无法得知,导致程序一直会停顿一段时间在这,最终会导致用户体验不好

Linux命令01

自古美人都是妖i 提交于 2020-10-28 16:30:14
Linux简介及 Ubuntu安装 Linux,免费开源,多用户多任务系统。基于Linux有多个版本的衍生。RedHat、Ubuntu、Debian 安装VMware或VirtualBox虚拟机。具体安装步骤,找百度。 再安装Ubuntu。具体安装步骤,找百度。 安装完后,可以看到Linux系统的目录结构。 常用指令 ls   显示文件或目录 -l 列出文件详细信息l(list) -a 列出当前目录下所有文件及目录,包括隐藏的a(all) mkdir 创建目录 -p 创建目录,若无父目录,则创建p(parent) cd 切换目录 touch 创建空文件 echo 创建带有内容的文件。 cat 查看文件内容 cp 拷贝 mv 移动或重命名 rm 删除文件 -r 递归删除,可删除子目录及文件 -f 强制删除 find 在文件系统中搜索某文件 wc 统计文本中行数、字数、字符数 grep 在文本文件中查找某个字符串 rmdir 删除空目录 tree 树形结构显示目录,需要安装tree包 pwd 显示当前目录 ln 创建链接文件 more、less 分页显示文本文件内容 head、tail 显示文件头、尾内容 ctrl+alt+F1 命令行全屏模式 系统管理命令 stat 显示指定文件的详细信息,比ls更详细 who 显示在线登陆用户 whoami 显示当前操作用户 hostname

利用先电云iaas平台搭建apache官方大数据平台(ambari2.7+hdp3.0)

大城市里の小女人 提交于 2020-10-28 16:07:33
一、 ambari 架构解析 二、基础环境配置 以两台 节点 为例 来 组件 Hadoop分布式集群, 这里采用的 系统 版本 为 Centos7 1511,如 下表所示: 主机名 内存 硬盘 IP 地址 角色 master 8192MB 100G 192.168.200.6 Ambari-Server Ambari-Agent slaver 8192MB 100G 192.168.200.7 Ambari-Agent 搭建所需各软件版本信息 ① ambari-2.7.1.0-centos7.tar.gz ② jdk-8u151-linux-x64.tar.gz ③ HDP-3.0.1.0-centos7-rpm.tar.gz ④ HDP-UTILS-1.1.0.22-centos7.tar ⑤ CentOS-7-x86_64-DVD-1511.iso 1. 在 iaas 平台创建两台云主机 主机名、主机名解析配置 vi /etc/hosts 挂载镜像并配置本地 yum 源 首先将所需镜像、安装包等,通过 secureFX 上传至 master 的 /opt 目录 Master 节点 3.1 进入 /opt 目录,解压 ambari.tar.gz 压缩包 [root@master ~]# cd /opt [root@master opt]# ls ambari-2.7.1.0

机房冷风吹-linux基础环境搭建(基础篇)

生来就可爱ヽ(ⅴ<●) 提交于 2020-10-28 14:27:13
机房冷风吹-Linux基础环境搭建(基础篇) 当一台服务器或者虚拟机装完系统之后,需要进行基础的环境搭建,调整硬盘,逻辑卷,yum源,时钟同步等等,本篇文章的目的就是用最基本的操作步骤,用最简单的命令,不用动脑直接复制粘贴,根据需求挑选自己需要的进行操作快速完成环境搭建。 本篇基于centos7,6版本的请相应调整命令 一、关闭防火墙 防火墙记得关,防火墙记得关,防火墙记得关,防火墙记得关,防火墙记得关,防火墙记得关!!! 部署的时候如果开着就会因为它,有的服务就奇奇怪怪的不好使了。 [root@zzxt ~] # systemctl stop firewalld [root@zzxt ~] # systemctl disable firewalld [root@zzxt ~] # systemctl status firewalld ● firewalld . service - firewalld - dynamic firewall daemon Loaded: loaded ( / usr / lib / systemd / system / firewalld . service ; disabled ; vendor preset: enabled ) Active: inactive ( dead ) Docs: man:firewalld ( 1 ) 二

Mybatis-Spring扫描路径有重叠导致Invalid bound statement(not found)问题

人盡茶涼 提交于 2020-10-28 13:23:48
背景 近日,某个系统的测试环境mybatis总是报 Invalid bound statement(not found) 异常,导致tomcat容器无法启动。异常信息如下: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.xxx.management.dao.IssueDao.countByCid at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:227) at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:49) at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:65) at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:58) at com.sun.proxy.$Proxy126.countByCid(Unknown Source) at com.xxx.management.service

RocketMQ(1):单机部署4.2.0版本

梦想与她 提交于 2020-10-28 13:05:32
最近用了用kafka,踩了各种各样的坑(一口老血)。其中最让人头疼的是消费失败后的重发问题,目前我自己的解决办法是消费该分区的某批数据时,如果该批数据有消费失败的,就不提交该批数据的偏移量,从而让生产者重发数据。然而只有在重启生产者时,消费失败的数据才能重新消费,非常谜,打算以后抽出时间看看这是为啥(如果有解决办法请 大力评论 。。我的kafka版本是0.10你懂的)。 然后我在找kafka相关解决办法的时候,发现rocketmq的重发机制十分好,于是决定再踩踩rocketmq的坑。 单机部署 单机部署rocketmq4.2.0尝尝鲜(三口老血),到rocketmq的官网里找到quick start(我现在理解的quick大约得有一百万年的时间),有个单机部署教程(http://rocketmq.apache.org/docs/quick-start/),然而里面的坑很多。所以在此记录一下我的安装历程: 1.安装环境要遵循官方的建议(环境的安装在此不赘述) 64bit OS, Linux/Unix/Mac is recommended; 64bit JDK 1.8+; Maven 3.2.x Git 2.下载安装包,并解压: unzip rocketmq-all-4.2.0-source-release.zip 3.进入解压后的文件的根目录,编译: mvn -Prelease

Java虚拟机类加载器及双亲委派机制

末鹿安然 提交于 2020-10-28 12:46:21
所谓的类加载器(Class Loader)就是加载Java类到Java虚拟机中的,前面《 面试官,不要再问我“Java虚拟机类加载机制”了 》中已经介绍了具体加载class文件的机制。本篇文章我们重点介绍加载器和双亲委派机制。 类加载器 在JVM中有三类ClassLoader构成:启动类(或根类)加载器(Bootstrap ClassLoader)、扩展类加载器(ExtClassLoader)、应用类加载器(AppClassLoader)。不同的类加载器负责不同区域的类的加载。 启动类加载器:这个加载器不是一个Java类,而是由底层的c++实现,负责将存放在JAVA_HOME下lib目录中的类库,比如rt.jar。因此,启动类加载器不属于Java类库,无法被Java程序直接引用,用户在编写自定义类加载器时,如果需要把加载请求委派给引导类加载器,那直接使用null代替即可。 扩展类加载器:由sun.misc.Launcher$ExtClassLoader实现,负责加载JAVA_HOME下lib\ext目录下的,或者被java.ext.dirs系统变量所指定的路径中的所有类库,开发者可以直接使用扩展类加载器。 应用类加载器:由sun.misc.Launcher$AppClassLoader实现的

原创 | Java 13 明天发布,最新最全新特性解读

∥☆過路亽.° 提交于 2020-10-28 12:27:30
原创 | Java 13 明天发布,最新最全新特性解读 △Hollis, 一个对Coding有着独特追求的人△ 这是Hollis的第 229篇原创分享 作者 l Hollis 来源 l Hollis(ID:hollischuang) 2017年8月,JCP执行委员会提出将Java的发布频率改为每六个月一次,新的发布周期严格遵循时间点,将在每年的3月份和9月份发布。 目前,JDK官网上已经可以看到JDK 13的进展,最新版的JDK 13将于2019年9月17日发布。 目前,JDK13处于Release-Candidate Phase(发布候选阶段),将于9月17日正式发布。目前该版本包含的特性已经全部固定,主要包含以下五个: JEP 350,Dynamic CDS Archives JEP 351,ZGC: Uncommit Unused Memory JEP 353,Reimplement the Legacy Socket API JEP 354: Switch Expressions (Preview) JEP 355,Text Blocks (Preview) 下面来逐一介绍下这五个重要的特性。 1、Dynamic CDS Archives 这一特性是在JEP310:Application Class-Data Sharing 基础上扩展而来的,Dynamic CDS

什么是Base64加密?为什么要有Base64加密?

折月煮酒 提交于 2020-10-28 12:08:17
产生这篇文章的动力在于对接腾讯云服务的时候每次都要进行Base64编码之后才能进行签名,之前只知道Base64是个算法,但是不知道为啥都用这个算法,这次为了链接Base64究竟是个什么东东才在网络上各种找资料,把觉得对自己有用的记录下来了。 摘抄网络上便于理解的概念: 基本概念和应用场景 Base64是一种基于64个可打印字符来 表示二进制数据 的表示方法。由于2的6次方等于64,所以每6个比特为一个单元,对应某个可打印字符。三个字节有24个比特,对应于4个Base64单元,即3个字节需要用4个可打印字符来表示。它可用来作为电子邮件的传输编码。在Base64中的可打印字符包括字母A-Z、a-z、数字0-9 ,这样共有62个字符,此外两个可打印符号在不同的系统中而不同。编码后的数据比原始数据略长,为原来的4/3。 Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据(或不可打印的字符串)。包括MIME的email,email via MIME, 在XML中存储复杂数据. 在邮件中的用途: 在MIME格式的电子邮件中,base64可以用来将binary的字节序列数据编码成ASCII字符序列构成的文本。使用时,在传输编码方式中指定base64。使用的字符包括大小写字母各26个,加上10个数字,和加号“+”,斜杠“/”,一共64个字符,等号“=”用来作为后缀用途。

MybatisPlus报错Invalid bound statement (not found)的解决方案

风流意气都作罢 提交于 2020-10-28 09:41:00
今天使用MybatisPlus,测试时报错Invalid bound statement (not found) 使用自定义的mapper接口中的方法可以执行,而调用MybatisPlus中baseMapper中的方法会报错 因此可以排除是路径配置问题 查询网上各种解决方案依旧无果之后,从头到尾梳理了一下代码,找到了错误 package com.jt.pojo; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.experimental.Accessors; import org.springframework.stereotype.Component; import java.io.Serializable; // 基于ORM思想,属性与表一致 @Data @Accessors(chain = true ) @TableName //