Fork me on GitHub
To the moon

A Coder,a Programmer,a Developer


  • Home

  • Tags

  • Categories

  • Archives

  • Search

消息队列笔记1

Posted on 2019-01-15 | Edited on 2023-05-09 | In Java+

0.知识图谱:

1. 分布式系统

1. 为什么要进行系统拆分?

2. 分布式服务框架

3. 分布式锁

4. 分布式事务

5. 分布式会话

Read more »

笔经整理1

Posted on 2019-01-15 | Edited on 2023-05-09 | In submission

Leetcode 笔试题1

题目来源:LeetCode

easy

1. Two Sum

Given an array of integers, return indices of the two numbers such that they add up to a specific target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

Example:

Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer> map = new HashMap<Integer, Integer>();
int[] result = new int[2];
for(int i=0;i<nums.length;++i){
if(map.containsKey(nums[i])){
result[0] = map.get(nums[i]);
result[1] = i;
return result;
}else{
map.put(target - nums[i],i);
}
}
return result;
}
Read more »

面经整理5

Posted on 2019-01-11 | Edited on 2023-05-09 | In interview

1. spring事务写在哪一部分,为什么不写在DAO,Controller层

事务写在Service层。

  1. 为什么不在DAO层?

    • 在数据库中,所谓事务是指一组逻辑操作单元即一组sql语句。当这个单元中的一部分操作失败,整个事务回滚,只有全部正确才完成提交。
    • 如果放在了DAO层,每一次增删改查都将提交一次事务,那么事务的一致性就会被破坏。
    • 一般在Service的一处可以调用DAO层的多处,所以只要添加一处事务注解@Transactional,这样才能体现事务的特性。
  2. 为什么不在Controller层?

    • 不推荐,但是事实上可以实现把事务放在Controller层。
    • 一般不会将事务放在Controller层,而且直接放是会报404错误的(因为SpringMVC和Spring是两个不同的容器)。application.xml中应该负责扫描除@Controller的注解如@Service,而SpringMVC的配置文件应该只负责扫描@Controller,否则会产生重复扫描导致Spring容器中配置的事务失效。
Read more »

面经整理4

Posted on 2019-01-05 | Edited on 2023-07-26 | In interview

1. Spring是怎么避免循环依赖的

循环依赖的问题:在DI时,如果有两个 class 类,都在 xml 文件中配置,但是如果 classA 是 classB 的属性,classB 同时也是 classA 的属性,那么该怎么处理呢?究竟先注入哪一个呢?

Spring是如何避免循环依赖的?

  • 答:Spring基于Java的引用传递,我们获取到对象的引用时,对象的field或者属性是可以延后设置的。但Spring避免循环依赖有一个前提:那就是循环依赖不能发生在构造器中。

Spring 的单例对象的初始化主要分为三步:

  1. createBeanInstance实例化;
  2. populateBean填充属性;
  3. InitializeBean初始化。

循环依赖就是两个对象(设为A,B)在①②步时发生冲突的。

Spring使用了一个叫singletonFactories的三级cache机制,让本该发生A-B-A循环依赖中的B走到第①步时,可以拿到A(虽然A此时并不完整,仅走了①②两步),但足以让B能够走完剩下的②③步。B完成后,A可以继续完成自己的第③步。

Read more »

各个设计模式间的区别和联系

Posted on 2019-01-05 | Edited on 2023-05-09 | In notes

23 种传统的设计模式分类

创建型:

如何创建对象的模式,抽象了实例化的过程。
将创建对象的过程进行了抽象和封装,作为客户程序仅仅需要去使用对象,而不再关心创建对象过程中的逻辑。

  1. 工厂方法;
  2. 抽象工厂;
  3. 建造者;
  4. 原型;
  5. 单例;
Read more »

[转]多态的底层实现原理

Posted on 2019-01-04 | Edited on 2023-05-09 | In notes

[转载]原文地址:Java技术——多态的实现原理
1.Java多态概述

Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但可具有不同的参数列表、返回值类型。调用方法时通过传递的参数类型来决定具体使用哪个方法,这就是多态性。

Java的方法重写,是父类与子类之间的多态性,子类可继承父类中的方法,但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。重写的参数列表和返回类型均不可修改。

Read more »

设计模式一揽子

Posted on 2019-01-04 | Edited on 2023-05-09 | In notes

推荐阅读:设计模式 菜鸟教程

代理模式

场景:

远程代理:为一个对象在不同的地址空间提供局部代表。
虚代理:根据需要创建开销很大的对象。
保护代理:控制对原始对象的访问。保护代理用于对象应该有不同访问权限的时候。
智能指引:取代了简单的指针,它在访问对象时执行了一些附加操作,如下:

  • 对指向实际对象的引用计数,这样当该对象没有引用的时候,可以自动释放它。
  • 当第一次引用一个持久对象时,将它装入内存。
  • 在访问一个实际对象前,检查时候已经锁定了它,以确保其他对象不能改变它。
Read more »

分布式系统之time clock ordering

Posted on 2018-12-31 | Edited on 2023-05-09 | In notes

参考阅读:
分布式系统理论基础 - 时间、时钟和事件顺序
分布式系统的时间
分布式系统一致性的发展历史
分布式系统一致性的发展历史(一)

时间、时钟和事件顺序

  • 分布式系统使用逻辑时钟记录事件顺序关系。
    • 采用物理时钟,在分布式系统中仍然会有毫秒级别的偏差。

Lamport timestamps

每个事件对应一个Lamport时间戳,初始值为0
如果事件在节点内发生,时间戳加1
如果事件属于发送事件,时间戳加1并在消息中带上该时间戳
如果事件属于接收事件,时间戳 = Max(本地时间戳,消息中的时间戳) + 1

偏序关系 partial order,如下图方框内的编号:

Read more »

类加载机制笔记

Posted on 2018-12-22 | Edited on 2023-05-09 | In notes

1. 六种主动使用类的场景

按照 JVM 规范,每个类或者接口被 Java 程序首次主动使用时,才会对其进行初始化。

以下六种操作会导致类的初始化,除了这六种,其他情况都属于被动使用,不会导致类的加载和初始化。

  1. 通过 new 关键词。
  2. 访问类的静态变量(但 final 修饰的静态变量实质上是静态常量,不属于此范畴,不会初始化类)。
  3. 访问类的静态方法。
  4. 对类进行反射操作。
  5. 初始化子类会导致父类的初始化。
  6. 启动类。也就是 main 函数所在的类会被初始化。
Read more »

HTTP-1-1

Posted on 2018-12-19 | Edited on 2023-05-09 | In java

推荐阅读:HTTP1.0 HTTP1.1 HTTP2.0 主要特性对比

比较 HTTP1.0 、HTTP1.1、 HTTP2.0

共同点:

  1. 都是应用层协议,基于 TCP/IP 协议。
  2. 无状态
HTTP1.0 HTTP1.1 HTTP2.0
特点 无连接、队头阻塞 长连接、管道化、缓存处理 二进制分帧、多路复用、头部压缩、服务器推送
Read more »
1…789…15

Harrison Lee / Email (harrisonli60@163.com)

It is never too late to learn a new skill, even a challenging one.

150 posts
21 categories
32 tags
© 2025 Harrison Lee / Email (harrisonli60@163.com)
Powered by Hexo v6.3.0
|
Theme – NexT.Mist v7.0.0
|