
java
纸上得来终觉浅~
周围的人都比你厉害,你才会慢慢变强
展开
-
mysql执行计划
MySQL 使用explain + sql 语句查看 执行计划,该执行计划不一定完全正确但是可以参考。1、select_type2、table: 正在访问的表名3、type性能:all<index<range<index_merge<ref_or_null<ref<eq_ref<system/co...转载 2019-10-21 15:41:35 · 133 阅读 · 0 评论 -
如何设计一个高并发系统?
面试题剖析其实所谓的高并发,如果你要理解这个问题呢,其实就得从高并发的根源出发,为啥会有高并发?为啥高并发就很牛逼?我说的浅显一点,很简单,就是因为刚开始系统都是连接数据库的,但是要知道数据库支撑到每秒并发两三千的时候,基本就快完了。所以才有说,很多公司,刚开始干的时候,技术比较 low,结果业务发展太快,有的时候系统扛不住压力就挂了。当然会挂了,凭什么不挂?你数据库如果瞬间承载每秒 ...转载 2019-10-21 15:12:21 · 569 阅读 · 0 评论 -
jdk8 新增 接口默认方法
一、JDK8 中为什么有接口默认方法?以前创建了一个接口,并且已经被大量的类实现。 如果需要再扩充这个接口的功能加新的方法,就会导致所有已经实现的子类需要重写这个方法。 如果在接口中使用默认方法就不会有这个问题。 所以从 JDK8 开始新加了接口默认方法,便于接口的扩展。二、接口中默认方法的规则:1.默认方法使用 default 关键字,一个接口中可以有多个默认方法。2.接口中...转载 2019-10-20 21:32:19 · 496 阅读 · 0 评论 -
Java 8 Lambda 表达式
一、函数式编程特性1、函数是"第一等公民"什么是"第一等公民"?所谓"第一等公民"(first class),指的是函数与其他数据类型一样,处于平等地位,它不仅拥有一切传统函数的使用方式(声明和调用),可以赋值给其他变量(赋值),也可以作为参数,传入另一个函数(传参),或者作为别的函数的返回值(返回)。函数可以作为参数进行传递,意味我们可以把行为"参数化",处理逻辑可以从外部传入,这样程...转载 2019-10-20 21:21:57 · 1216 阅读 · 1 评论 -
vector和arraylist区别
1、Vector & ArrayList(1)Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好。(2)当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50...转载 2019-10-20 20:11:16 · 163 阅读 · 0 评论 -
zookeeper
ZooKeeper 本身就是一个分布式程序(只要半数以上节点存活,ZooKeeper 就能正常服务)。为了保证高可用,最好是以集群形态来部署 ZooKeeper,这样只要集群中大部分机器是可用的(能够容忍一定的机器故障),那么 ZooKeeper 本身仍然是可用的。ZooKeeper 将数据保存在内存中,这也就保证了高吞吐量和低延迟(但是内存限制了能够存储的容量不太大,此限制也是保持zno...转载 2019-10-20 17:08:46 · 120 阅读 · 0 评论 -
红黑树和B树
红黑树和B树应用场景有何不同?2者都是有序数据结构,可用作数据容器。红黑树多用在内部排序,即全放在内存中的,微软STL的map和set的内部实现就是红黑树。B树多用在内存里放不下,大部分数据存储在外存上时。因为B树层数少,因此可以确保每次操作,读取磁盘的次数尽可能的少。在数据较小,可以完全放到内存中时,红黑树的时间复杂度比B树低。比如treemap。反之,数据量较大,外存中占主...转载 2019-10-20 16:05:23 · 400 阅读 · 0 评论 -
mysql索引实现原理与常见问题
1、数据库中最常见的慢查询优化方式是什么?加索引2、为什么加索引能优化慢查询?因为索引是一种优化查询的数据结构,比如MySQL中的索引是B+树实现的,而B+树就是一种数据结构,可以优化查询速度,可以利用索引快速查找数据,所以能优化查询!3、你知道哪些数据结构可以提高查询速度?哈希表、完全平衡二叉搜索树、B树、B+树等等;4、那这些数据结构既然都能优化查询速...转载 2019-10-20 13:21:41 · 530 阅读 · 0 评论 -
存储过程
优点:1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。2.当对数据库进行复杂操作时(如对多个表进行 Update,Insert,Query,Delete 时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。这些操作,如果用程序来完成,就变成了一条条的 SQL 语句,可...转载 2019-10-19 21:05:08 · 213 阅读 · 0 评论 -
解决MySQl查询不区分大小写
Mysql默认的字符检索策略:utf8_general_ci,表示不区分大小写;utf8_general_cs表示区分大小写,utf8_bin表示二进制比较,同样也区分大小写 。1、设置表的字符集属性创建表时,直接设置表的collate属性为utf8_general_cs或者utf8_bin;如果已经创建表,则直接修改字段的Collation属性为utf8_general_cs或者utf8...转载 2019-10-19 20:58:44 · 367 阅读 · 0 评论 -
一条sql执行过长的时间,你如何优化,从哪些方面?
1、查看sql是否涉及多表的联表或者子查询,如果有,看是否能进行业务拆分,相关字段冗余或者合并成临时表(业务和算法的优化)2、涉及链表的查询,是否能进行分表查询,单表查询之后的结果进行字段整合。3、如果以上两种都不能操作,非要链表查询,那么考虑对相对应的查询条件做索引。加快查询速度4、针对数量大的表进行历史表分离(如交易流水表)5、数据库主从分离,读写分离,降低读写针对同一表同时的...转载 2019-10-19 20:51:40 · 1277 阅读 · 0 评论 -
hashmap实现原理及常见问题
数组:数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难;链表:链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除容易。哈希表:那么我们能不能综合两者的特性,做出一种寻址容易,插入删除也容易的数据结构?答案是肯定的,这就是我们要提起的哈希表...原创 2019-10-19 18:09:23 · 201 阅读 · 0 评论 -
一级缓存、二级缓存、memcached
1、一级缓存一级缓存的作用域是SqlSession范围的,当在同一个sqlSession中执行两次相同的sql语句时,第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次查询时会从缓存中获取数据,不再去底层数据库查询,从而提高查询效率。需要注意的是,如果SqlSession执行了DML操作(增删改),并且提交到数据库,MyBatis则会清空SqlSession中的一级缓存,这样做的...原创 2019-10-19 17:14:16 · 343 阅读 · 0 评论 -
高并发、大数据量问题
1、同步和异步同步在一定程度上可以看做是单线程,这个线程请求一个方法后就待这个方法给他回复,否则他不往下执行(死心眼)。异步在一定程度上可以看做是多线程的(废话,一个线程怎么叫异步),请求一个方法后,就不管了,继续执行其他的方法。同步就是一件事,一件事情一件事的做。异步就是,做一件事情,不引响做其他事情。例如:吃饭和说话,只能一件事一件事的来,因为只有一张嘴。但吃饭和听音乐是异步的...转载 2019-10-19 16:11:54 · 539 阅读 · 0 评论 -
Dubbo的四种负载均衡机制
在分布式系统中有多台的服务器作为提供者负责处理各种网络请求,当同时有多个请求同时过来时,需要将其均摊在各台服务器上,避免了某台服务器压力过大而某台服务器则闲置的问题。Dubbo提供了四种实现负载均衡的机制:1、基于权重随机算法的 RandomLoadBalance这种方式的思想是为每一台服务器设置一个权值,当有请求到来时就按照大体的权重比例为该请求分配服务器。如图当ord...转载 2019-10-18 11:42:19 · 830 阅读 · 0 评论 -
索引
1、什么是索引?索引用于快速找出在某个列中有一特定值的行,不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的时间就越多,如果表中查询的列有一个索引,MySQL能够快速到达一个位置去搜索数据文件,而不必查看所有数据,那么将会节省很大一部分时间。MySQL中的索引的存储类型有两种:BTREE、HASH。2、索引的优点和缺点优点:大大...转载 2019-10-18 09:36:08 · 121 阅读 · 0 评论 -
消息队列
一、什么是消息队列我们可以把消息队列比作是一个存放消息的容器,当我们需要使用消息的时候可以取出消息供自己使用。消息队列是分布式系统中重要的组件,使用消息队列主要是为了通过异步处理提高系统性能和削峰、降低系统耦合性。目前使用较多的消息队列有ActiveMQ,RabbitMQ,Kafka,RocketMQ。二、为什么要用消息队列我觉得使用消息队列主要有两点好处:1、通过异步处...转载 2019-10-18 08:34:58 · 15210 阅读 · 0 评论 -
网关
在没有路由器的情况下,两个网络之间是不能进行TCP/IP通信的,即使是两个网络连接在同一台交换机(或集线器)上,TCP/IP协议也会根据子网掩码(255.255.255.0)判定两个网络中的主机处在不同的网络里。而要实现这两个网络之间的通信,则必须通过网关。如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发...转载 2019-10-18 08:34:52 · 204 阅读 · 0 评论 -
单点登录
什么是单点登录?单点登录全称Single Sign On(以下简称SSO),是指在多系统应用群中登录一个系统,便可在其他所有系统中得到授权而无需再次登录,包括单点登录与单点注销两部分。1、登录相比于单系统登录,sso需要一个独立的认证中心,只有认证中心能接受用户的用户名密码等安全信息,其他系统不提供登录入口,只接受认证中心的间接授权。间接授权通过令牌实现,sso认证中心验证用户的用户名密码...转载 2019-10-18 08:34:47 · 220 阅读 · 0 评论 -
分布式事务
1、什么是分布式事务?分布式事务指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。2、是否要用分布式事务?上面说过...转载 2019-10-18 08:34:41 · 135 阅读 · 0 评论 -
Dubbo
1、什么是 Dubbo?Apache Dubbo 是一款高性能、轻量级的开源Java RPC 框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。简单来说 Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。Dubbo 是由阿里开源,后来加入了 Apache 。正式由于 Dubbo 的出现,...转载 2019-10-18 08:34:35 · 233 阅读 · 0 评论 -
常见sql优化
1、在表中建立索引,优先考虑where、group by使用到的字段。2、避免使用select *,只返回使用到的字段。3、尽量避免使用in 、not in、or,会导致数据库引擎放弃索引进行全表扫描。4、尽量避免在字段开头模糊查询,会导致数据库引擎放弃索引进行全表扫描。如下:5、尽量避免进行null值的判断,会导致数据库引擎放弃索引进行全表扫描。可以给字段添加默认值0,对0值进行...转载 2019-10-18 08:34:27 · 284 阅读 · 0 评论 -
jdk8新特性
1.接口的默认方法Java 8 允许我们给接口添加一个非抽象的方法实现,只需要使用default关键字即可,这个特征又叫做扩展方法2.Lambda表达式基于函数的匿名表达式语法:( object str,....)[参数列表] ->[箭头符号]代码块或表达式在Java8中你就没必要使用这些传统的匿名对象的方式了,Java 8 提供了更简洁的语法,lambd...转载 2019-10-18 08:34:20 · 232 阅读 · 0 评论 -
springboot
Spring Framework旨在简化J2EE企业应用程序开发。Spring Boot Framework旨在简化Spring开发。优点:无需复杂的xml配置、内嵌web服务器如tomcat和jetty、提供pom简化maven...原创 2019-10-17 16:11:37 · 93 阅读 · 0 评论 -
过滤器与拦截器的区别
1、定义过滤器,是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者 struts的action前统一设置字符集,或者去除掉一些非法字符拦截器,是在面向切面编...转载 2019-10-17 16:02:02 · 359 阅读 · 0 评论 -
Spring中Bean的5种作用域和生命周期
1、Bean的5种作用域(1)singleton:单例模式,Spring IoC容器中只会存在一个共享的Bean实例,无论有多少个Bean引用它,始终指向同一对象Singleton作用域是Spring中的缺省作用域,也可以显示的将Bean定义为singleton模式,配置为:<bean id="userDao" class="com.ioc.UserDaoImpl" scope="si...原创 2019-10-17 15:49:18 · 421 阅读 · 0 评论 -
spring常用注解
1、@autowired@Autowired顾名思义,就是自动装配,其作用是为了消除Java代码里面的getter/setter与bean属性中的property。2、@Autowired和@Resource两个注解的区别:@Autowired默认按照byType方式进行bean匹配,@Resource默认按照byName方式进行bean匹配 @Autowired是Spring的注解...原创 2019-10-17 15:24:26 · 156 阅读 · 0 评论 -
spring中用到的设计模式
1、单例设计模式Spring 中 bean 的默认作用域就是 singleton(单例)的。2、工厂设计模式Spring使用工厂模式可以通过BeanFactory或ApplicationContext创建 bean 对象。3、代理设计模式Spring AOP 就是基于动态代理的...原创 2019-10-17 15:15:13 · 162 阅读 · 0 评论 -
redis 和 memcached
1、redis 和 memcached区别redis支持更丰富的数据类型(支持更复杂的应用场景):Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。memcache支持简单的数据类型,String。 Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用,而Memecache把数据全部存在内存之中。...原创 2019-10-17 13:36:58 · 788 阅读 · 0 评论 -
部署java项目
1、打war包2、放在tomcat的webapp目录下3、执行bin目录的start.sh脚本maven自动部署到远程tomcat教程:1、环境如下eclipse、apache-maven-3.0.5、apache-tomcat-7.0.392、配置如下apache-maven-3.0.5配置C:\Program Files\apache-maven-3.0.5...转载 2019-10-17 13:20:06 · 554 阅读 · 0 评论 -
maven常用命令
1、maven介绍maven最大的作用就是用于对项目中jar包依赖的统一管理。通常项目中如果不使用maven的话,项目中用到的jar包需要自己下载,然后放到项目的lib目录,比较麻烦。如果使用maven构建项目,项目中就会有有一个pom文件,该pom文件的作用就是对项目中的所有jar包依赖进行统一管理,如果想要使用哪个依赖只需要在pom文件中引入相关的依赖就可以,然后maven就会自动...转载 2019-10-17 11:42:00 · 116 阅读 · 0 评论 -
Memcache的实现原理
memcache一般被称为查询缓存原创 2019-10-17 11:49:29 · 183 阅读 · 0 评论 -
SpringMVC工作原理
第1步:浏览器发送指定的请求都会交给DispatcherServlet第2步:DispatcherServlet会查找到HandleMapping,根据浏览器的请求找到对应的Controller,并将请求交给目标Controller第3步:目标Controller处理完业务后,返回一个ModelAndView给DispatcherServlet第4步:DispatcherServlet...转载 2019-10-16 21:06:46 · 119 阅读 · 0 评论 -
spring生命周期
spring的生命周期就是bean的生命周期,从bean开始装载,然后默认的以单例形式实例化,然后是属性注入,然后是被装载到beanFactory,然后调用销毁方法。1、以单例模式实例化2、属性注入3、转载到beanfatory中4、销毁实例化和属性注入对应构造方法和setter方法的注入,初始化和销毁是用户能自定义扩展的两个阶段。...原创 2019-10-16 20:49:36 · 3482 阅读 · 0 评论 -
java动态代理
1、代理模式代理模式是23种设计模式的一种,他是指一个对象A通过持有另一个对象B,可以具有B同样的行为的模式。为了对外开放协议,B往往实现了一个接口,A也会去实现接口。但是B是“真正”实现类,A则比较“虚”,他借用了B的方法去实现接口的方法。A虽然是“伪军”,但它可以增强B,在调用B的方法前后都做些其他的事情。Spring AOP就是使用了动态代理完成了代码的动态“织入”。类A写死持有B,...转载 2019-10-16 20:42:20 · 188 阅读 · 0 评论 -
jdk和jre
1、JREJRE是Java Runtime Environment的缩写,顾名思义是java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的,还有所有的Java类库的class文件,都在lib目录下,并且都打包成了jar。2、JDKJdk是Java Development Kit的缩写,顾名思义...原创 2019-10-16 20:28:24 · 112 阅读 · 0 评论 -
mybatis延迟加载
1、延迟加载介绍延迟加载也叫懒加载,根据需求加载数据,先加载主要显示的数据,如果需要关联的数据显示,再加载关联的数据显示2、为什么使用延迟加载(1)假设场景:用户表和订单表,用户表有多个用户,每个用户有多个订单, 某些时候,我们需要同时查看用户信息和用户的订单信息,这个时候用户的信息和订单的信息都需要显示。但如果我们只查看订单列表,就没必要把用户信息和用户的订单的数据全部查询出来,只显...转载 2019-10-16 17:36:52 · 396 阅读 · 0 评论 -
spring -- 编程式事务、声明式事务
1、编程式事务所谓编程式事务指的是通过编码方式实现事务,即类似于JDBC编程实现事务管理。管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。2、声明式事务管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入...转载 2019-10-16 17:30:47 · 206 阅读 · 0 评论 -
spring -- 事务管理
一、什么是事务?事务是逻辑上的一组操作,要么都执行,要么都不执行。二、事物的特性(ACID):原子性: 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用; 一致性: 执行事务前后,数据保持一致; 隔离性: 并发访问数据库时,一个用户的事物不被其他事物所干扰,各并发事务之间数据库是独立的; 持久性: 一个事务被提交之后。它对数据库中数据的改...转载 2019-10-16 16:35:53 · 555 阅读 · 1 评论 -
spring -- 面向切面编程AOP
web层级设计中,web层->网关层->服务层->数据层,每一层之间也是一个切面。编程中,对象与对象之间,方法与方法之间,模块与模块之间都是一个个切面。一般做活动的时候,一般对每一个接口都会做活动的有效性校验(是否开始、是否结束等等)、以及这个接口是不是需要用户登录。按照正常的逻辑,我们可以这么做。这有个问题就是,有多少接口,就要多少次代码copy。对于一个“懒人”,...转载 2019-10-16 16:12:25 · 169 阅读 · 0 评论