Android ID那些事儿 ©️ pepsi-wyl
A </Open Advertising ID>OAID 是中国移动设备厂商联盟推出的广告标识符,主要用于替代 Google Advertising ID (GAID) 的功能,在无法使用 Google 服务的设备上尤其重要。
特点:
用户可以选择重置或关闭。
不与设备硬件直接绑定,增强隐私保护。
广泛用于中国市场,支持主流国产手机厂商(华为、小米、OPPO、vivo 等)。
使用场景:
广告个性化。
广告效果追踪和归因。
B <AAID/GAID> </Google Advertising ID>GAID(Google Advertising ID),又称 AAID(Android Advertising ID),是 Google 为 Android 提供的广告标识符。
特点:
全球适用,Android 设备广泛支持。
用户可以重置或限制广告追踪(Opt-out)。
在 Google 广告生态中是主要的标识符。
使用场景:
广告个性化和推荐。
转化追踪和广告归因。
C <Android ID&g ...
maven © pepsiwyl
Maven依赖管理项目构建工具Maven简介为什么学习MavenMaven是一个依赖管理工具①jar 包的规模
随着我们使用越来越多的框架,或者框架封装程度越来越高,项目中使用的jar包也越来越多。项目中,一个模块里面用到上百个jar包是非常正常的。
比如下面的例子,我们只用到 SpringBoot、SpringCloud 框架中的三个功能:
Nacos 服务注册发现
Web 框架环境
视图模板技术 Thymeleaf
最终却导入了 106 个 jar 包:
org.springframework.security:spring-security-rsa:jar:1.0.9.RELEASE:compilecom.netflix.ribbon: ribbon:jar:2.3.0:compileorg.springframework.boot:spring-boot-starter-thymeleaf:jar:2.3.6.RELEASE:compilecommons-configuration:commons-configuration:jar:1.8:compileorg.apac ...
rebase © pepsiwyl
合并分支-Merge VS Rebase参考资料文章Git ‘merge’ 和 ‘rebase’ 之间的区别|极客笔记git rebase详解(图解+最简单示例,一次就懂)-CSDN博客图解 Git 基本命令 merge 和 rebase - Michael翔 - 博客园视频【IT老齐235】Git Rebase vs Git Merge,代码合并到底用哪个?_哔哩哔哩_bilibili五分钟学会git rebase和 git merge的区别_哔哩哔哩_bilibiligit常用操作–git rebase和git merge_哔哩哔哩_bilibili不会使用 git rebase 合并代码?这位颜值颇高的程序员被公司开除了 #83_哔哩哔哩_bilibili
marge和rebase图解merge将dev分支merge到master分支上将master分支merge到dev分支上
rebase将master分支以dev进行变基将dev分支以master进行变基
rebase 关键在于「基」,git rebase <基分支>,就是将当前基分支与当前分支的差异提交获取到,然 ...
SpringSecurity©编程不良人
SpringSecurity 实战第一章 权限管理
权限管理
SpringSecurity 简介
整体架构
权限管理基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源。
权限管理包括用户身份认证和授权两部分,简称认证授权。对于需要访问控制的资源用户首先经过身份认证,认证通过后用户具有该资源的访问权限方可访问。
认证身份认证,就是判断一个用户是否为合法用户的处理过程。最常用的简单身份认证方式是系统通过核对用户输入的用户名和口令,看其是否与系统中存储的该用户的用户名和口令一致,来判断用户身份是否正确。对于采用指纹等系统,则出示指纹;对于硬件Key等刷卡系统,则需要刷卡。
授权授权,即访问控制,控制谁能访问哪些资源。主体进行身份认证后需要分配权限方可访问系统的资源,对于某些资源没有权限是无法访问的
解决方案和其他领域不同,在 Java 企业级开发中,安全管理框架非常少,目前比较常见的就是:
Shiro
Shiro 本身是一个老牌的安全管理框架,有着众多的优点,例如轻 ...
YlanMini-Spring © pepsi-wyl
YlanMini-Spring简介Github仓库链接: https://github.com/pepsi-wyl/YlanMini-Spring
一个简化版的spring框架,主要实现了 Spring IOC(依赖注入) 和 Spring AOP(面向切面编程),实现较Spring源码简单,有助于学习和理解Spring思想和源码。,主要实现了 Spring IOC(依赖注入) 和 Spring AOP(面向切面编程),实现较Spring源码简单,有助于学习和理解Spring思想和源码。使用三级缓存解决属性注入和set方法注入的循环依赖问题,@Lazy注解、ObjectFactory 解决构造方法注入的循环依赖问题。完成了5种通知类型 (@Before、 @AfterReturning、@After、@AfterThrowing、@Around)的解析,对符合切点的目标对象进行代理增强,并对通知进行顺序链式调用。
IOC实现功能及主要流程
完成组件的扫描,用 @Component注解 标记组件,用 @Scope注解 标记组件作用域,用 @ComponentScan注解 标记要扫 ...
JUC
JUC进程概述进程:程序是静止的,进程实体的运行过程就是进程,是系统进行资源分配的基本单位
进程的特征:并发性、异步性、动态性、独立性、结构性
线程:线程是属于进程的,是一个基本的 CPU 执行单元,是程序执行流的最小单元。线程是进程中的一个实体,是系统独立调度的基本单位,线程本身不拥有系统资源,只拥有一点在运行中必不可少的资源,与同属一个进程的其他线程共享进程所拥有的全部资源
关系:一个进程可以包含多个线程,这就是多线程,比如看视频是进程,图画、声音、广告等就是多个线程
线程的作用:使多道程序更好的并发执行,提高资源利用率和系统吞吐量,增强操作系统的并发性能
并发并行:
并行:在同一时刻,有多个指令在多个 CPU 上同时执行
并发:在同一时刻,有多个指令在单个 CPU 上交替执行
同步异步:
需要等待结果返回,才能继续运行就是同步
不需要等待结果返回,就能继续运行就是异步
参考视频:https://www.bilibili.com/video/BV16J411h7Rd
笔记的整体结构依据视频编写,并随着学习的深入补充了很多知识
对比线程进程对比:
进程基本上相互独立的,而 ...
00_Mysql基础篇
导入表的问题导入数据时外键约束问题
数据导入指令:
1source d:\xxx.sql
通过FOREIGN_KEY_CHECKS解决,用法如下:
12set FOREIGN_KEY_CHECKS=0; #在导入前设置为不检查外键约束set FOREIGN_KEY_CHECKS=1; #在导入后恢复检查外键约束
第三章_最基本的SELECT语句1. SQL语言的规则和规范1) 基本规则
SQL 可以写在一行或者多行。为了提高可读性,各子句分行写,必要时使用缩进
每条命令以 ; 或 \g 或 \G 结束
关键字不能被缩写也不能分行
关于标点符号
必须保证所有的()、单引号、双引号是成对结束的
必须使用英文状态下的半角输入方式
字符串型和日期时间类型的数据可以使用单引号(’ ‘)表示
列的别名,尽量使用双引号(” “),而且不建议省略as
2) SQL大小写规范(建议遵守)
MySQL 在 Windows 环境下是大小写不敏感的
MySQL 在 Linux 环境下是大小写敏感的
数据库名、表名、表的别名、变量名是严格区分大小写的
关键字、函数名、列名(或字 ...
04_日志与备份篇
第17章_其他数据库日志
千万不要小看日志。很多看似奇怪的问题,答案往往就藏在日志里。很多情况下,只有通过查看日志才 能发现问题的原因,真正解决问题。所以,一定要学会查看日志,养成检查日志的习惯,对提升你的数 据库应用开发能力至关重要。
MySQL8.0 官网日志地址:“ https://dev.mysql.com/doc/refman/8.0/en/server-logs.html ”
1. MySQL支持的日志1.1 日志类型MySQL有不同类型的日志文件,用来存储不同类型的日志,分为 二进制日志 、 错误日志 、 通用查询日志 和 慢查询日志 ,这也是常用的4种。MySQL 8又新增两种支持的日志: 中继日志 和 数据定义语句日志 。使 用这些日志文件,可以查看MySQL内部发生的事情。
这6类日志分别为:
慢查询日志:记录所有执行时间超过long_query_time的所有查询,方便我们对查询进行优化。
通用查询日志:记录所有连接的起始时间和终止时间,以及连接发送给数据库服务器的所有指令, 对我们复原操作的实际场景、发现问题,甚至是对数据库操作的审计都有很大的帮助。
错 ...
03_事务篇
第13章_事务基础知识1. 数据库事务概述1.1 存储引擎支持情况SHOW ENGINES 命令来查看当前 MySQL 支持的存储引擎都有哪些,以及这些存储引擎是否支持事务。
能看出在 MySQL 中,只有InnoDB 是支持事务的。
1.2 基本概念事务:一组逻辑操作单元,使数据从一种状态变换到另一种状态。
事务处理的原则:保证所有事务都作为 一个工作单元 来执行,即使出现了故障,都不能改变这种执行方 式。当在一个事务中执行多个操作时,要么所有的事务都被提交( commit ),那么这些修改就 永久 地保 存下来;要么数据库管理系统将 放弃 所作的所有 修改 ,整个事务回滚( rollback )到最初状态。
1234# 案例:AA用户给BB用户转账100update account set money = money - 100 where name = 'AA';# 服务器宕机update account set money = money + 100 where name = 'BB';
1.3 事物的ACID特性
原子性(atom ...
02_MySQL索引及调优篇
第06章_索引的数据结构1. 为什么使用索引索引是存储引擎用于快速找到数据记录的一种数据结构,就好比一本教科书的目录部分,通过目录中找到对应文章的页码,便可快速定位到需要的文章。MySQL中也是一样的道理,进行数据查找时,首先查看查询条件是否命中某条索引,符合则通过索引查找相关数据,如果不符合则需要全表扫描,即需要一条一条地查找记录,直到找到与条件符合的记录。
如上图所示,数据库没有索引的情况下,数据分布在硬盘不同的位置上面,读取数据时,摆臂需要前后摆动查询数据,这样操作非常消耗时间。如果数据顺序摆放,那么也需要从1到6行按顺序读取,这样就相当于进行了6次IO操作,依旧非常耗时。如果我们不借助任何索引结构帮助我们快速定位数据的话,我们查找 Col 2 = 89 这条记录,就要逐行去查找、去比较。从Col 2 = 34 开始,进行比较,发现不是,继续下一行。我们当前的表只有不到10行数据,但如果表很大的话,有上千万条数据,就意味着要做很多很多次硬盘I/0才能找到。现在要查找 Col 2 = 89 这条记录。CPU必须先去磁盘查找这条记录,找到之后加载到内 ...