
java
文章平均质量分 53
久梦歌行
欢迎关注公众号:蜜蜂技术巢
展开
-
Spring的加载过程
Spring简单介绍如果你是使用java作为主要编程语言,那么Spring是一定要了解的,Spring是一个提供ioc(控制反转)的开源框架,他将对象的创建和使用解耦,开发人员无须手动设置对象的依赖关系,把这一工作交给了 Spring 容器去处理和管理,提升了开发体验。Spring IoC说到了 IoC (控制反转),一般来说和 IoC 一同出现的有 DI(Dependency Injection)也就是依赖注入,这两个概念之间有什么关系呢?在 2004 年 Martin Fowler 在探索 IO原创 2021-08-14 12:58:14 · 1729 阅读 · 0 评论 -
Spring Cloud Eureka详解
Spring Cloud Eureka是什么spring cloud中的服务注册中心eureka。Eureka包含两个组件:Eureka Server和Eureka Client。Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。Eureka Client用于简化与Eureka Server的交互,在应用启动后,将会向Eureka Se原创 2021-07-25 10:44:29 · 631 阅读 · 1 评论 -
微服务简介
什么是微服务1)一组小的服务(大小没有特别的标准,只要同一团队的工程师理解服务的标识一致即可)2)独立的进程(java的tomcat,nodejs等)3)轻量级的通信(不是soap,一般http或者rpc)4)基于业务能力(类似用户服务,商品服务等等)5)独立部署(迭代速度快)6)无集中式管理(无须统一技术栈,可以根据不同的服务或者团队进行灵活选择)微服务的利与弊优点:开发简单技术栈灵活服务独立无依赖独立按需扩展可用性高缺点(挑战):多服务运维难度系统部署依赖服务间通原创 2021-07-17 22:20:00 · 482 阅读 · 0 评论 -
cpu100%定位方法
我们服务器上的的服务和项目大部分都是java的,现在来讲讲,这种服务器cpu100%如何定位。先使用top命令找到cpu最高的进程。比如找到cpu最高的进程id,简称top_pid。使用top -Hp top_pid找到cpu最多的线程,这里记住最高的几个线程id,thread_id。现在我们将这些线程id转化成16进制,因为java堆栈里的线程id都是16进制的,转化后方便我们定位printf “%x\n” thread_idjstack top_pid,打印出堆栈,然后用3步骤里原创 2021-06-06 22:51:28 · 847 阅读 · 2 评论 -
缓存常见问题以及解决方法
缓存雪崩如果缓存集中在一段时间内失效,发生大量的缓存穿透,所有的查询都落在数据库上,就造成了缓存雪崩。如何解决缓存雪崩如果缓存经常在一个时间消失,就要考虑key的过期时间是不是一样的,可以随机一下过期时间,避免缓存过期时间一起失效。取缓存的时候加锁,这样可以保证不会大部分数据请求到缓存,但是限制的并发。我们还是要保证缓存系统没有崩溃,比如你用redis,可以使它高可用,可以使用 主从+哨兵 ,Redis Cluster 来避免 Redis 全盘崩溃的情况。如果你的系统第一次就可能会有很大的流量原创 2021-05-04 17:13:24 · 862 阅读 · 0 评论 -
lucene学习
什么是luceneLucene的目的是为软件开发人员提供一个简单易用的工具包,以方便在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎为什么我们要用Lucene?对比数据库1.lucene可以对文件进行检索,这是数据库所不能的2.对文本检索,lucene可以使用索引,检索效率高3.lucene消耗内存少4.lucene可以对搜索结果进行排名,进行高亮显示等。lucene的流程全文检索的流程分为两大部分:索引流程、搜索流程。索引流程:采集数据—>构建文档对象—&g原创 2020-07-26 16:46:56 · 229 阅读 · 0 评论 -
Java中的AQS
什么是AQSAQS即AbstractQueuedSynchronizer(抽象队列同步器),一个并发包的基础组件,用来实现各种锁,各种同步组件的。它包含了state变量、加锁线程、等待队列等并发中的核心组件。我们常用的比如ReentrantLock,CountDownLatch等等基础类库都是基于AQS实现的。AQS的原理和结构AQS核心思想是,如果被请求的共享资源空闲,那么就将当前请求资源的线程设置为有效的工作线程,将共享资源设置为锁定状态;如果共享资源被占用,就通过一个基于一个双向链..原创 2020-06-27 19:59:47 · 3080 阅读 · 1 评论 -
java中io操作的注意事项
及时关闭流 我们在io操作完成后,需要及时关闭流释放资源,因为这样的对象不主动关闭,将会占用系统资源,会增大系统的开销。 文件中的分隔符使用类中常量 因为在window和linux中的分隔符等可能会不同,使用类中的分割常量将会根据系统自动生成。如File.pathSeparator、File.separator等原创 2016-03-28 20:36:42 · 1319 阅读 · 0 评论 -
javanio 实现socket通信
package io.nio;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.SelectionKey;import java.nio.channels.Selector;import java.nio.channels.ServerSocketChannel;原创 2016-04-13 20:41:22 · 421 阅读 · 0 评论 -
浅析ConcurrentHashMap
为什么需要ConcurrentHashMap由于HashMap是非同步的在多线程下将会出现线程问题,而HashTable每次操作都会,访问同步锁,效率比较低。而ConcurrentHashMap使用了锁分离技术在并发比较多的时候,效率比HashTable要高很多。结构示例 结构简析其中每个Segment持有一个同步锁,这样在操作的时候每个段持有自己的同步锁。提高了效率。每个Segment可以看成原创 2016-03-27 00:44:44 · 368 阅读 · 0 评论 -
java线程中的几种状态以及相互转换
先放一张图表示java线程中的几种状态和关系创建 一般就是创建一个方法继承thread或实现runable方法的类,通过new来创建了。 就绪 当一个线程调用了start方法后,还没有获取到cpu线程。 运行 当就绪状态的线程获取到cpu后,便开始运行。 阻塞 当运行时的线程调用wait、sleep、join等方法后便进入阻塞状态,当线程重新被唤醒时,就会进入就绪或运行。 死亡 当线程的r原创 2016-03-25 20:06:38 · 1550 阅读 · 0 评论 -
java和js实现aes加密解密
由于公司安全测试,要对重要信息进行加密传输,使得java、android、ios一致。java代码package gov.communitycloud.user.utils;import java.math.BigInteger;import javax.crypto.Cipher;import javax.crypto.KeyGenerator;import javax.cr原创 2016-03-31 16:09:36 · 33071 阅读 · 9 评论 -
java只有值传递
有次去面试,面试官问我java的值传递和引用传递是什么,问我有没有用因为用错这2者而导致错误。我回答值传递就是传递的数值,引用传递传递的指针,感觉自己回答的不好后来查了下资料总结下例子public static void main(String[] args) { HashMap<String, Object> map = new HashMap<String, Object原创 2016-03-07 17:50:34 · 1127 阅读 · 0 评论 -
java异常学习
Throwable类是 Java 语言中所有错误或异常的超类。只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出。原创 2016-03-06 20:15:11 · 551 阅读 · 0 评论 -
java关键字volatile
java关键字volatile介绍在java的多线程中,volatile扮演着重要的角色,volatile是轻量级的synchronized,在某些时候它比synchronized开销要小,因为它不会引起线程上下文的切换和调度。特性原子性 它保证了我们对例如long和double等64位操作的原子性,在32位平台下, 对64位数据的读取和赋值是需要通过两个操作来完成的。可见性 在多原创 2016-01-20 17:13:58 · 541 阅读 · 0 评论 -
内部类访问局部变量为什么要加final
在内部类中访问局部变量,编译器实际上会为该内部类创建一个成员变量,以及带有参数的构造方法,然后将该变量传入构造方法,也就是说外面的变量和类里面的变量就是名字相同而已,此时你无论修改哪一个都对另外一个不产生影响,这样就出现矛盾了,防止这种现象就规定只准用final你可以自己定义构造方法然后传进去,就没必要定义final变量成员变量的话实际上内部类访问就是用类似于Test.this原创 2015-07-04 09:21:32 · 860 阅读 · 0 评论 -
获取字符串中每个字母出现的次数
package cn.collection.test;import java.util.Map;import java.util.TreeMap;/* * 获取字符串中每个字母出现的次数 * dfklmaklkjgrad * 以a(2)b(1).... */public class MapTest { public static void main(String[] ar原创 2015-05-08 21:30:18 · 3272 阅读 · 0 评论 -
java时间戳转化成日期格式
String lastDate = XXX;Long time = new Long(lastDate);Calendar c = Calendar.getInstance();c.setTimeInMillis(time);Date releaseDate = c.getTime();XXX为一个时间戳,原创 2015-03-09 08:58:09 · 1250 阅读 · 0 评论 -
java发送邮件
@Test public void fun() throws AddressException, MessagingException { Properties props = new Properties(); props.setProperty("mail.host", "smtp.163.com"); props.setProperty("mail.smtp.auth", "t原创 2014-12-12 09:13:13 · 616 阅读 · 0 评论 -
java final和static关键字学习
package day12_1;public class FinalTest { final int i1 = 9; static final int i2 = 99; public static final int i3 = 39; final int i4 = (int) (Math.random()*20); static final int i5 = (int) (Ma原创 2014-12-01 14:39:53 · 524 阅读 · 0 评论 -
Java对象的序列化与反序列化
序列化与反序列化序列化就是将对象的状态信息转换为可以存的字节序列存等储,在以后将这个字节序列恢复成对象就是反序列化。实现Serializable的方式public class Fruit implements Serializable { /** * */ private static final long serialVersionUID = 1L; p原创 2016-05-01 15:54:41 · 344 阅读 · 0 评论 -
关于java中bean拷贝的思考
使用的一些场景在java中,有很多地方需要用到bean拷贝,比如从数据库查出的对象bo需要转化成页面显示需要的对象vo返回到前端等,它们的很多属性字段都是一样。有哪些工具类两个对象之间的属性拷贝,效率最高的是使用属性中的get/set方法,但有时属性比较多,这样做看起来有点傻,除非对性能要求很高。常用的bean拷贝类有以下几种Apache的BeanUtilsSpring的BeanUtilscg原创 2016-04-18 22:46:08 · 1781 阅读 · 0 评论 -
Java运行时数据区讲解
组成部分程序计数器因为Java虚拟机的多线程是通过线程轮流切换并分配处理器时间来执行的,所以每条线程都需要一个程序计数器,来知道一个线程执行到了什么地方。本地方法栈这是为JVM运行Native方法准备的空间。Java栈每个方法在执行的同时都会创建一个栈帧,用户存储局部变量表,操作数栈,动态链接,方法出口等,局部变量存储了8种基本类型,和对象的引用。Java栈是线程私有的,我们不用关心它的数据一致性问原创 2016-05-28 23:06:51 · 395 阅读 · 0 评论 -
Java中的CAS
Java中的CASCAS全称 Compare And Swap(比较与交换),是一种无锁算法。在不使用锁(没有线程被阻塞)的情况下实现多线程之间的变量同步,java.util.concurrent包中的原子类就是通过CAS来实现了乐观锁。基本介绍CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(...原创 2019-10-02 23:16:51 · 1203 阅读 · 0 评论 -
Java中各种锁的介绍
Java中各种锁的介绍前言Java提供了各种各样的锁,每种锁都有适合的使用的场景,我们了解了各种锁的特点后,就能在平时的开发中灵活运用。1.乐观锁和悲观锁悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。Java中synchronized和Reentr...原创 2019-09-30 19:45:45 · 464 阅读 · 0 评论 -
synchronized深入探究
前言synchronized是Java中解决并发问题的一种常用方法,它主要的作用如下 确保线程互斥的访问代码 保证变量的可见性 解决重排序 基本使用synchronized可以修饰方法、代码块,下面看一个简单的例子public class SynTest {public void lockTest() {...原创 2019-09-17 22:27:52 · 176 阅读 · 0 评论 -
Java事务总结
Java事务总结事务的特性事务拥有以下四个特性,习惯上被称为ACID特性: 原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。 一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态是指数据库中的数据应满足完整性约束。除此之外,一致性还有另外一层语义,就是事务的中...原创 2019-03-05 22:11:28 · 593 阅读 · 0 评论 -
JVM性能调优
JVM性能调优 合理的分配新老代的空间 由于fullGC(老年代)的成本远比minorGC(新生代和老年代)的成本大,所以给应用分配一个合理的新生代空间,尽量将对象分配到新生代减小fullGC的频率。 将大对象直接分配到老年代,保持新生代对象的结构的完整性,以提高GC效率, 以通过-XX:PretenureSizeThreshold设置进入老年代的阀值。 采用合适的垃圾收集...原创 2019-03-05 22:10:32 · 174 阅读 · 0 评论 -
jvm垃圾回收知识总结
jvm垃圾回收知识总结1.垃圾对象是如何确定的主要是通过可达性算法分析,即通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连(用图论的话来说,就是从GC Roots到这个对象不可达)时,则证明此对象是不可用的,可作为GC Roots的对象包括下面几种:虚...原创 2019-03-05 22:05:49 · 232 阅读 · 0 评论 -
Lock与synchronized 的比较学习
一些比较Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现;synchronized在发生异常时,会自动释放线程占有的锁,因此不会导致死锁现象发生;而Lock在发生异常时,如果没有主动通过unLock()去释放锁,则很可能造成死锁现象,因此使用Lock时需要在finally块中释放锁;Lock可以让等待锁的线程响应中断,而synchro原创 2017-02-08 14:23:55 · 470 阅读 · 0 评论 -
JAVA7特性学习
泛型实例创建的类型推断//后面的括号内可以不用加上具体泛型List<String> list = new ArrayList<>();同时捕获多个异常try { createException();} catch (ClassNotFoundException | IOException e) { // TODO: handle exception}使用下划线对数字进行分隔表达原创 2016-08-06 20:32:13 · 1161 阅读 · 0 评论 -
Java线程间数据传递
线程共享数据Java中共享数据,可以使用一个共享对象,或者使用一个阻塞队列。接下来看一个日志的例子。其中主线程可以记录日志,而另外开启了一个线程进行日志的输出public class LogService { private final BlockingQueue<String> queue; private final LoggerThread logger; //关闭标记原创 2016-08-03 21:56:22 · 6315 阅读 · 0 评论 -
Java注解学习
元注解首先Java提供了4个元注解来定义其他注解@Target用来定义注解将应用于什么地方(如一个方法或者一个域)@Retention用来定义注解在哪一个级别可用,在源代码中(source),类文件中(class)或者运行时(runtime)@Documented用于描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。@Inheri原创 2016-06-22 11:12:47 · 675 阅读 · 0 评论 -
解析Java的四种引用
强引用强引用就是类似Object obj = new Object();之类的,只要有强引用存在,垃圾收集器就不会回收引用对象。软引用被软引用引用的对象,当系统将要内存不足时,被软引用引用的对象就将被回收,JDK提供了SoftReference类来实现软引用。软引用对象最常用于实现内存敏感的缓存。 一个代码例子:import java.lang.ref.SoftReference;public原创 2016-06-20 13:27:40 · 448 阅读 · 1 评论 -
深入理解Java类加载
类的加载过程Java类从加载到卸载大致如下 其中的部分工作内容:一、加载使用类的全名获取二进制流,在内存中生成class对象。 二、验证保证class文件中内容不会危害虚拟机自身的安全等。三、准备为类变量分配初始值。final等修饰的固定变量分配具体值,其他分配零值。 四、解析虚拟机将常量池中的符号引用替换为直接引用的过程 类加载器(1)Bootstrap ClassLoader 这个原创 2016-05-08 14:55:10 · 505 阅读 · 0 评论 -
java中克隆研究
实现克隆的步骤让类实现Cloneable接口重写clone方法为public,并调用super.clone()代码示例public class People implements Cloneable { private int age; private String name; public People(int age, String name) { supe原创 2016-05-14 12:11:44 · 307 阅读 · 0 评论 -
java网络上传文件小例子
使用tcp连接服务端原创 2014-11-07 14:02:45 · 790 阅读 · 0 评论 -
java的TCP通讯
服务端,运行时要先启动package net.tcp;import java.io.IOException;import java.io.InputStream;import java.net.ServerSocket;import java.net.Socket;public class ServerDemo { public static void main(String原创 2014-11-06 15:41:01 · 687 阅读 · 0 评论 -
编写一个程序,将e:\java目录下的所有.java文件复制到e:\jad目录下
package cn.io.file.demo;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileReader;import java.io.FileWriter;import java.io.FilenameFilter;import原创 2014-10-21 20:53:02 · 1110 阅读 · 0 评论 -
内省操作javabean的属性
有一个Person类public class Person { private String name; private String password; private int age; public String getName() { return name; } public void setName(String name) { this.name = nam原创 2014-08-31 11:22:50 · 558 阅读 · 0 评论