- 博客(155)
- 收藏
- 关注
转载 常见面试问题整理系列之--多线程
1. 线程的优先级分几级,默认级别是什么优先级分为1-10共10个等级,1表示最低优先级,5是默认级别;t.setPriority()用来设定线程的优先级,需要在线程开始方法被调用之前进行设定;可以使用MIN_PRIORITY(1),MAX_PRIORITY(10),NORM_PRIORITY(5)来设定优先级。2. 如何实现线程同步(1)同步方法即有synchronized关键字修饰的...
2019-06-08 21:17:00
218
转载 常见面试问题整理系列之--Java基础
1. 面向对象三大特性面向对象三个基本特征:封装、继承、多态;Java语言以对象为中心,最小单位为类。封装:封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口;继承:继承是从已有类得到继承信息创建新类的过程;多态:多态是指允许不同子类型的对象对同一消息作出不同的响应。2. 创建对象的方式(1)使用new语句创建对象 这是最常见的方式(2)使用反射手段,调用java.lang.Cl...
2019-06-08 20:28:00
187
转载 NoSQL与关系型数据库
一、NoSQLNoSQL的全称是Not Only SQL,这个概念早就有人提出,在09年的时候比较火。NoSQL指的是非关系型数据库,而我们常用的都是关系型数据库。就像我们常用的MySQL、SqlServer一样,这些数据库一般用来存储重要信息,应对普通的业务是没有问题的。但是,随着互联网的高速发展,传统的关系型数据库在应付超大规模、超大流量以及高并发的时候力不从心。而就在这个时候,No...
2019-03-29 21:16:00
1263
转载 子查询与JOIN&LEFT JOIN比较
MySQL从4.1版本开始支持子查询,使用子查询进行SELECT语句嵌套查询,可以一次完成很多逻辑上需要多个步骤才能完成的SQL操作。子查询虽然很灵活,但是执行效率并不高,原因:执行子查询时,MySQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一些影响,这里多了一个创建和销毁临时表的过程。优化方式:可以使用JOIN、LEFT JOIN等方式代替子查询,这些方式不...
2019-03-28 17:10:00
1160
转载 @Autowired与@Resource比较
@Autowired与@Resource都是做bean的注入时使用的,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。1.共同点两者都可以写在字段和setter方法上。两者如果都写在字段上,就不需要再写setter方法。2.不同点(1)@Autowired@Autowired为Spri...
2019-03-13 14:21:00
338
转载 Springmvc访问Controller发生404时检查的正确步骤
1.检查请求的URL是否会被Springmvc拦截web.xml中:<!-- Springmvc前端控制器 --><servlet> <servlet-name>taotao-manager</servlet-name> <servlet-class>org.springframework.web.servlet.D...
2019-03-11 19:16:00
267
转载 正则表达式的应用
验证数字:^[0-9]*$ 验证n位的数字:^\d{n}$ 验证至少n位数字:^\d{n,}$ 验证m-n位的数字:^\d{m,n}$ 验证零和非零开头的数字:^(0|[1-9][0-9]*)$ 验证有两位小数的正实数:^[0-9]+(.[0-9]{2})?$ 验证有1-3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$ 验证非零的正整数:^\+?[1-9][0-9]*$ 验...
2019-03-02 11:30:00
79
转载 正则
^:起始位置(在[]里是"非"的意思)$:结束位置\b:匹配单词的边界,如:若想从字符串"This is Regex"中匹配单词"is",正则就要写成"\bis\b"。\b不会匹配is两边的字符,但会识别is两边是否为单词的边界。\d:匹配单个数字\w:匹配字母数字下划线\s:匹配空格.:匹配除了换行符以外的任何字符[abc]:字符组,匹配包含括号内任意元素的字符将上面的小写字母改成大写...
2019-03-02 11:29:00
84
转载 一个函数能否同时被两个线程同时操作
答案:具体答案具体分析。首先,函数本身只是代码,代码是只读的,无论多少个线程同时调都无所谓(因为只读嘛)。但是函数里面总要用到数据,如果数据属于线程(比如函数参数、局部变量,存在栈上,每个线程都有自己的栈),那么同时调还是没关系,因为用的本线程的数据;但是如果用了一些全局数据,比如全局变量,同时操作一个数据结构(如对一个链表有什么操作),那就不行了,这时候锁就出来了。转载于:http...
2019-02-24 21:37:00
338
转载 MyBatis中#{}与${}的区别
此问题从两方面入手:一、#{}是预编译处理,${}是字符串替换MyBatis在调用#{}时,会将SQL中的#{}替换为?,调用PreparedStatement的set方法来赋值;MyBatis在调用${}时,会直接把${}替换成变量的值。使用#{}可以有效防止SQL注入,提高系统安全性。预编译机制:预编译是提前对SQL语句进行编译,而其后注入的参数将不再进行编译。我们知道,SQL注入是...
2019-02-13 16:19:00
87
转载 AtomicInteger的CAS原理
一、乐观锁乐观锁的核心思想:每次不加锁,而是假设没有冲突而去完成某项操作,如果因为冲突失败就去重试,直到成功为止。所以,当数据争用不严重时,乐观锁效果更好。比如CAS就是一种乐观锁思想的应用。二、Java中CAS的实现CAS就是Compare And Swap的意思。CAS是项乐观锁技术,当多个线程尝试使用CAS同时更新同一个变量时,只有其中一个线程能更新变量的值,而其它线程都失败,失败...
2019-02-12 19:49:00
308
转载 线程的状态
1.新建(New),表示线程被创建出来还没真正启动的状态,可以认为它是个Java内部状态;2.就绪(Runnable),表示该线程已经在JVM中执行,当然由于执行需要计算资源,它可能是正在运行,也可能还在等待系统分配给它CPU片段,在就绪队列里面排队;3.运行(Running),在其它一些分析中,会额外区分一种状态Running,但是从Java API的角度,并不能表示出来;4.阻塞(B...
2019-02-12 09:41:00
87
转载 Thread与Runnable比较
一、通过继承Thread实现火车站卖票:public class Test { public static void main(String[] args) { new MyThread().start(); new MyThread().start(); new MyThread().start()...
2019-02-11 19:30:00
92
转载 transient关键字解析
一、序列化与反序列化的含义Java中的序列化指的是将对象转换成以字节序列的形式来表示,这些字节序列包含了对象的数据信息,一个序列化后的对象可以被写到数据库或文件中,也可用于网络传输,一般当我们使用缓存cache(内存空间不够有可能会本地存储到硬盘)或远程调用rpc(网络传输)的时候,经常需要让我们的实体类实现Serializable接口,目的就是让其可序列化(交互双方的一个公共标准)。当...
2019-02-11 11:22:00
190
转载 final关键字解析&匿名内部类形参用final
谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字,另外,Java中的String类就是一个final类。一、final关键字的基本用法在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。1.修饰类当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让它被继承,就可以用final进行修...
2019-02-11 09:11:00
390
转载 static关键字解析
一、static关键字的用途在《Java编程思想》中有这样一段话:“static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。”这段话虽然只是说明了static方法的特殊之处,但是可以看出static关键字的基本作用,简而言之,一句话来...
2019-02-09 20:54:00
95
转载 synchronized与Lock比较
一、synchronized的缺陷如果一个代码块被synchronized修饰了,当一个线程获取到了对应的锁,并执行该代码块时,其它线程便只能一直等待,等待获取了锁的线程释放锁,而这里获取锁的线程释放锁只会有三种情况:1.获取锁的线程执行完了该代码块,然后线程释放对锁的占有;2.线程执行发生异常,此时JVM会让线程自动释放锁;3.获取锁的线程调用了wait()方法,从而进入了WAITIN...
2019-02-09 16:58:00
79
转载 分布式&分布式锁&Redis分布式锁
一、什么是分布式分布式的CAP理论告诉我们:任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),最多只能同时满足两项。C:一致性,在分布式环境下,一致性是指多个节点同一时刻要有同样的值;A:可用性,服务一直保持可用状态,当用户发出一个请求,服务能在一定时间内返回结果;P:分区容忍性,即...
2019-02-08 21:37:00
70
转载 读取一个文件,获取其中出现次数最多的前五个字符以及次数
直接上代码:public class Test { public static void main(String[] args) { demo(new File("E:\\aa.txt")); } public static void demo(File file) { BufferedReader bfr = null; ...
2019-02-08 09:41:00
486
转载 在如下8*6的矩阵中,请计算从A移动到B一共有____种走法。要求每次只能向上或向右移动一格,并且不能经过P。...
解析:8*6的矩阵,从左下角A到右上角B,一共需要走12步,其中5步向上,7步向右,因此总的走法一共有C(12,5)=792种,但题目规定不能经过P,因此需要减去经过P点的走法。经过P的路径分为两部分,从A到P,从P到B。同理,从A到P的走法:C(6,2)=15;同理,从P到B的走法:C(6,3)=20;因此从A到B经过P点的走法有15*20=300种,所以从A到B不经过P点的走法有...
2019-02-07 21:22:00
1354
转载 动态规划&数塔取数&矩阵取数&背包问题&最大子段和&正整数分组
动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。在面试笔试中动态规划也是经常作为考题出现,其中较为简单的DP题目我们应该有百分之百的把握顺利解决才可以。一、动态规划定义动态规划实际上是一类题目的总称,并不是指某个固定的算法。动态规划的意义就是通过采用递推(或者分而治之)的策略,通过解决大问题的子问题...
2019-02-06 23:03:00
223
转载 Springboot基本介绍
在JavaEE开发中,约定大于配置,太多的配置会徒增工作量而且在跨平台部署时容易出问题,而在Spring和Springmvc中依然有很多需要配置的地方。Springboot可以让我们快速创建一个基于Spring的项目,而让这个Spring项目跑起来只需要很少的配置。Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该...
2019-02-06 15:41:00
121
转载 ContextLoaderListener的作用
ContextLoaderListener监听器的作用:在启动Web容器时,自动装配ApplicationContext的配置信息。因为它实现了ServletContextListener接口,在web.xml中配置这个监听器,启动容器时,就会默认执行它实现的方法。在ContextLoaderListener中关联了ContextLoader这个类,所以整个加载配置过程由ContextL...
2019-02-06 09:26:00
86
转载 SSM框架整合
一、Spring-MyBatis的整合参考"MyBatis3.x与Spring4.x整合"博文;其中pom.xml:<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://m...
2019-02-05 23:08:00
45
转载 MyBatis3.x与Spring4.x整合
一、搭建开发环境1.使用maven创建web项目2.编辑pom.xml:<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4....
2019-02-05 11:03:00
91
转载 MyBatis缓存介绍
一、MyBatis缓存介绍正如大多数持久层框架一样,MyBatis同样提供了一级缓存和二级缓存的支持1.一级缓存:基于PerpetualCache的HashMap本地缓存,其存储作用域为SqlSession,当Session flush或close后,该Session中的所有Cache就将清空;2.二级缓存:与一级缓存机制相同,默认也是采用PerpetualCache,HashMap存储...
2019-02-03 19:35:00
79
转载 MyBatis实现关联表查询
1.在一个实体类中添加另一个实体类的属性及List属性:public class Course {private int id;// id --> cid private String name;// name --> cnameprivate Teacher teacher;private List<Student> list;2.定义SQL映射文件cou...
2019-02-03 17:16:00
80
转载 MyBatis解决字段名与实体类属性名不相同的冲突
一、编写SQL的XML映射文件<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!-- 为这个mapper指定一个唯...
2019-02-03 10:44:00
136
转载 MyBatis配置文件优化
一、连接数据库的配置单独放在一个properties文件中之前,我们直接将数据库的连接配置信息写在了MyBatis的conf.xml文件中,其实我们完全可以将数据库的连接配置信息写在一个properties文件中,然后在conf.xml文件中引用,具体做法如下:1.在src下新建db.properties:driver=com.mysql.jdbc.Driverurl=jdbc:mysq...
2019-02-03 10:06:00
63
转载 基于MyBatis的CRUD操作
一、基于XML实现1.定义SQL映射XML文件studentMapper.xml:<mapper namespace="com.mapping.studentMapper"> <!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getStudent,id属性值必须是唯一的,不能够重复 使用parameterType属性指明查...
2019-02-02 23:42:00
52
转载 SqlSessionFactory及SqlSession
MyBatis的持久化解决方案是将用户从原始的JDBC访问中解放出来,用户只需要定义需要操作的SQL语句,无需关注底层的JDBC操作,就可以以面向对象的方式来进行持久化层操作。底层数据库连接的获取、数据库访问的实现、事务控制等都不需要用户关心。一、SqlSessionFactorySqlSessionFactory是MyBatis的关键对象,它是单个数据库映射关系经过编译后的的内存镜像。...
2019-02-02 21:22:00
500
转载 MyBatis基本介绍&快速入门
一、基本介绍MyBatis是一个支持普通SQL查询、存储过程和高级映射的持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和POJO(Plain Old Java Object,普通的Java对象)映射成数据库中的记录。二、快速入门2.1 准备开发环境1.创建测试项目,普通Jav...
2019-02-02 17:47:00
82
转载 爬楼梯算法
假设一个楼梯有 N 阶台阶,人每次最多可以跨 2 阶,求总共的爬楼梯方案数。这里使用非递归实现:先不写代码,自己计算当楼梯数为1/2/3/4/5时,对应的爬法有1/2/3/5/8/13/21种。可以发现,随着楼梯数N的增加,爬法总数呈现斐波那契数列规律增加,即f(n) = f(n-1) + f(n-2),知道这个规律后,使用下面的循环即可实现:public class Test { ...
2019-01-28 19:16:00
312
转载 乐观锁与悲观锁
悲观锁,就是思想很悲观,每次去拿数据的时候都认为别人会去修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库中就用到了很多悲观锁的机制,比如行锁,表锁,读锁,写锁等,都是在做操作前先上锁,synchronized也是悲观锁。乐观锁,就是思想很乐观,每次去拿数据的时候都认为别人不会去修改,所以不会上锁,但是在更新的时候会去判断一下在此期间...
2019-01-28 16:08:00
58
转载 volatile深度解析
volatile的作用:1.内存可见性2.禁止指令重排序可见性是指,在多线程环境下,共享变量的操作对于每个线程来说,都是内存可见的,也就是每个线程获取的volatile变量都是最新值;并且每个线程对volatile变量的修改,都直接刷新到主存。下面重点介绍指令重排序。一、为什么要指令重排序为了提高程序执行的性能,编译器和执行器(处理器)通常会对指令做一些优化(重排序):1.编译器重排序:...
2019-01-27 17:26:00
51
转载 二进制&十进制相互转换
public class Test { public static void main(String[] args) { System.out.println(addBinary("1010", "1011")); } public static int addBinary(String a, String b) { int aa =...
2019-01-26 23:25:00
109
转载 八大数据结构
数组(Array):数组的特点:1.在内存中,数组是一块连续的区域,通过数组下标进行访问,下标从0开始;2.数组需要预留空间,在使用前要先申请占内存的大小,可能会浪费内存空间;3.插入和删除数据效率低,插入数据时,这个位置后面的数据在内存中都要向后移;删除数据时,这个数据后面的数据都要向前移;4.随机读取效率高,因为数组是连续的,知道每一个数据的内存地址,可以直接找到指定的数据;5.不利...
2019-01-22 22:13:00
167
转载 Java的参数传递
要说明这个问题,先要明确两点:1. 不要试图与C进行类比,Java中没有指针的概念。2. 程序运行永远都是在栈中进行的,因而参数传递时,只存在传递基本类型和对象引用的问题,不会直接传对象本身。明确以上两点后,Java在方法调用传递参数时,因为没有指针,所以它都是进行传值调用(这点可以参考C的传值调用)。因此,很多书里面都说Java是进行传值调用,这点没有问题,而且也简化的C中复杂性。传值...
2019-01-22 19:21:00
74
转载 JVM原理与内存模型
编译型语言:一次性地编译成机器码,生成可执行文件。解释型语言:使用专门的解释器对源码逐行解释成特定平台的机器码并立即执行的语言。JVM原理:Java语言既是编译型语言,又是解释型语言:Java源码通过javac命令被编译成.class文件,这种字节码文件不面向任何平台,只面向JVM(Java Virtual Machine);JVM是Java跨平台的关键部分,其向上提供给Java字节码程...
2019-01-21 20:12:00
112
转载 同步集合与并发集合
同步集合:可以简单地理解为通过synchronized实现同步的集合。如果有多个线程调用同步集合的方法,它们将会串行执行;ArrayList、Vector与Stack:1.Vector是线程安全的,源码中有很多的synchronized可以看出,而ArrayList不是,导致Vector效率无法和ArrayList相比;2.ArrayList和Vector都采用线性存储空间,当存储空间不...
2019-01-21 18:19:00
174
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人