avatar
文章
69
标签
12
分类
11

随便寻个地方'Blog

随便寻个地方'Blog

Golang中的闭包,你真的了解吗?
发表于2024-06-20|Go语言
Go 语言从设计上对函数进行了优化和改进,让函数使用起来更加方便。 因为Go语言的函数本身可以作为值进行传递,既支持匿名函数和闭包,又能满足接口,所以 Go 语言的函数属于一等公民。 本文将由一道题引出 Go 中的闭包。这是 Go 语言爱好者周刊第 90 期的一道题目。以下代码输出什么? 12345678910111213141516171819package main import "fmt"func app() func(string) string { t := "Hi" c := func(b string) string { t = t + " " + b return t } return c}func main() { a := app() b := app() a("go") fmt.Println(b("All"))} 思考一下,这里会输出什么,如果再加上一行代码 fmt.Println(a("A ...
腾讯面试——血与泪的教训(二)
发表于2024-06-19|杂
没想到啊,这个标题下的内容还能成为连续剧。 我终于明白我为什么找不到实习了,给我机会我不中用,我哭死,腾讯不愧是大公司,还给了我第四次面试机会,结果我还是没有把握住。有三分之一的问题没有回答出来,结果几乎全是之前就已经看过但是只是扫了一眼或者压根就只是躺在我的收藏夹里没动过。 还是借此机会,拾起来重新学吧。 今天的面试问题主要集中在两个方向,Go 语言基础的知识和数据库的一些底层内容。 Golang中哪些不能作为map类型的key?在 Go 语言中,map 的 key 可以是任意使用 == 或 != 运算符进行比较的类型。这意味着一下类型可以作为 map 的键: 基本类型:int、float、bool、string 接口类型 指针类型 数组类型(数组中的元素必须是能作为键的类型) 然而,以下类型不能作为 map 的键: slice map function 包含上述类型的结构体 这是因为 slice、map 和 function 等类型的值不是固定的(它们在内存中的表示可能会改变),因此不能用于比较。例如,两个包含相同元素的 slice 在使用 == 运算符进行比较时会产生编 ...
Java八股文——基础篇(三)
发表于2024-06-19|Java?Java!!!
今天是 Java 基础八股文的第三篇,本文内容包括异常、泛型、反射、注解、SPI、I/O等,内容很杂也是一些重要内容,一两个问题讲不清的后面还是要单独来学习吧。 异常Java 异常类层次结构图概览: Exception 和 Error 有什么区别在 Java 中,所有的异常都有一个共同的祖先 java.lang 包中的 Throwable 类。 Throwable 有两个重要的子类: Exception :程序本身可以处理的异常,可以通过 catch 来进行捕获。Exception 又可以分为 Checked Exception (受检查异常,必须处理) 和 Unchecked Exception (不受检查异常,可以不处理)。 Error:Error 属于程序无法处理的错误 ,不建议通过catch捕获 。例如 Java 虚拟机运行错误(Virtual MachineError)、虚拟机内存不够错误(OutOfMemoryError)、类定义错误(NoClassDefFoundError)等 。这些异常发生时,Java 虚拟机(JVM)一般会选择线程终止。 Checked Exc ...
Redis缓存那些坑:击穿、穿透、雪崩与数据一致性
发表于2024-06-18|Redis
又是这几个老生常谈的问题,在正式开始学习 Redis 之前,我就知道这几个问题,在无数个老哥的面试经验里面看到过这四个问题,让我一直觉得在简历上写熟悉 Redis 就只需要准备这几个问题就行了,但是实际上好像并没有面试官会问这几个问题,至少对我来说是这样的。 在之前的博客里面也大概讲过前三个问题,但是当时就是把别人写的八股文给复制下来了,今天还是想要在重新记录一下。 Redis 三兄弟用户的数据一般都是存储于数据库,数据库的数据是落在磁盘上的,磁盘的读写速度可以说是计算机里最慢的硬件了。 当用户的请求,都访问数据库的话,请求数量一上来,数据库很容易就奔溃的了,所以为了避免用户直接访问数据库,会用 Redis 作为缓存层。 因为 Redis 是内存数据库,我们可以将数据库的数据缓存在 Redis 里,相当于数据缓存在内存,内存的读写速度比硬盘快好几个数量级,这样大大提高了系统性能。 引入了缓存层,就会有缓存异常的三个问题,分别是缓存雪崩、缓存击穿、缓存穿透。 这三个问题也是面试中很常考察的问题,我们不光要清楚地知道它们是怎么发生,还需要知道如何解决它们。 缓存雪崩通常我们为了保证缓存中 ...
红黑树是什么?——一个“清朝”的遗留问题
发表于2024-06-17|杂
今天来学我们的老朋友——红黑树。为什么今天的标题透着一股诡异的气息,清朝的遗留问题,其实是笔者从大一就开始说要去学一直到现在都没学的一个知识点。 为什么最近突然想起来这个老朋友了?最近 Java 的基础知识也学得差不多了,所以开始看一些 Java 的集合框架,学的过程中我又看到了这个老朋友。做事实在是太拖拉了,都两年多了才开始学一些基础的东西,被秒挂也不是什么稀奇事了。 红黑树为什么必须掌握?来看看,红黑树的广泛的应用 JDK 1.8开始,HashMap也引入了红黑树:当冲突的链表长度超过8时,自动转为红黑树 Java中,TreeMap、TreeSet都使用红黑树作为底层数据结构 Linux底层的CFS进程调度算法中,vruntime使用红黑树进行存储。 多路复用技术的Epoll,其核心结构是红黑树 + 双向链表。 面试过程中,HashMap 常常是面试的重点, 而且会以连环炮 的方式进行发问, 所以, 红黑树基本是 面试必须的 要点, 如果 答不上来,面试就有 很大程度 就黄了。笔者就有相似的经历,被面试官突然提起的红黑树硬控了几秒,回忆起三年前的青葱岁月(bushi)。 红黑树 ...
如何设计一个秒杀系统
发表于2024-06-17|技术剖析
秒杀活动是指网络商家为促销等目的组织或网上限时抢购活动,这种活动具有瞬时并发量大、库存量少和业务逻辑简单等特点。设计一个秒杀系统需要考虑的因素很多,比如对现有业务的影响、网络带宽消耗以及超卖等因素。 选择学习这部分内容主要是因为秒杀、抽奖这些实际开发中会遇到的问题是面试的高频问题,而且整个设计过程确实涉及了很多方面的内容。本文会讨论秒杀系统的各个环节可能存在的问题以及解决方案。 概述秒杀系统设计是国内系统设计面试的高频题,在面试中,你需要分析架构的瓶颈,潜在问题以及不同方案的优缺点,在本文的最后我们会提到这些面试技巧。开始之前,你需要了解如何设计一个基础的电商系统,秒杀系统只是在电商系统上增加了一些特定条件。现在的电商系统功能繁多,除了最基本的购买商品功能,还有物流跟踪,订单管理,社区交互等功能。不过面试中关注的主要是购买商品功能,我们将其他次要功能归类为其他业务功能,购买商品流程如下: 客户通过客户端下单 如果下单成功则进入支付阶段,否则返回购买失败 进入支付阶段后,如果在一定时间内支付成功则返回购买成功,否则返回购买失败 从0到1000想象你自己从零搭建一个电商平台,一开始平 ...
Redis高可用宝典:三招搞定你的数据堡垒
发表于2024-06-13|Redis
软件开发通常会提到一个名词 “三高”,即高并发、高性能、高可用。 具体的指标定义,如:高并发方面要求QPS 大于 10万;高性能方面要求请求延迟小于 100 ms;高可用方面要高于 99.99%。 在前面学习 Redis 时,我们也可以看出 Redis 已经实现了前两个“高”。今天,我们就来看一下 Redis 是否实现了第三个“高”——高可用。 什么是高可用?高可用(High Availability,即HA),指的是通过尽量缩短日常维护操作和突发的系统崩溃所导致的停机时间,以提高系统和应用的可用性。一个业务系统如果全年无一时刻不在提供服务,它的可用性可达100%。那么什么样的系统可以称之为高可用呢,业界一般用几个九来衡量系统的可用性,当系统运行时间达到4个九即99.99%时的系统为高可用的,全年宕机时间为52分钟左右。 高可用一般来说有两个含义:一是数据尽量不丢失,二是保证服务尽可能可用。 AOF 和 RDB 数据持久化保证了数据尽量不丢失,而多节点来保证服务尽可能提供服务。单个节点的系统缺点明显,一旦发生故障会导致服务不可用。而且,单个节点处理所有的请求,吞吐量有限,容量也有限。 ...
Java八股文——基础篇(二)
发表于2024-06-12|Java?Java!!!
今天是 Java 基础常见八股文的第二篇,主要内容是关于面向对象的,非常重要,一点一点来看吧。 面向对象基础面向对象和面向过程的区别? ⾯向过程 :面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的一次调用就可以。 ⾯向对象 :面向对象,把构成问题的事务分解成各个对象,而建立对象的目的也不是为了完成一个个步骤,而是为了描述某个事件在解决整个问题的过程所发生的行为。 目的是为了写出通用的代码,加强代码的重用,屏蔽差异性。 用一个比喻:面向过程是编年体;面向对象是纪传体。 面向对象编程有哪些特性?面向对象编程有三大特性:封装、继承、多态。 封装:封装是指将数据(属性,或者叫字段)和操作数据的方法(行为)捆绑在一起,形成一个独立的对象(类的实例)。 封装是把一个对象的属性私有化,同时提供一些可以被外界访问的方法。 继承:继承允许一个类(子类)继承现有类(父类或者基类)的属性和方法。以提高代码的复用性,建立类之间的层次关系。 同时,子类还可以重写或者扩展从父类继承来的属性和方法,从而实现多态。 多态:多态允许不同类的对象对同一消息做出响 ...
Redis事件机制:高效运行的秘密武器
发表于2024-06-12|Redis
对,没错,这又是一篇讲为什么 Redis 如此之快的文章。不过这次的内容于上一篇文章不一样,本文将聚焦在 Redis 的事件机制的基础概念和实现,不在过多提及它对 Redis 速度的影响。 我在之前的文章中多次提过,Redis 是单线程的,你是否想过,一个线程要如何处理来自各个客户端的各种请求呢?它忙的过来吗? 了解 Redis 的都知道,它不光忙得过来,还做的井井有条。其中就多亏了 IO 多路复用,不仅仅是它,事件机制在其中也是一个不错的设计。 关于 IO 多路复用,我们在之前的文章中也提到过很多次了,所以这里就只聚焦在 Redis 的事件机制上。 如果是你,会怎么做?让我们来设计一个 redis,我们要怎么处理请求连接呢? 最笨的方法,那就是来一个客户端就 accept 一次,然后有什么请求就做什么事,先来先做。显然,这样做别说一个线程了,就算有十个线程都不够用的,太慢了。 我们还可以这样设计,来一个我就单独开设一个线程处理它,相当于你一来我就单独找一个人为你服务,而服务的人最终会将请求给到一个处理中心,让处理中心统一去处理,然后将结果返回。但显然 Redis 没有那么多资源让你浪 ...
Redis消息队列:你的数据,随时待命
发表于2024-06-11|Redis
现如今的互联网应用大多是采用分布式系统机构设计的,所以消息队列已经逐渐成为企业应用系统内部通信的核心手段,它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能。 当前使用较多的 消息队列 有 RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMQ 等,而部分数据库如 Redis、MySQL 以及 phxsql ,如果硬搞的话,其实也可实现消息队列的功能。 可能有人觉得,各种开源的 MQ 已经足够使用了,为什么需要用 Redis 实现 MQ 呢? 有些简单的业务场景,可能不需要重量级的 MQ 组件(相比 Redis 来说,Kafka 和 RabbitMQ 都算是重量级的消息队列) 那你有考虑过用 Redis 做消息队列吗? 这一章,我会结合消息队列的特点和 Redis 做消息队列的使用方式,以及实际项目中的使用,来探讨下 Redis 消息队列的方案。 消息队列是什么?消息队列是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。 通过提供消息传递和消息排队模型,它可以在分布式环境下提供 应用解耦、弹性 ...
1234…7
avatar
随便寻个地方
最近在做博客重建,有些乱,请见谅……
文章
69
标签
12
分类
11
Follow Me
公告
This is my Blog
最新文章
无题2025-03-07
无题2025-03-04
无题2025-03-04
顺序存储两兄弟——数组和切片,到底有什么区别?2024-11-07
了解基础数据类型2024-10-24
分类
  • Go语言22
  • Hello,算法!1
  • Java?Java!!!4
  • MongoDB1
  • MySQL1
  • Redis13
  • 分布式系统5
  • 技术剖析2
标签
学习周报 随想 计算机网络 深入理解Go语言 Java学习指北 Go语言库 求职必备 算法 面试经验 项目开发 数据库 八股文
归档
  • 三月 20253
  • 十一月 20241
  • 十月 20247
  • 七月 20243
  • 六月 202430
  • 五月 20246
  • 四月 20248
  • 三月 20248
网站资讯
文章数目 :
69
本站访客数 :
本站总访问量 :
最后更新时间 :
©2020 - 2025 By 随便寻个地方
框架 Hexo|主题 Butterfly