0%

准备 & 开发

打工仔谁不想整点副业,整点睡后收入呢? 虽然很早之前就知道淘宝客的模式,但是懒并且知道主要是推广难。所以一直也没有去弄,最近时间比较多,就还是决定整它一整。做好决定后我就开始准备相关的东西了。其实事情不多,主要有如下一些准备工作

  • 成为淘宝客
    • 去淘宝开放平台申请成为淘宝客,淘宝客分三个等级 低级 - 中级 - 高级。 对应的佣金会不一样。可以直接花钱找人刷到高级
  • 服务器
    • 整它一个服务器,这边用的是腾讯云。因为还有新用户资格。省不少钱!! 三年才三百!腾讯云活动
  • 营业执照
    • 因为要对接微信支付,所以需要企业资质。但是个体户也 OK。所以要提前准备好。如果在深圳的话,全程线上办理就 OK。不要在网上找什么代办!!!! 个体工商户办理流程
  • 申请公众号/小程序

相关技术调研。直接从简,使用的是如下技术/开源组件:

  • Vant
  • Spring Boot
  • Spring JPA
  • MySQL
阅读全文 »

@[toc]

该篇 Chat 会通过在段落的一开始引入一个或多个面试问题,然后围绕着该问题对对应的技术做介绍说明,最后在段落的最后会提供一个回答示例来结束这以问题。回答示例是基于笔者自己的经验的,读者可以结合自己的实际情况整理个更好的回答,可以的话在评论中展示出来让更多的同学参考学习。另外,通常面试题上下之间会有关联,是一个渐进的过程。类似面试过程中的由浅入深。

消息中间件简介

面试题:为什么你的系统中需要引入消息中间件?

消息中间件是指一种在需要进行网络通信的系统进行通道的建立,数据或文件发送的中间件。消息中间件的一个重要作用是可以跨平台操作,为不同操作系统上的应用软件集成提供便利。

现在越来越多的分布式应用系统采用消息中间件方式来构建,人们通过使用消息中间件把应用扩展到不同的操作系统和不同的网络环境。基于消息的机制更适用于由事件驱动的应用,当一个事件发生时,消息中间件通知服务方应该进行如何操作。

通常,它具有低耦合、可靠投递、广播、流量控制、最终一致性 等一系列功能。这也是系统引入消息中间件的一般理由。

比如说:

  1. 两个系统需要信息交互,但是各自所在的平台不同或使用的开发语言不同;
  2. 有时系统的瞬时流量过大,系统处理不来,需要先接收请求留待后续满满处理;
  3. 系统中的部分业务可以异步交给其他的系统去处理(eg. 邮件,短信等事件通知)。
阅读全文 »

场景

延时任务的需求是非常常见的,在我们的开发生涯中,我相信大部分研发人员是会有接触到这一块的。其中,我们在现实生活中比较常接触到的场景有

  • 下单后未付款通知
  • 订单延迟生成短信通知
  • 红包未领取退款通知
  • 用户行程将近通知
  • 微信公众号的文章延时发布推送等

常规模块

  • 存储
    主要负责存储任务的相关信息,比如任务执行所需要的相关信息,执行时间,重试次数等

  • 调度
    负责时间的调度,判断任务是否到达可执行

  • 执行
    负责任务的实际执行

    在非分布式的情况下,通常这三者是出现在同一个应用内部的;但如果是在分布式系统架构中,那么存储、执行和调度通常是分开的,并且一个任务还可能分割成多个 子任务分别在不同的服务上运行。分布式情况下,每一个模块可选的方案都不少,多样且复杂;但是最终都需要单体内实现的支持,我们这里就只讨论单体模式下的延 时任务方案。

阅读全文 »

前言

作为一个后端程序员,面试过程中难免会被问到缓存的一些问题,而目前来说,Redis 就是使用的最为广泛的一个缓存中间件了。下面我们就以 Redis 为例,说一说面试过程中会经常会被问到的一些面试题。并试着了解面试官所想,抓住重点,奋力一击,让面试不再烦恼。

Redis 简介

首先,简单回顾下 Redis 的简介,并提供一个思路范式。

Redis 是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合,位图,HyperLogLogs 等数据类型。内置复制、Lua 脚本、LRU 收回、事务,以及不同级别磁盘持久化功能,同时通过 Redis Sentinel 提供高可用,通过 Redis Cluster 提供自动分区。根据月度排行网站 DB-Engines 的数据,Redis 是最流行的键值对存储数据库。

上面是对 Redis 的一个基本介绍,但是在学习一门新技术的时候,一般至少需要考虑三个基本问题 WWH:

  1. WHAT:是什么,该技术是什么,有什么特性
  2. WHY:为什么,为什么要使用该技术,该技术解决了什么问题
  3. HOW:怎么做,如何使用该技术

如果需要再深入一点,那么就还有一个 HOW:该项技术是如何实现的,即需要明白该技术的实现原理。

所以,猿们在使用某项技术或者学习某项新技术的时候,不妨按照上面的四个问题来思考下。或者回顾复习的时候也可以按照该思路来准备,因为一般的面试题也都是和上面几个问题相关的。下面要讲到的面试题或多或少都会和上面的四个问题挂钩。Let’s begin.

阅读全文 »

本次本章从线程的基础讲到线程的相关实现类,每个章节算是一小块知识点,在每个知识点中,穿插地讲对应的知识原理,以及对应的常见面试题及其解答。多数面试题是前后环环相扣的。

什么是线程

线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等等。但同一进程中的多个线程有各自的调用栈(Call Stack),自己的寄存器环境(Register Context),自己的线程本地存储(Thread-local Storage)。

一个进程可以有很多线程,每条线程并行执行不同的任务。在多核或多 CPU,或支持 Hyper-threading 的 CPU 上使用多线程程序设计的好处是显而易见的,即提高了程序的执行吞吐率。在单 CPU 单核的计算机上,使用多线程技术,也可以把进程中负责 I/O 处理、人机交互而常被阻塞的部分与密集计算的部分分开来执行,编写专门的 workhorse 线程执行密集计算,从而提高了程序的执行效率。

可能的问题,分别对应上面三段内容:

  1. 什么是线程
  2. 哪些数据存储是线程私有的
  3. 为什么要使用多线程,即使用多线程的好处
阅读全文 »