java
java相关的知识点
pc彭诚诚的博客
这个作者很懒,什么都没留下…
展开
-
java调用python执行导出mongodb数据为excel表格
主要是工作中需要使用java去调用python执行导出mongodb数据为excel表格的需求 所以在完成中遇到很多坑做的一个自我总结和记录一.python代码部分python的代码部分主要封装了mongodb数据库的端口 用户密码校验 还有导出为excel表格的方法 并保存py文件的位置提供给java调用直接上代码:#!/usr/bin/env python # -*- codin...原创 2019-12-06 14:35:45 · 694 阅读 · 0 评论 -
synchronized与Lock的区别
线程与进程线程与进程在开始之前先把进程与线程进行区分一下,一个程序最少需要一个进程,而一个进程最少需要一个线程。关系是线程–>进程–>程序的大致组成结构。所以线程是程序执行流的最小单位,而进程是系统进行资源分配和调度的一个独立单位。以下我们所有讨论的都是建立在线程基础之上。四种锁的介绍可重入锁如果锁具备可重入性,则称作为可重入锁。所...原创 2019-10-25 15:08:05 · 158 阅读 · 0 评论 -
Redis
1. redis是什么redis是一种支持Key-Value等多种数据结构的存储系统。可用于缓存,事件发布或订阅,高速队列等场景。该数据库使用ANSIC语言编写,支持网络,提供字符串,哈希,列表,队列,集合结构直接存取,基于内存,可持久化。2 redis的应用场景:1、会话缓存(最常用)2、消息队列,比如支付3、活动排行榜或计数4、发布,订阅消息(消息通知)5、商品列表,评论列表等...原创 2019-10-24 19:11:23 · 163 阅读 · 0 评论 -
java代码的编译和执行和类加载的五个过程
加载在加载阶段,虚拟机主要完成三件事:1.通过一个类的全限定名来获取定义此类的二进制字节流。2.将这个字节流所代表的静态存储结构转化为方法区域的运行时数据结构。3.在Java堆中生成一个代表这个类的java.lang.Class对象,作为方法区域数据的访问入口验证验证阶段作用是保证Class文件的字节流包含的信息符合JVM规范,不会给JVM造成危害。如果验证失败,就会抛出...原创 2019-10-24 17:30:49 · 1385 阅读 · 0 评论 -
数据请求时 缓存穿透-缓存击穿-缓存雪崩
缓存穿透:缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求解决方案:接口层增加校验,如用户鉴权校验,对查询的key进行规则匹配拦截;布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被 这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。从缓存取不到的数据,在数据库中也没有取到,我们仍然把这个空结果进行缓存,缓存有效时间可以设置短...原创 2019-10-24 16:26:28 · 185 阅读 · 0 评论 -
多线程生命周期(新建、就绪、运行、阻塞和死亡)
状态概述新建状态(New Thread)线程处于创建状态,并没有调用start()方法之前就绪状态(Runnable)调用start()方法之后进入到就绪状态,系统为该线程分配了除CPU外的所需资源,使该线程处于就绪状态。此外,如果某个线程执行了yield()方法,那么该线程会被暂时剥夺CPU资源,重新进入就绪状态运行状态(Running)Java运行系统通...原创 2019-10-24 15:59:19 · 403 阅读 · 0 评论 -
线程池的实现原理和常见问题
线程池实现原理1.线程池状态runState表示当前线程池的状态,它是一个volatile变量用来保证线程之间的可见性static final变量表示runState可能的几个取值RUNNING当创建线程池后,初始时,线程池处于RUNNING状态SHUTDOWN如果调用了shutdown()方法,则线程池处于SHUTDOWN状态,此时线程池不能够接受新的...原创 2019-10-24 15:13:19 · 280 阅读 · 0 评论 -
如何确保线程顺序执行?
1、thread.Join()你可以用线程类的join()方法在一个线程中启动另一个线程,另外一个线程完成该线程继续执行。为了确保三个线程的顺序你应该先启动最后一个(T3调用T2,T2调用T1),这样T1就会先完成而T3最后完成;这里主要是利用Join的阻塞效果,来达到我们的使用目的。进入join源码后,首先看到的是一个传入0参数的join方法,此处选择继续进入:/** *...原创 2019-10-24 14:26:17 · 741 阅读 · 0 评论 -
Java多线程—死锁
java多线程中的死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去 这是一个严重的问题,因为死锁会让你的程序挂起无法完成任务,死锁的发生必须满足以下四个条件:互斥条件:一个资源每次只能被一个进程使用。请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺...原创 2019-10-24 11:51:26 · 128 阅读 · 0 评论 -
spring-AOP
1. 概念:AOP的全称是Aspect Orient Programming,即面向切面编程思想,所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性2. 实现技术:(a) AspectJ的底层技术。AspectJ的底层技术是静态代理,即用一种AspectJ支持的特定语言编写...原创 2019-10-24 11:37:04 · 230 阅读 · 0 评论 -
Mybatis缓存机制
一级缓存:是SqlSession级别的缓存,缓存的数据只在SqlSession内有效(默认开启)具体流程:第一次执行select完毕会将查到的数据写入SqlSession内的HashMap中缓存起来第二次执行select会从缓存中查数据,如果select相同且传参数一样,那么就能从缓存中返回数据,不用去数据库了,从而提高了效率注意事项:如果SqlSession执行了DML操作(i...原创 2019-10-23 18:02:32 · 147 阅读 · 0 评论 -
MySQL优化-explain
explainexplain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain命令来查看。所以我们深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时哪种策略预计会被优化器采用-- 实际SQL,查找用户名为login_name的员工SELECT * FROM...原创 2019-10-23 17:19:51 · 162 阅读 · 0 评论 -
自定义注解
1.注解的定义:Java文件叫做Annotation,用@interface表示。2.元注解: @Retention、@Target、@Document、@Inherited。3.注解的保留策略:@Retention(RetentionPolicy.SOURCE)注解仅存在于源码中,在class字节码文件中不包含@Retention(RetentionPolicy...原创 2019-10-23 15:38:48 · 122 阅读 · 0 评论 -
JPA注解
类目概述@Entity:@Table(name=”“)表明这是一个实体类。一般用于jpa这两个注解一般一块使用,但是如果表名和实体类名相同的话,@Table可以省略@MappedSuperClass用在确定是父类的entity上。父类的属性子类可以继承NoRepositoryBean一般用作父类的repository,有这个注解,spring不会去实例化该re...原创 2019-10-23 15:33:27 · 121 阅读 · 0 评论 -
spring boot常用注解
@SpringBootApplication:包含@ComponentScan、@Configuration和@EnableAutoConfiguration@ComponentScan:让spring Boot扫描到Configuration类并把它加入到程序上下文。@Configuration :等同于spring的XML配置文件;使用Java代码可以检查类型安全。@EnableAuto...原创 2019-10-23 13:54:39 · 107 阅读 · 0 评论 -
spring boot优点
1、简化编码:比如我们要创建一个 web 项目,使用 Spring 的朋友都知道,在使用 Spring 的时候,需要在 pom 文件中添加多个依赖,而 Spring Boot 则会帮助开发着快速启动一个 web 容器,在 Spring Boot 中,我们只需要在 pom 文件中添加如下一个 spring-boot-starter-web 依赖即可;点击进入该依赖后可以看到,Spring Boo...原创 2019-10-22 18:01:03 · 327 阅读 · 0 评论 -
数据结构之数组,栈,链表,队列,树,图,堆,散列表
1、数组数组是可以在内存中连续存储多个元素的结构,在内存中的分配也是连续的,数组中的元素通过数组下标进行访问,数组下标从0开始。优点:1.按照索引查询元素速度快2.按照索引遍历数组方便缺点:1.数组的大小固定后就无法扩容了2.数组只能存储一种类型的数据3.添加,删除的操作慢,因为要移动其他的元素。适用场景:频繁查询,对存储空间要求不大,很少增加和删除的情况。...原创 2019-10-22 17:37:57 · 1495 阅读 · 0 评论 -
Spring中Bean的生命周期和作用域
1.实例化bean对象(通过构造方法或者工厂方法)2.设置对象属性(setter等)(依赖注入)3.如果Bean实现了BeanNameAware接口,工厂调用Bean的setBeanName()方法传递Bean的ID。4.如果Bean实现BeanFactoryAware接口,工厂调用setBeanFactory()方法传入工厂自身5.将Bean实例传递给Bean的前置处理器的postPro...原创 2019-10-22 16:56:26 · 173 阅读 · 0 评论 -
spring的IOC、AOP、DI
Spring中IOC的三种实现方式:1.属性注入,或叫做set方法注入;2.构造方法注入;3.注解注入;IOC:就是控制反转,通俗的说就是我们不用自己创建实例对象,这些都交给Spring的bean工厂帮我们创建管理。这也是Spring的核心思想,通过面向接口编程的方式来是实现对业务组件的动态依赖。这就意味着IOC是Spring针对解决程序耦合而存在的。在实际应用中,Spring通过...原创 2019-10-22 16:52:05 · 152 阅读 · 0 评论 -
乐观锁和悲观锁
悲观锁(多写场景)总是假设最坏的情况 ,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。Java中synchronized和ReentrantLock等独占...原创 2019-10-22 16:47:31 · 113 阅读 · 0 评论 -
String、StringBuilder、StringBuffer区别
1.在线程安全上,StringBuilder是线程不安全的,StringBuffer是线程安全的 2.在这方面运行速度快慢为:StringBuilder > StringBuffer > String 3.String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的(final修饰),但后两者的对...原创 2019-10-22 16:43:10 · 93 阅读 · 0 评论 -
常用校验注解
@Null 被注释的元素必须为null@NotNull 被注释的元素不能为null@NotEmpty 验证注解元素值不为null且不为空(字符串长度不为0、集合大小不为0)@NotBlank 验证注解的元素值不为空(不为null、去除首位空格后长度为0)@AssertTrue 被注释的元素必须为true@AssertFalse 被注释的元素必须为false@Min(value=x) ...原创 2019-10-22 16:41:19 · 1311 阅读 · 0 评论 -
JSP的九大内置对象和六种基本动作
九大内置对象:request 、response、pageContext、session、application、exception、out、config、page六种基本动作:Include、useBean、forward、setProperty、getProperty、plugin...原创 2019-10-22 16:37:30 · 111 阅读 · 0 评论 -
Java语言中几个常用的包
java.lang:该包提供了Java语言进行程序设计的基础类,它是默认导入的包。该包里面的Runnable接口和Object、Math、String、StringBuffer、System、Thread以及Throwable类需要重点掌握,因为它们应用很广。java.util:该包提供了包含集合框架、遗留的集合类、事件模型、日期和时间实施、国际化和各种实用工具类(字符串标记生成器、随机数生成...原创 2019-10-22 16:34:04 · 211 阅读 · 0 评论 -
散列表(Hash table,也叫哈希表)
散列表是根据键(Key)而直接访问在内存存储位置的数据结构散列函数:顾名思义,它是一个函数。如果把它定义成 hash(key) ,其中 key 表示元素的键值,则 hash(key) 的值表示经过散列函数计算得到的散列值。特点:确定性。如果两个散列值是不相同的(根据同一函数),那么这两个散列值的原始输入也是不相同的。散列碰撞(collision)。散列函数的输入和输出不是唯一对应关...原创 2019-10-22 16:22:17 · 772 阅读 · 0 评论 -
分库分表
垂直分库:将不同模块的数据库分库存储,模块间不相互查询;如果有,就必须通过数据冗余或应用层二次加工解决,若不能杜绝跨库关联查询,则宣告此路不通。垂直分表:基于数据库中的"列"进行,新建一张扩展表,将不经常用或字段长度较大的字段拆分出去到扩展表中。在字段很多的情况下(大于100),通过"大表拆小表",便于开发与维护,也能避免跨页问题,MySQL底层是通过数据页存储的,一条记录占用空间过大...原创 2019-10-22 16:11:26 · 151 阅读 · 0 评论 -
负载均衡策略
参数:fail_timeout 与max_fails结合使用。max_fails 设置在fail_timeout参数设置的时间内最大失败次数,如果在这个时间内,所有针对该服务器的请求都失败了,那么认为该服务器会被认为是停机了,fail_time 服务器会被认为停机的时间长度,默认为10s。backup 标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里。d...原创 2019-10-22 16:02:25 · 153 阅读 · 0 评论 -
java23种设计模式
创建型模式(5):工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。工厂方法模式(Factory Method):创建一个工厂接口和创建多个工厂实现类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。抽象工厂模式(Abstract Factory):它的里面是一堆工厂方法,每个工厂方法返回某种类型的对象。单例模式(Singleton):在Java应用中...原创 2019-10-22 15:39:11 · 270 阅读 · 0 评论 -
设计模式之六大设计原则
1.单一职责原则(Single Responsibility Principle, SRP):一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。2.开闭原则(Open-Closed Principle, OCP):一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。3.里氏代换原则(Liskov Substi...原创 2019-10-22 15:28:07 · 96 阅读 · 0 评论 -
拦截器与过滤器的区别
过滤器包裹住servlet,servlet包裹住拦截器拦截器是基于java的反射机制的,而过滤器是基于函数回调。拦截器不依赖与servlet容器,过滤器依赖与servlet容器。拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初...原创 2019-10-22 15:24:25 · 118 阅读 · 0 评论 -
redis、MongoDB及Memcached的区别
Redis的优点:1.支持多种数据结构,如 string(字符串)、 list(双向链表)、dict(hash表)、set(集合)、zset(排序set)、hyperloglog(基数估算)2.支持持久化操作,可以进行aof及rdb数据持久化到磁盘,从而进行数据备份或数据恢复等操作,较好的防止数据丢失的手段。3.支持通过Replication进行数据复制,通过master-slave机制,...原创 2019-10-18 17:50:19 · 133 阅读 · 0 评论 -
分布式事务
概念:分布式事物产生原因:主要产生与在微服务系统中,数据库的垂直拆分或者是RPC远程调用,不在同一个数据源中,而是多个数据源中,每个数据源的事物都是本地事物,互不影响。所以当A服务的数据源的事物发生回滚,不会影响到B服务的数据源回滚,从而产生分布式事物问题,无法保证分布式通讯数据一致性问题。事务补偿机制:在事务链中的任何一个正向事务操作, 都必须存在一个完全符合回滚规则的可逆事务....原创 2019-10-18 17:21:43 · 126 阅读 · 0 评论 -
事务的特性和隔离级别
事务的四大特性:原子性(Atomicity):是指事务包含的所有操作要么全部成功,要么全部失败回滚。一致性(Consistency):一个事务执行之前和执行之后都必须处于一致性状态。隔离性(Isolation):是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。持久性(Durability):持久性是指...原创 2019-10-18 16:52:51 · 147 阅读 · 0 评论 -
SpringBoot 并发编程学习历程
如果一个项目总用单线程来跑,难免会遇到一些性能问题,所以再开发中,我们应该尽量适量的使用多线程(在保证线程安全的情况下)。本教程大概目录:模拟单线程情节用Callable实现 并发编程用DeferedResult实现异步处理模拟单线程情节public class AsyncController { ...原创 2019-10-18 16:13:46 · 289 阅读 · 0 评论 -
SpringBoot面试题整理
1、什么是Spring Boot?多年来,随着新功能的增加,spring变得越来越复杂。只需访问https://spring.io/projects页面,我们就会看到可以在我们的应用程序中使用的所有Spring项目的不同功能。如果必须启动一个新的Spring项目,我们必须添加构建路径或添加Maven依赖关...原创 2019-10-18 15:45:18 · 111 阅读 · 0 评论 -
SpringMVC流程
1.用户发送请求到前端控制器(DispatcherServlet)2.前端控制器请求调用处理器映射器(HandlerMapping)查找Handler(可以根据xml配置、注解进行查找)3.前端控制器调用处理器适配器(HandlerAdapter)去执行Handler4.Handler执行完成给适配器返回ModelAndView并向前端控制器返回ModelAndView5.前端控制器请求视...原创 2019-10-18 15:33:11 · 110 阅读 · 0 评论 -
Java虚拟机内存溢出和内存泄露
内存溢出场景:如果出现java.lang.OutOfMemoryError: Java heap space异常,说明Java虚拟机的堆内存不够。原因有二:a.Java虚拟机的堆内存设置不够,可以通过参数-Xms、-Xmx来调整。b.代码中创建了大量大对象,并且长时间不能被垃圾收集器收集(存在被引用)。如果出现java.lang.OutOfMemoryError: PermGen spa...原创 2019-10-18 15:31:00 · 233 阅读 · 0 评论 -
常见JVM面试题及答案整理
前言总结了JVM一些经典面试题,分享出我自己的解题思路,希望对大家有帮助,有哪里你觉得不正确的话,欢迎指出,后续有空会更新。1.什么情况下会发生栈内存溢出。思路: 描述栈定义,再描述为什么会溢出,再说明一下相关配置参数,OK的话可以给面试官手写是一个栈溢出的demo。我的答案:栈是线程私有的,他的生...转载 2019-10-17 15:55:40 · 197 阅读 · 0 评论 -
GC
1.垃圾回收机制:JVM GC只回收堆区和方法区内的对象。而栈区的数据,在超出作用域后会被JVM自动释放掉,所以其不在JVM GC的管理范围内。2.垃圾回收器:串行垃圾回收器(Serial Garbage Collector)并行垃圾回收器(Parallel Garbage Collector)并发标记扫描垃圾回收器(CMS Garbage Collector)G1垃圾回收器(G1 G...原创 2019-10-16 16:34:47 · 192 阅读 · 0 评论 -
JVM
方法区(method):它保存方法代码(编译后的java代码)和符号表。存放了要加载的类信息、静态变量、final类型的常量、属性和方法信息。JVM用持久代(Permanet Generation)来存放方法区。堆内存(heap):所有通过new创建的对象的内存都在堆中分配,其大小可以通过-Xmx和-Xms来控制。堆内存是向高地址扩展的数据结构,是不连续的内存区域。如果java堆空间不...原创 2019-10-16 16:28:50 · 316 阅读 · 0 评论