- 博客(125)
- 收藏
- 关注
原创 kafka 分布式(不是单机)的情况下,如何保证消息的顺序消费?
Kafka 分布式的单位是 partition,同一个 partition 用一个 write ahead log 组织,所以可以保证 FIFO 的顺序。不同 partition 之间不能保证顺序。但是绝大多数用户都可以通过 message key 来定义,因为同一个 key 的 message 可以保证只发送到同一个 partition。Kafka 中发送 1 条消息的时候,可以指定(topic, partition, key) 3 个参数。partiton 和 key 是可选的。如果你指定了.
2021-11-06 09:19:40 1356
原创 a = a + b 与 a += b 的区别
a = a + b 与 a += b 的区别+= 隐式的将加操作的结果类型强制转换为持有结果的类型。如果两这个整型相加,如 byte、short 或者 int,首先会将它们提升到 int 类型,然后在执行加法操作。如果加法操作的结果比 a 的最大值要大,则 a+b 会出现编译错误,但是a += b 没问题,如下:byte a = 127;byte b = 127;b = a + b; // error : cannot convert from int to byteb += a; // o
2021-11-04 17:19:46 1244
原创 Java 中,throw 和 throws 有什么区别
Java 中,throw 和 throws 有什么区别throw 用于抛出 java.lang.Throwable 类的一个实例化对象,意思是说你可以通过关键字 throw 抛出一个 Error 或者 一个 Exception,如:throw new IllegalArgumentException(“size must be multiple of 2″)而 throws 的作用是作为方法声明和签名的一部分,方法被抛出相应的异常以便调用者能处理。Java 中,任何未处理的受检查异常强制在 thr
2021-11-03 08:22:34 252
原创 水果口味 jQuery
<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title&...
2021-11-02 09:37:02 231 1
原创 构造器注入和 setter 依赖注入
构造器注入和 setter 依赖注入,那种方式更好?每种方式都有它的缺点和优点。构造器注入保证所有的注入都被初始化,但是setter 注入提供更好的灵活性来设置可选依赖。如果使用 XML 来描述依赖,Setter 注入的可读写会更强。经验法则是强制依赖使用构造器注入,可选依赖使用 setter 注入。112、依赖注入和工程模式之间有什么不同?虽然两种模式都是将对象的创建从应用的逻辑中分离,但是依赖注入比工程模式更清晰。通过依赖注入,你的类就是 POJO,它只知道依赖而不关心它们怎么获取。使用
2021-10-30 09:10:20 598
原创 JRE、JDK、JVM 及 JIT 之间有什么不同?
JRE、JDK、JVM 及 JIT 之间有什么不同?JRE 代表 Java 运行时(Java run-time),是运行 Java 引用所必须的。JDK 代表 Java 开发工具(Java development kit),是 Java 程序的开发工具,如 Java编译器,它也包含 JRE。JVM 代表 Java 虚拟机(Java virtual machine),它的责任是运行 Java 应用。JIT 代表即时编译(Just In Time compilation),当代码执行的次数超过一定的阈
2021-10-27 13:22:13 6023
原创 volatile 关键字的作用
volatile 关键字的作用对于可见性,Java 提供了 volatile 关键字来保证可见性。当一个共享变量被 volatile 修饰时,它会保证修改的值会立即被更新到主存,当有其他线程需要读取时,它会去内存中读取新值。从实践角度而言,volatile 的一个重要作用就是和 CAS 结合,保证了原子性,详细的可以参见 java.util.concurrent.atomic 包下的类,比如 AtomicInteger...
2021-10-26 15:09:05 118
原创 如何确保线程安全?
如何确保线程安全?在 Java 中可以有很多方法来保证线程安全——同步,使用原子类(atomicconcurrent classes),实现并发锁,使用 volatile 关键字,使用不变类和线程安全类。73、同步方法和同步块,哪个是更好的选择?同步块是更好的选择,因为它不会锁住整个对象(当然你也可以让它锁住整个对象)。同步方法会锁住整个对象,哪怕这个类中有多个不相关联的同步块,这通常会导致他们停止执行并需要等待获得这个对象上的锁。同步块更要符合开放调用的原则,只在需要锁住的代码块锁住相应的
2021-10-25 13:12:05 2750
原创 什么是 Daemon 线程
什么是 Daemon 线程?它有什么意义?所谓后台(daemon)线程,是指在程序运行的时候在后台提供一种通用服务的线程,并且这个线程并不属于程序中不可或缺的部分。因此,当所有的非后台线程结束时,程序也就终止了,同时会杀死进程中的所有后台线程。反过来说,只要有任何非后台线程还在运行,程序就不会终止。必须在线程启动之前调用setDaemon()方法,才能把它设置为后台线程。注意:后台进程在不执行 finally子句的情况下就会终止其 run()方法。比如:JVM 的垃圾回收线程就是 Daemon
2021-10-24 09:13:06 2572
原创 什么是不可变对象
什么是不可变对象,它对写并发应用有什么帮助?不可变对象(Immutable Objects)即对象一旦被创建它的状态(对象的数据,也即对象属性值)就不能改变,反之即为可变对象(Mutable Objects)。不可变对象的类即为不可变类(Immutable Class)。Java 平台类库中包含许多不可变类,如 String、基本类型的包装类、BigInteger 和 BigDecimal 等。不可变对象天生是线程安全的。它们的常量(域)是在构造函数中创建的。既然它们的状态无法修改,这些常量永远
2021-10-22 08:02:49 995
原创 什么是锁?
什么是锁?答:数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作。基本锁类型:锁包括行级锁和表级锁...
2021-10-21 07:51:50 207
原创 Redis 分布式锁
使用过 Redis 分布式锁么,它是什么回事?先拿 setnx 来争抢锁,抢到之后,再用 expire 给锁加一个过期时间防止锁忘记了释放。这时候对方会告诉你说你回答得不错,然后接着问如果在 setnx 之后执行 expire之前进程意外 crash 或者要重启维护了,那会怎么样?这时候你要给予惊讶的反馈:唉,是喔,这个锁就永远得不到释放了。紧接着你需要抓一抓自己得脑袋,故作思考片刻,好像接下来的结果是你主动思考出来的,然后回答:我记得 set 指令有非常复杂的参数,这个应该是可以同时把 se
2021-10-20 08:05:45 69
原创 Thread 类的 sleep()方法和对象的 wait()方法都可以让线 程暂停执行,它们有什么区别?
Thread 类的 sleep()方法和对象的 wait()方法都可以让线 程暂停执行,它们有什么区别?答: sleep()方法(休眠)是线程类(Thread)的静态方法,调用此方法会让当前线程 暂停执行指定的时间,将执行机会(CPU)让给其他线程,但是对象的锁依然保 持,因此休眠时间结束后会自动恢复(线程回到就绪状态,请参考第 66 题中的线 程状态转换图)。wait()是 Object 类的方法,调用对象的 wait()方法导致当前线 程放弃对象的锁(线程暂停执行),进入对象的等待池(wait
2021-10-19 08:19:50 148
原创 抽象工厂模式和原型模式之间的区别?
抽象工厂模式:通常由工厂方法模式来实现。但一个工厂中往往含有多个工厂方 法生成一系列的产品。这个模式强调的是客户代码一次保证只使用一个系列的产 品。当要切换为另一个系列的产品,换一个工厂类即可。 原型模式:工厂方法的最大缺点就是,对应一个继承体系的产品类,要有一个同 样复杂的工厂类的继承体系。我们可以把工厂类中的工厂方法放到产品类自身之 中吗?如果这样的话,就可以将两个继承体系为一个。这也就是原型模式的思想, 原型模式中的工厂方法为 clone,它会返回一个拷贝(可以是浅拷贝,也可以是深 拷贝,由设计者..
2021-10-17 14:04:00 884
原创 Dubbo
Dubbo 服务降级,失败重试怎么做?可以通过 dubbo:reference 中设置 mock="return null"。mock 的值也可以修 改为 true,然后再跟接口同一个路径下实现一个 Mock 类,命名规则是 “接口 名称+Mock” 后缀。然后在 Mock 类里实现自己的降级逻辑16、Dubbo 使用过程中都遇到了些什么问题?在注册中心找不到对应的服务,检查 service 实现类是否添加了@service 注解 无法连接到注册中心,检查配置文件中的对应的测试 ip 是否正确
2021-10-15 12:22:31 74
原创 如何使用 thread dump?如何分析 Thread dump?
、你将如何使用 thread dump?你将如何分析 Thread dump?新建状态(New) 用 new 语句创建的线程处于新建状态,此时它和其他 Java 对象一样,仅仅在堆区 中被分配了内存。就绪状态(Runnable)当一个线程对象创建后,其他线程调用它的 start()方法,该线程就进入就绪状态, Java 虚拟机会为它创建方法调用栈和程序计数器。处于这个状态的线程位于可运 行池中,等待获得 CPU 的使用权。 运行状态(Running) 处于这个状态的线程占用 CPU,执行程序代码。只
2021-10-14 09:43:06 523
原创 多线程、并发及线程的基础问题
1、Java 中能创建 volatile 数组吗?能,Java 中可以创建 volatile 类型数组,不过只是一个指向数组的引用,而不 是整个数组。我的意思是,如果改变引用指向的数组,将会受到 volatile 的保护, 但是如果多个线程同时改变数组的元素,volatile 标示符就不能起到之前的保护 作用了。2、volatile 能使得一个非原子操作变成原子操作吗?一个典型的例子是在类中有一个 long 类型的成员变量。如果你知道该成员变量 会被多个线程访问,如计数器、价格等,你最好是将..
2021-10-13 09:55:39 86
原创 MyBatis
MyBatis 面试题1、什么是 Mybatis?1、Mybatis 是一个半 ORM(对象关系映射)框架,它内部封装了 JDBC,开发时 只需要关注 SQL 语句本身,不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。程序员直接编写原生态 sql,可以严格控制 sql 执行性 能,灵活度高。2、MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO 映射成数 据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。3、通
2021-10-12 12:49:37 87
原创 服务器概述
目前常见的web服务器1,Apache(http://httpd.apache.org)它是世界上用的最多的web服务器,市场占有率达60%左右,模块非常丰富,系统非常稳定,可移植性好,但是比较消耗资源2,lighttpd(http://www.lighttpd.net)它是德国人开发的一个开源软件,目标是提供一个高性能的网站,它具有内存开销低,cpu占用低,效能好及模块丰富,Nginx的重要竞争对手之一3,tomcat(http://tomcat.apache.org)...
2021-10-11 10:08:04 76
原创 maven
建立maven_parent父项目项目的packaging:pomPackaging为pom的项目,不用来开发java代码。用来声明整个系统中的所需要依赖的资源。方便项目中依赖的统一管理。<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/.
2021-10-10 13:36:18 56
原创 Ddubbo
1,概述Dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring初始化完成,以便上线时,能及早发现问题,默认 check="true"。可以通过 check="false"关闭检查,比如,测试时,有些服务不关心,或者出现了循环依赖,必须有一方先启动。另外,如果你的 Spring 容器是懒加载的,或者通过 API 编程延迟引用服务,请关闭check,否则服务临时不可用时,会抛出异常,拿到 null 引用,如果check="false",总是会返回引用,当服务恢复时
2021-10-09 08:03:49 90
原创 服务降级意思
1、服务降级什么是服务降级?当服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略的不处理或换种简单的方式处理,从而释放服务器资源以保证核心交易正常运作或高效运作。可以通过服务降级功能临时屏蔽某个出错的非关键服务,并定义降级后的返回策略。向注册中心写入动态配置覆盖规则:RegistryFactory registryFactory =ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveEx
2021-10-08 16:36:11 956
原创 查看文件信息
查看文件信息:lsls是英文单词list的简写,其功能为列出目录的内容,是用户最常用的命令之一,它类似于DOS下的dir命令。Linux文件或者目录名称最长可以有265个字符,“.”代表当前目录,“..”代表上一级目录,以“.”开头的文件为隐藏文件,需要用 -a 参数才能显示。语法说明命令名称:ls 命令英文原意:list 命令所在路径:/bin/ls 执行权限:所有用户 功能描述:显示目录文件语法:ls 选项[-ald] [文件或目录] -a 显示指定目录下所有子目录与文件,包括隐藏文件 -l
2021-10-07 16:49:52 537
原创 什么是Redis持久化?Redis有哪几种持久化方式?优缺点是什么
持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。 (Redis数据都放在内存中。如果机器挂掉,内存的数据就不存在。所以需要做持久化,将内存中的数据保存在磁盘,下一次启动的时候就可以恢复数据到内存中。) Redis 提供了两种持久化方式:RDB(默认) 和AOF 。RDB (快照): Redis可以通过创建快照来获得存储在内存里面的数据在某个时间点上的副本。Redis创建快照之后,可以对快照进行备份,可以将快照复制到其他服务器从而创建具有相同数据的服务器副本(Redis.
2021-10-06 15:54:47 444
原创 什么是缓存穿透?如何避免?什么是缓存雪崩?何如避免?
缓存穿透一般的缓存系统,都是按照key去缓存查询,如果不存在对应的value,就应该去后端系统查找(比如DB)。一些恶意的请求会故意查询不存在的key,请求量很大,就会对后端系统造成很大的压力。这就叫做缓存穿透。如何避免?1:对查询结果为空的情况也进行缓存,缓存时间设置短一点,或者该key对应的数据insert了之后清理缓存。2:对一定不存在的key进行过滤。可以把所有的可能存在的key放到一个大的Bitmap中,查询时通过该bitmap过滤3:也可以使用流行的bloom filter布隆过.
2021-10-05 19:18:51 94
原创 Redis支持的数据类型?
Redis支持的数据类型?String(字符串类型)String数据结构是简单的key-value类型,value其实不仅可以是String,也可以是数字。 常规key-value缓存应用;常规计数:微博数,粉丝数等。常用命令: set,get,incr,decr,mget 等:set key value 设置值、 get key 获取值、 incr key 加一、 decr key减一1常用命令: set,get,incr,decr,mget等:setkeyvalue设置值、ge...
2021-10-03 19:58:19 87
原创 第一个百度地图入门
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <title>第一个百度地图入门</title> <!-- 步骤 --> &l...
2021-10-02 17:56:33 85
原创 JVM面试
1.内存模型以及分区,需要详细到每个区放什么?JVM 分为堆区和栈区,还有方法区,初始化的对象放在堆里面,引用放在栈里面,class 类信息常量池(static 常量和 static 变 量)等放在方法区a、方法区:主要是存储类信息,常量池(static 常量和 static 变量),编译后的代码(字节码)等数b、堆:初始化的对象,成员变量 (那种非 static 的变量),所有的对象实例和数组都要在堆上分配c、栈:栈的结构是栈帧组成的,调用一个方法就压入一帧,帧上面存储局部变量表,操作数栈
2021-10-01 20:33:00 65
原创 zookeeper
1.ZooKeeper 是什么?ZooKeeper 是一个开放源码的分布式协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步 合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户。分布式应用程序可以基于 Zookeeper 实现诸如数据 发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。2.ZooKeeper 提供了什么?a、文件系统 b、通知机制3.Zookeeper 文件系统 Zoo
2021-09-30 12:42:52 60
原创 Redis存储系统
Redis存储系统1.什么是Redis? Remote Dictionary Server(Redis)是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key- Value 数据库,并提供多种语言的API。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列 表(list), 集合(sets) 和 有序集合(sorted sets)等类型。2.Redis的特点什么是?a、支持多种数据结构,如 string(字符串)、
2021-09-29 12:55:31 69
原创 2021-09-28
Linux系统1.绝对路径用什么符号表示?当前目录、上层目录用什么表示?主目录用什么表示? 切换目录用什么命令?a、绝对路径:如/etc/init.db、当前目录和上层目录:./ ../c、主目录:~/d、切换目录:cd2.怎么查看当前进程?怎么执行退出?怎么查看当前路径?a、查看当前进程:psb、执行退出:exitc、查看当前路径:pwd3.怎么清屏?怎么退出当前命令?a、清屏:clearb、退出当前命令:ctrl+c 彻底退出4.查看文件内容有哪些命令
2021-09-28 12:38:20 44
原创 shiro安全框架
1.shiro可以完成哪些工作? shiro可以帮助我们完成:认证、授权、加密、会话管理、与Web集成、缓存等2.Apache Shiro 的三大核心组件 a、Subject :当前用户的操作 b、SecurityManager:用于管理所有的Subject c、Realms:用于进行权限信息的验证3.shiro有哪些组件?a、Authentication:身份认证/登录,验证用户是不是拥有相应的身份;b、Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即
2021-09-27 13:18:37 55
原创 Servlet API中forward()与redirect()的区别?
3.Servlet API中forward()与redirect()的区别?a、从地址栏显示来说 forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览 器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址. redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.所以redirect等于客 户 端向服务器端发出两次request,同时也接受两次response
2021-09-26 13:25:15 68
原创 Servlet API中forward()与redirect()的区别
Servlet API中forward()与redirect()的区别a、从地址栏显示来说 forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览 器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址. redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.所以redirect等于客 户 端向服务器端发出两次request,同时也接受两次response。.
2021-09-25 13:03:14 85
原创 HashMap 和 Hashtable 的区别?
HashMap 和 Hashtable 的区别?a、线程是否安全: HashMap 是非线程安全的,HashTable 是线程安全的;HashTable 内部的方法基本都经过 synchronized 修饰。(如果你要保证线程安全的话就使用 ConcurrentHashMap 吧!);b、效率: 因为线程安全的问题,HashMap 要比 HashTable 效率高一点。另外,HashTable 基本被淘汰,不要在代码中使用 它;c、对Null key 和Null value的支持: HashMa
2021-09-24 08:17:56 91
原创 为 什 么 说 Synchronized 是 一 个 悲 观 锁 ?
为 什 么 说 Synchronized 是 一 个 悲 观 锁 ?乐 观 锁 的 实 现 原 理又 是 什 么 ?什 么 是 CAS, 它 有 什 么 特 性 ?a、Synchronized 显 然 是 一 个 悲 观 锁 , 因 为 它 的 并 发 策 略 是 悲 观 的 :不 管 是 否 会 产 生 竞 争 , 任 何 的 数 据 操作 都 必 须 要 加 锁 、 用 户 态 核 心 态 转换 、 维 护 锁 计 数 器 和 检 查 是 否 有 被 阻 塞 的 线 程 需 要 被 唤 醒 等
2021-09-23 07:57:46 1059
原创 struts2 的实现原理
struts2 的实现原理1、客户端初始化一个指向 Servlet 容器(例如 Tomcat)的请求2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做 ActionContextCleanUp 的可选过滤器,这个过滤器对于 Struts2 和其他框架的集 成很有帮助,例如:SiteMesh Plugin); 3、接着 FilterDispatcher 被调用,FilterDispatcher 询问 ActionMapper 来决定 这个请求是否需要调用某个 Action;4、
2021-09-22 08:28:39 81
原创 Hibernate 中的 HQL 和 criteria 的区别?
Hibernate 中的 HQL 和 criteria 的区别?1.QBC(Query by Criteria)查询对查询条件进行了面向对象封装,符合编程人员 的思维方式; 2.HQL(Hibernate Query Language)查询提供了更加丰富的和灵活的查询特性, 在涵盖 Criteria 查询的所有功能的前提下,提供了类似标准 SQL 语句的查询 方式,同时也提供了更加面向对象的封装;...
2021-09-21 14:07:26 144
原创 概述反射和序列化 和序列化的实现
概述反射和序列化Reflection 是 Java 被视为动态(或准动态)语言的一个关键性质。这个机 制允许程序在运行时透过 Reflection APIs 取得任何一个已知名称的 class 的内部 信息,包括其 modifiers(诸如 public, static 等等)、superclass(例如 Object)、 实现之 interfaces(例如 Cloneable),也包括 fields 和 methods 的所有信息,并 可于运行时改变 fields 内容或唤起 methods。本文
2021-09-20 14:44:13 154
原创 Struts 是怎么实现 MVC 的?
Struts 是怎么实现 MVC 的?Struts 提供 MVC 三层模式: MVC 就是 model view controller.1、view 视图层一般运用 jsp 或者 html 进行实现,展现给用户看;2、controller 控制层 struts 有个文件叫 struts-config.xml,该文件里面定义个 处理后的跳转页面; 3、model 模型层理解不深,可能是逻辑模型...
2021-09-19 11:49:16 333
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人