- 作用不同;前者的作用是为了提供一个默认配置,从而简化配置过程;后者的作用是为了给微服务提供一个综合管理框架。2. 使用方式不同;前者可以单独使用;springcloud必须在springboot使用的前提下才能使用。
springboot和springcloud都是从spring生态圈中衍生出来的软件开发框架,但是二者的创作初衷是完全不同的,springboot的设计目的是为了在微服务开发过程中可以简化配置文件,提高工作效率,而springcloud的设计目的是为了管理同一项目中的各项微服务,因此二者是完全不同的两个软件开发框架。
@SpringBootApplication是一个组合注解,它整合了@Configuration、@EnableAutoConfiguration和@ComponentScan注解,并开启了Spring Boot程序的组件扫描和自动配置功能。
Eureka 每隔一段时间向注册中心同步一次心跳,更新上下线及其他服务状态信息
可以采用多个实例来保证服务的高可用性和负载均衡。可以通过使用服务注册与发现机制,如Eureka、Consul等来进行服务的注册与发现,同时结合负载均衡算法(如轮询、随机、加权轮询等)来分配请求。此外可以使用断路器(如Hystrix)来避免因服务实例挂掉或响应时间过长时对整个系统造成影响。在配置多个实例时,还需考虑实例间的通信问题和数据同步问题。
Retry+Hystrisx
用的ribbon(轮询、随机、加权轮询)
消费过的加pg/redis,消费时先判断是否消费过;成功消费后提交offset
- 简单队列模型(单消费者/生产者 消费完删除 优缺点:简单;不支持多个消费者并发消费;)
- 工作队列模型(单生产者多消费者平均干活 优缺点:消费负载均衡可实现更高吞吐量;无法根据消息优先重要等级去处理;)
- 发布/订阅模型(都收到广播 优缺点:支持广播发布和订阅,无法动态路由;)
- 路由模型(支持基于路由键的动态路由 优缺点:可根据高优先级动态去发送队列;需要提前配置好交换机和队列的绑定关系)
- 主题模型(支持更灵活、更具体的消息路由和过滤。优缺点:灵活;配置化更复杂)
- 工厂模式(一堆创建类工厂的方法,不暴露类的细节 BeanFactory)
- 单例模式(对象 实例,保证一个对象只创建一个实例)
- 代理模式(SpringAOP 动态代理)
- 原型模式(复制一个类)
- 策略模式
- 适配器模式
- 观察者模式
- 模板模式
Java Virtual Machine,核心组件,解释和执行Java字节码。编译一次,实现了Java的跨平台;
jvm垃圾回收机制采用的时分代回收思想,将内存区域划分为新生代和老年代。新生代又分为伊甸区和幸存区,幸存区又由大小相等的两个区组成。刚建立的对象会处于伊甸区,然后会经过GC进入幸存区1,再一次GC如果还没被清理,就会进入幸存区2.如果幸存区2.中再经历过GC还没被清理,又会进入幸存区1.在幸存区之间没转变一次。对象的年龄就会加一。当年龄达到15后会进入老年代。
ElasticSearch:分布式实时的存储文件系统、搜索引擎、分布式、可拓展、TB级别的结构化/非结构化数据;倒排索引(分词);Cluster、Node、Shards、Replica;
内存中的数据结果存储系统;
是一个比较好的开头;自我介绍 or 项目介绍 or 问答
面试官逻辑思维能力很好,很谦逊。面试过程比较愉快,或者技术,或者提问的问题,都比较亲和。当然也问了我技术问题等,不是很深入的,一些我也没能回答上来。
脏读(A读到了B未提交的)、幻读(读取已提交内容,范围读取,在同一个事务内相同的条件(age > 10)多次读取到的数据量不一致。)、不可重复读(同一个事务内,相同的条件(age = 10)多次读取的数据结果不一致。)
CAP(Consistency、Avaliability、Partition Tolerance) 关系型数据库CA;跨行转账CP;NoSql数据库AP;
在分布式系统中,AP的应用是比较多的,即保证系统的可用性和分区容忍性,牺牲数据的强一致性(写操作后立即读取新数据),保证数据的最终一致性。比如:订单退款、今日退款成功、明日到账等等。
ArrayList 结构,扩容后怎么实现的,有没有list是线程安全的
Collections.synchoronizedList()
Collections.copyOnWriteArrayList
CopyOnWrite VS Vector
在 get() 操作上,Vector 使用了同步关键字,所有的 get() 操作都必须先取得对象锁才能进行。在高并发的情况下,大量的锁竞争会拖累系统性能。反观CopyOnWriteArrayList 的get() 实现,并没有任何的锁操作。
在 add() 操作上,CopyOnWriteArrayList 的写操作性能不如 Vector,原因也在于Copy-On-Write,写入时不止加锁,还使用了Arrays.copyOf()进行了数组复制,性能开销较大,遇到大对象也会导致内存占用较大。
在读多写少的高并发环境中,使用 CopyOnWriteArrayList 可以提高系统的性能,但是,在写多读少的场合,CopyOnWriteArrayList 的性能可能不如 Vector。
经验、交流、积累
分块–大框架—每一个点
吃透每一个点—自己编织一张网
偏技术太久——像业务靠近的重要性;
从客户出发,市场需求价值,多思考 & 本质是否赚钱——来自东哥的,感觉也挺不错的,是个切入点。
zip包免生成文件直接封装二进制流(文件跨路径校验,文件个数超多校验,文件大小超大校验等)
Java 8新特性:try-with-resources 文件流自动关闭;
匿名函数,把函数作为参数传递给方法;代码简洁度;
封装继承多态(encapsulation,inherits、polymorphism)
也可以说是4层,(从上到下)包括了应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
进程是操作系统分配资源的基本单位;线程是操作系统调度的基本单位;
一个进程内有多个线程,进程内多个线程共享资源;进程调度更耗资源时间等;线程调度更方便;
select、update、delete/drop、insert
\d+ \w+
都是子类与父类间,重载(参数个数、类型、排列顺序)
对象内引用对象的复制与否,深拷贝:改变新对象原对象不受影响;浅拷贝原对象值也改变;
java8 try-with-resources自动关闭;
Function 匿名函数,flatMap reduce groupingBy
404 200 502
文件返回格式,application/json、protobuf、ostream
mv cp tree grep awk ls tail head
vim操作文件命令:vi Insert : wq等