- 博客(65)
- 收藏
- 关注
原创 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
原创 python的基础环境配置和开发工具pycharm
python官网下载官网下载地址:https://www.python.org/getit/点击下载的python-XXX.exe运行文件一定点击勾选Add python XX to Path然后选在默认地址和自定义下载地址 建议自定义下载地址 然后傻瓜式下一步安装完成测试安装是否成功 运行cmd 输入python 看到下面版本号就是安装完成了自带pip可以导入需要的包 比...
2019-12-06 13:52:56 467
原创 mysql行转列 列转行
工作中经常用到的sql行转列和列转行总结创建数据表和数据CREATE TABLE `student` ( `name` varchar(64) DEFAULT NULL COMMENT '名字', `subject` varchar(64) DEFAULT NULL COMMENT '科目', `score` float DEFAULT NULL COMMENT '分数') ...
2019-12-06 12:52:40 294
原创 tomcat集群负载均衡配置
参考:Tomcat与Apache或Nginx的集群负载均衡设置: http://huangrs.blog.51cto.com/2677571/1058579Tomcat与Apache或Nginx连接和集群配置: http://toplchx.iteye.com/blog/1928390系统环境设置准备三台redhat linux 5或 centos服务器:负载均衡服务器:Apach...
2019-11-07 14:34:23 265
原创 Session和Cookie的主要区别
Cookie是把用户的数据写给用户的浏览器。Session技术把用户的数据写到用户独占的session中。Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象。服务器创建session出来后,会把session的id号,以cookie的形式回写给客户机,这样,只要客户机的浏览器不关,再去访问服务器时,都会带着session的id号...
2019-10-30 15:15:44 141
原创 四种mysql存储引擎
SHOW ENGINES如果要想查看数据库默认使用哪个引擎,可以通过使用命令:SHOW VARIABLES LIKE ‘storage_engine’;InnoDB存储引擎InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键,上图也看到了,InnoDB是默认的MySQL引擎。MyISAM存储引擎MyISAM基于ISAM存储引擎,并对其进行扩展。它是在We...
2019-10-30 15:01:26 224
原创 sql的优化
1、应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。2、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。3、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is nul...
2019-10-30 14:19:08 125
原创 Spring框架的7个模块
Spring 框架是一个分层架构,由 7 个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式,组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:核心容器: 核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。Bea...
2019-10-30 10:52:31 2217
原创 HashMap的实现原理
HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。从下图中可以看出,HashMap底层就是一个数组结构,数组中的每一项又是一个链表。当新建一个HashMap的时候,就会初始化一个数组。可以看出,Entry就是数组中的元素,每个 Map.Entry 其实就是一个key-value对,它持有一个指向下一个元素的引用,这就构成了链表。hashmap的存取实现如果数组该位置...
2019-10-30 10:46:24 141
原创 synchronized与Lock的区别
线程与进程线程与进程在开始之前先把进程与线程进行区分一下,一个程序最少需要一个进程,而一个进程最少需要一个线程。关系是线程–>进程–>程序的大致组成结构。所以线程是程序执行流的最小单位,而进程是系统进行资源分配和调度的一个独立单位。以下我们所有讨论的都是建立在线程基础之上。四种锁的介绍可重入锁如果锁具备可重入性,则称作为可重入锁。所...
2019-10-25 15:08:05 158
原创 ActiveMQ
1.ActiveMQ消息传送机制:名词解释Producer客户端使用来发送消息的Consumer客户端用来消费消息ActiveMQ broker协同中心broker让producer和consumer调用过程解耦的工具,最终实现了异步RPC/数据交换的功能例子一条消息从producer端发出之后,一旦被broker正确保存,那么它将会被con...
2019-10-24 20:10:01 182
原创 Redis
1. redis是什么redis是一种支持Key-Value等多种数据结构的存储系统。可用于缓存,事件发布或订阅,高速队列等场景。该数据库使用ANSIC语言编写,支持网络,提供字符串,哈希,列表,队列,集合结构直接存取,基于内存,可持久化。2 redis的应用场景:1、会话缓存(最常用)2、消息队列,比如支付3、活动排行榜或计数4、发布,订阅消息(消息通知)5、商品列表,评论列表等...
2019-10-24 19:11:23 163
原创 java代码的编译和执行和类加载的五个过程
加载在加载阶段,虚拟机主要完成三件事:1.通过一个类的全限定名来获取定义此类的二进制字节流。2.将这个字节流所代表的静态存储结构转化为方法区域的运行时数据结构。3.在Java堆中生成一个代表这个类的java.lang.Class对象,作为方法区域数据的访问入口验证验证阶段作用是保证Class文件的字节流包含的信息符合JVM规范,不会给JVM造成危害。如果验证失败,就会抛出...
2019-10-24 17:30:49 1385
原创 数据请求时 缓存穿透-缓存击穿-缓存雪崩
缓存穿透:缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求解决方案:接口层增加校验,如用户鉴权校验,对查询的key进行规则匹配拦截;布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被 这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。从缓存取不到的数据,在数据库中也没有取到,我们仍然把这个空结果进行缓存,缓存有效时间可以设置短...
2019-10-24 16:26:28 185
原创 多线程生命周期(新建、就绪、运行、阻塞和死亡)
状态概述新建状态(New Thread)线程处于创建状态,并没有调用start()方法之前就绪状态(Runnable)调用start()方法之后进入到就绪状态,系统为该线程分配了除CPU外的所需资源,使该线程处于就绪状态。此外,如果某个线程执行了yield()方法,那么该线程会被暂时剥夺CPU资源,重新进入就绪状态运行状态(Running)Java运行系统通...
2019-10-24 15:59:19 403
原创 线程池的实现原理和常见问题
线程池实现原理1.线程池状态runState表示当前线程池的状态,它是一个volatile变量用来保证线程之间的可见性static final变量表示runState可能的几个取值RUNNING当创建线程池后,初始时,线程池处于RUNNING状态SHUTDOWN如果调用了shutdown()方法,则线程池处于SHUTDOWN状态,此时线程池不能够接受新的...
2019-10-24 15:13:19 280
原创 如何确保线程顺序执行?
1、thread.Join()你可以用线程类的join()方法在一个线程中启动另一个线程,另外一个线程完成该线程继续执行。为了确保三个线程的顺序你应该先启动最后一个(T3调用T2,T2调用T1),这样T1就会先完成而T3最后完成;这里主要是利用Join的阻塞效果,来达到我们的使用目的。进入join源码后,首先看到的是一个传入0参数的join方法,此处选择继续进入:/** *...
2019-10-24 14:26:17 741
原创 Java多线程—死锁
java多线程中的死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去 这是一个严重的问题,因为死锁会让你的程序挂起无法完成任务,死锁的发生必须满足以下四个条件:互斥条件:一个资源每次只能被一个进程使用。请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺...
2019-10-24 11:51:26 128
原创 spring-AOP
1. 概念:AOP的全称是Aspect Orient Programming,即面向切面编程思想,所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性2. 实现技术:(a) AspectJ的底层技术。AspectJ的底层技术是静态代理,即用一种AspectJ支持的特定语言编写...
2019-10-24 11:37:04 230
原创 Mybatis缓存机制
一级缓存:是SqlSession级别的缓存,缓存的数据只在SqlSession内有效(默认开启)具体流程:第一次执行select完毕会将查到的数据写入SqlSession内的HashMap中缓存起来第二次执行select会从缓存中查数据,如果select相同且传参数一样,那么就能从缓存中返回数据,不用去数据库了,从而提高了效率注意事项:如果SqlSession执行了DML操作(i...
2019-10-23 18:02:32 147
原创 MySQL优化-explain
explainexplain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain命令来查看。所以我们深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时哪种策略预计会被优化器采用-- 实际SQL,查找用户名为login_name的员工SELECT * FROM...
2019-10-23 17:19:51 162
原创 自定义注解
1.注解的定义:Java文件叫做Annotation,用@interface表示。2.元注解: @Retention、@Target、@Document、@Inherited。3.注解的保留策略:@Retention(RetentionPolicy.SOURCE)注解仅存在于源码中,在class字节码文件中不包含@Retention(RetentionPolicy...
2019-10-23 15:38:48 122
原创 JPA注解
类目概述@Entity:@Table(name=”“)表明这是一个实体类。一般用于jpa这两个注解一般一块使用,但是如果表名和实体类名相同的话,@Table可以省略@MappedSuperClass用在确定是父类的entity上。父类的属性子类可以继承NoRepositoryBean一般用作父类的repository,有这个注解,spring不会去实例化该re...
2019-10-23 15:33:27 121
原创 spring boot常用注解
@SpringBootApplication:包含@ComponentScan、@Configuration和@EnableAutoConfiguration@ComponentScan:让spring Boot扫描到Configuration类并把它加入到程序上下文。@Configuration :等同于spring的XML配置文件;使用Java代码可以检查类型安全。@EnableAuto...
2019-10-23 13:54:39 107
原创 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
原创 数据结构之数组,栈,链表,队列,树,图,堆,散列表
1、数组数组是可以在内存中连续存储多个元素的结构,在内存中的分配也是连续的,数组中的元素通过数组下标进行访问,数组下标从0开始。优点:1.按照索引查询元素速度快2.按照索引遍历数组方便缺点:1.数组的大小固定后就无法扩容了2.数组只能存储一种类型的数据3.添加,删除的操作慢,因为要移动其他的元素。适用场景:频繁查询,对存储空间要求不大,很少增加和删除的情况。...
2019-10-22 17:37:57 1495
原创 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
原创 spring的IOC、AOP、DI
Spring中IOC的三种实现方式:1.属性注入,或叫做set方法注入;2.构造方法注入;3.注解注入;IOC:就是控制反转,通俗的说就是我们不用自己创建实例对象,这些都交给Spring的bean工厂帮我们创建管理。这也是Spring的核心思想,通过面向接口编程的方式来是实现对业务组件的动态依赖。这就意味着IOC是Spring针对解决程序耦合而存在的。在实际应用中,Spring通过...
2019-10-22 16:52:05 152
原创 乐观锁和悲观锁
悲观锁(多写场景)总是假设最坏的情况 ,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。Java中synchronized和ReentrantLock等独占...
2019-10-22 16:47:31 113
原创 String、StringBuilder、StringBuffer区别
1.在线程安全上,StringBuilder是线程不安全的,StringBuffer是线程安全的 2.在这方面运行速度快慢为:StringBuilder > StringBuffer > String 3.String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的(final修饰),但后两者的对...
2019-10-22 16:43:10 93
原创 常用校验注解
@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
原创 JSP的九大内置对象和六种基本动作
九大内置对象:request 、response、pageContext、session、application、exception、out、config、page六种基本动作:Include、useBean、forward、setProperty、getProperty、plugin...
2019-10-22 16:37:30 111
原创 Java语言中几个常用的包
java.lang:该包提供了Java语言进行程序设计的基础类,它是默认导入的包。该包里面的Runnable接口和Object、Math、String、StringBuffer、System、Thread以及Throwable类需要重点掌握,因为它们应用很广。java.util:该包提供了包含集合框架、遗留的集合类、事件模型、日期和时间实施、国际化和各种实用工具类(字符串标记生成器、随机数生成...
2019-10-22 16:34:04 211
原创 区块链
区块的定义:在区块链技术中,有价值的信息以数据的形式被永久存储下来,这些用于存储数据信息的载体称为区块。从技术上来讲,区块是一种记录交易的数据结构,反映了一笔交易的资金流向。区块按时间顺序排列,每一个区块记录着它在被创建期间发生的交易信息,所有区块有序链接起来以汇聚成一本“总账”,而每个区块可被看作总账中的一页。每个区块均包含的要素:①本区块的ID;②若干交易单;③前一个区块的ID。...
2019-10-22 16:31:17 154
原创 散列表(Hash table,也叫哈希表)
散列表是根据键(Key)而直接访问在内存存储位置的数据结构散列函数:顾名思义,它是一个函数。如果把它定义成 hash(key) ,其中 key 表示元素的键值,则 hash(key) 的值表示经过散列函数计算得到的散列值。特点:确定性。如果两个散列值是不相同的(根据同一函数),那么这两个散列值的原始输入也是不相同的。散列碰撞(collision)。散列函数的输入和输出不是唯一对应关...
2019-10-22 16:22:17 772
原创 分库分表
垂直分库:将不同模块的数据库分库存储,模块间不相互查询;如果有,就必须通过数据冗余或应用层二次加工解决,若不能杜绝跨库关联查询,则宣告此路不通。垂直分表:基于数据库中的"列"进行,新建一张扩展表,将不经常用或字段长度较大的字段拆分出去到扩展表中。在字段很多的情况下(大于100),通过"大表拆小表",便于开发与维护,也能避免跨页问题,MySQL底层是通过数据页存储的,一条记录占用空间过大...
2019-10-22 16:11:26 151
原创 负载均衡策略
参数:fail_timeout 与max_fails结合使用。max_fails 设置在fail_timeout参数设置的时间内最大失败次数,如果在这个时间内,所有针对该服务器的请求都失败了,那么认为该服务器会被认为是停机了,fail_time 服务器会被认为停机的时间长度,默认为10s。backup 标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里。d...
2019-10-22 16:02:25 153
原创 java23种设计模式
创建型模式(5):工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。工厂方法模式(Factory Method):创建一个工厂接口和创建多个工厂实现类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。抽象工厂模式(Abstract Factory):它的里面是一堆工厂方法,每个工厂方法返回某种类型的对象。单例模式(Singleton):在Java应用中...
2019-10-22 15:39:11 270
原创 设计模式之六大设计原则
1.单一职责原则(Single Responsibility Principle, SRP):一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。2.开闭原则(Open-Closed Principle, OCP):一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。3.里氏代换原则(Liskov Substi...
2019-10-22 15:28:07 96
原创 拦截器与过滤器的区别
过滤器包裹住servlet,servlet包裹住拦截器拦截器是基于java的反射机制的,而过滤器是基于函数回调。拦截器不依赖与servlet容器,过滤器依赖与servlet容器。拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初...
2019-10-22 15:24:25 118
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人