- 博客(30)
- 收藏
- 关注
原创 Redis
Redis的数据结构:String,List,Hash,Set,ZSet字符串键值对 hash表:(本质上是一个双向链表---->可以变成是一个消息队列),比如twitter的关注列表,粉丝列表等都可以用Redis的list结构来实现。:set是可以自动排重的,提供了求交集、并集、差集等操作,可以非常方便的实现如共同关注、共同喜好、二度好友等功能。内部实现的是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。
2023-09-06 14:09:36 61
原创 字符串------剑指offer50,53
/ 若没有s1中的字符 map.getOrDefault(s1.charAt(i), 0) 就是0,整行代码意思是,对map中添加键值对(s1,1);// 若没有s1中的字符 map.getOrDefault(s1.charAt(i), 0) 就是0,整行代码意思是,对map中添加键值对(s1,1);// 若有s1中的字符就是在原有值上-1,即map在原有键值对上修改为(s1,原有值-1);s 只包含小写字母。// 若有s1中的字符就是在原有值上+1,即map在原有键值对上修改为(s1,原有值+1);
2023-04-24 19:53:47 79
原创 程序员面试金典------->链表指针问题
链表的基本思维是,利用结构体的设置,额外开辟出一份内存空间去作指针,它总是指向下一个结点,一个个结点通过NEXT指针相互串联,就形成了链表。相比起数组,链表解决了数组不方便移动,插入,删除元素的弊端,但相应的,链表付出了更加大的内存牺牲换来的这些功能的实现。但是,但是,数组最大的缺点就是我们的插入和删除时需要移动大量的元素,所以呢,大量的消耗时间,以及冗余度难以接受了。数组作为一个顺序储存方式的数据结构,可是有大作为的,它的灵活使用为我们的程序设计带来了大量的便利;本题相对原题稍作改动。
2023-04-21 19:43:54 85
原创 【无标题】
JDK1.8,首先他是数组+链表+红黑树的结构,默认长度是16,负载因子是0.75,扩容为原来的两倍(即将达到负载因子时),采用的是尾插法,可以有一个空键和多个空值。在HashMap刚创建时,不会初始化,当第一次调用put()方法时,会调用putVal()方法,来执行resize()方法,对数组进行初始化扩容,调用put()方法时,首先将K,V值存入Node节点,然后调用HashCode()方法计算hash值,然后判断是否数组hash值是否为空,若为空直接放入;若不为空,key值相等直接替换value;
2023-04-20 16:09:26 76
原创 NIO模型
NIO(Non-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞的I/O模型,也是I/O多路复用的基础,成为解决高并发与大量连接、I/O处理问题的有效方式。
2023-04-17 14:51:19 95
原创 程序员面试金典(01.09/02.01)字符串轮转/移除重复节点
2、是为了方便单链表的特殊操作,能有效减少代码量,在插入在表头或者删除第一个结点时不用考虑特殊情况,删除或插入用户的第一个节点的值和删除或插入中间的值用一样的代码,这样就保持了单链表操作的统一性!3、单链表加上头结点之后,无论单链表是否为空,头指针始终指向头结点,因此空表和非空表的处理也统一了,方便了单链表的操作,也减少了程序的复杂性和出现bug的机会。1、防止单链表是空的而设的,当链表为空的时候,带头结点的头指针就指向头结点,如果当链表为空的时候,单链表没有带头结点,那么它的头指针就为NULL。
2023-04-17 14:50:22 37
原创 Redis----->NOSQL数据库(3)
布隆过滤器的作用是某个 key 不存在,那么就一定不存在,它说某个 key 存在,那么很大可能是存在(存在一定的误判率)。哨兵模式是一种特殊的模式,Redis 为其提供了专属的哨兵命令,它是一个独立的进程,能够独立运行。,发现也没有,于是本次查询失败,当用户很多的时候,缓存都没有命中,于是都去请求了持久层数据库,这会给持久层数据库造成很大的压力,出现缓存穿透。是一个热点的Key,有大并发集中对其进行访问,突然间这个Key失效了,导致大并发全部打在数据库上,导致数据库压力剧增。
2023-04-16 18:12:38 45
原创 程序员面试金典(01.06/01.05)
思路:首先插入和删除只是对一个字符进行操作,那么两个字符串相减(大-小)--->1,那么就可以定义一个方法,两者同时遍历比较。所以当出现大减小--->大于1的时候,才能停止比较。(2)先取到第一个然后和之后的每一个进行比较,然后如果不相等就进行拼接,并且把统计的标识符重新赋为1。然后将要比较的c--->改为当前比较的值,然后接着比较。思路:因为要动态的添加所以我采用StringBuilder---->速度快,可更改(内存利用率高)利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。
2023-04-15 21:21:15 92
原创 Redis------->NOSQL数据库(二)
4、明星、网红的粉丝列表、某条热点新闻的评论列表 假设我们使用List数据结构保存某个明星/网红的粉丝,或者保存热点新闻的评论列表,因为粉丝数量巨大,热点新闻因为点击率、评论数会很多,这样List集合中存放的元素就会很多,可能导致value过大,进而产生Big Key问题。Redis的核心线程是单线程,单线程中请求任务的处理是串行的,前面的任务完不成,后面的任务就处理不了。另外最重要的是,在获取某个键时,如果某个键的过期时间已经到了,但是还没执行定期删除,那么就会返回这个键的值,这是业务不能忍受的错误。
2023-04-15 11:04:35 105
原创 Spring技术(一)
我们之前在没接触框架之前,都是Web层,调用Service层,最后调用dao层。那么这样写出的程序,各层之间会有很强的依赖关系(高耦合),一旦改动,整个程序都要改动,对开发人员造成不便,同时也会编写出大量的代码,拖慢开发进度。Spring优势:方便解耦,简化开发;Spring是分层的JavaSE/EE应用full-stack轻量级开源框架。UserWeb层:创建spring容器 只创建一次就可以了。UserService层:通过依赖注入来调用dao层。那么为什么说Spring技术能够解耦呢?
2023-04-15 10:58:39 40
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人