Fork me on GitHub
To the moon

A Coder,a Programmer,a Developer


  • Home

  • Tags

  • Categories

  • Archives

  • Search

Redis专题

Posted on 2019-02-18 | Edited on 2023-05-09 | In interview

Redis 专题

1. 为什么要用 redis 而不用 map/guava 做缓存,Redis 跟 Memcached 的区别

  1. 因为缓存分为本地缓存和分布式缓存,map/guava 属于本地缓存,Redis/Memcached 属于分布式缓存。
  2. 本地缓存特点:轻量、快速,生命周期随 JVM 销毁而结束;在多实例下,每个实例保存着独立的缓存,相互不一致。
  3. 分布式缓存特点:在多实例下,各实例共用一份缓存,具有一致性;要维护分布式服务高可用,程序架构复杂。

Redis 与 Memcached 区别:

  1. Memcached 是多线程,非阻塞 IO 复用的网络模型;Redis 是单线程,多路 IO 复用的网络模型。

  2. Memcached 只支持 String 类型;Redis 支持更丰富的数据类型(主要五种,String、hash、list、set、zset)。

    [官网] It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes with radius queries and streams

  3. Memcached 将数据全部存在内存中;Redis 支持数据的持久化。

  4. Memcached 没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据;Redis 是原生支持 Cluster 模式的。

Read more »

笔经整理2

Posted on 2019-02-17 | Edited on 2023-05-09 | In submission

题目来源:牛客网

1. [编程题] 连续最大和

时间限制:1秒
空间限制:32768K

一个数组有 N 个元素,求连续子数组的最大和。 例如:[-1,2,1],和最大的连续子数组为[2,1],其和为 3

输入描述:
输入为两行。 第一行一个整数n(1 <= n <= 100000),表示一共有n个元素 第二行为n个数,即每个元素,每个整数都在32位int范围内。以空格分隔。

输出描述:
所有连续子数组中和最大的值。

输入例子1:

3 -1 2 1

输出例子1:

3

Read more »

SSM框架整合说明

Posted on 2019-02-16 | Edited on 2023-05-09 | In interview

SSM 框架整合的思路

1. Dao 层

  1. 使用mybatis框架。创建SqlMapConfig.xml(Mybatis 的全局配置文件),如下:
1
2
3
4
5
6
7
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

</configuration>
Read more »

消息队列笔记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 »
1…789…16

Harrison Lee / Email (harrisonli60@163.com)

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

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