avatar
文章
77
标签
64
分类
24

主页
标签
分类
链接
关于笔者
玲辰书斋
搜索
主页
标签
分类
链接
关于笔者

玲辰书斋

Java内存模型与线程
发表于2022-12-11|JVM
Java内存模型与线程 ​ 上面的图就是线程,工作内存,主内存的关系,也可以看到线程想要获取数据,需要先到工作内存找,工作内存从主内存中找,那为啥需要这个工作内存 ? 而不直接访问主内存,也可以避免数据不一致的情况了。 ​ 这就需要我们对物理计算机中如何并发访问有一点儿了解,我们知道CPU内含有寄存器,但寄存器能存放的内容太少,而大部分时间都要从内存中获取,如果等待从内存中取得数据,CPU又被浪费了,因为两者间的速度差太多,所以引入了高速缓存。 ​ 除了增加高速缓存外,为了处理器内部的运输单元能被充分利用,处理器会对输入代码进行乱序执行,在计算后将乱序执行的结果重组,保证该结果与顺序执行的结果一致。而潜在的风险就是一个计算任务依赖另一个计算任务的中间结果,其顺序性不能靠代码的先后顺序来保证,而Java内存模型也保留了这一点,我们也可以看到上面两幅图结构是非常相似的。所以Java内存模型的定义也是由硬件决定的。 内存间交互操作​ 也就是图1中,线程,工作内存,主内存数据是怎么交互的,Java内存模型定义了8个操作,每个操作都是原子 ...
SQL语句: where 和 having 的区别
发表于2022-12-09|数据库
SQL语句: where 和 having 的区别 分组查询时,select的字段(不包含聚合函数的字段)是否一定要都在group by的字段中? 例如: select name,age,sum(money) from user group by 上面所说情况在Mysql5.7之后:sql_mode=only_full_group_by 情况下适用,可以通过 select @@sql_mode;查询自己的sql_mode 解决方案: 修改sql_mode,删除:SET @@sql_mode = sys.list_drop(@@sql_mode, 'ONLY_FULL_GROUP_BY');(不推荐) group by 主键字段 group by 唯一非空字段 select 字段集合 from table group by 相同字段集合 select @@sql_mode; SET @@sql_mode = sys.list_add(@@sql_mode, 'ONLY_FULL_GROUP_BY'); SET @@sql_mode = sys.list_dr ...
手写Spring系列:IOC
发表于2022-12-07|Spring
IOC​ 我们学Java的基本上都会使用Spring进行开发,而Spring中最为核心的又是IOC和AOP,接下来的内容是在学习手写Spring渐进式源码实践这本书后的学习总结,看是否我们能开发出一个mini-Spring。因为后期代码会很多,而且基本上都是在前一版的基础上进行扩展。这里我只声明每一章的目标扩展点是啥,具体从Github上获取源码:https://github.com/fuzhengwei/book-small-spring 第一章:实现一个简单的Spring Bean容器​ 先不深究Spring源码,我就看自己平时使用Spring时的体会,使用Spring时,通过XML配置文件或者通过注解,声明哪些类是需要注入到容器中的,到自己使用时,可以从容器中获取该类对象。那这不就是我们基础中学的Collection或者Map就能实现的操作嘛,因为我需要频繁的从容器中获取指定类对象,所以查询返回的效率需要非常高,那就我们就用Map来实现,先不要想那么多。 public class BeanFactory { // 用Map来存储Bean priv ...
从单体到分布式
发表于2022-12-03|演化过程系列
初级阶段(本地调用)​ 在我们学习java初期,我们都会通过创建一个类对象,用该对象调用自身方法,得到需要的内容。整个过程都在本地当前JVM中进行的。这样的程序是最简单,方便,快速的。后面我们又学习了面向接口编程,用接口去规范子类的行为,也就是说调用者不需要知道具体方法的实现,只调用接口即可。 ​ 再后来我们又学习了分布式调用这些高端名词,什么Dubbo,什么RPC框架,什么Zookeeper注册中心,说实话我学完还是挺懵逼的,会有种漂浮的感觉,知道它大概是个什么东西后,又说这玩意儿落伍了,让我去看看SpringCloud,Nacos之类的玩意儿,说学这个没问题。现在回想起来有种知识断层的感觉,这种感觉从普通java程序进阶为Spring框架时有,从SpringBoot到SpringCloud时也有。废话不多说了 ,我们开始理理思路吧。 import lombok.AllArgsConstructor; import lombok.Data; public interface Factory { public User askEntity(); ...
从 JDBC 到 ORM(例:Mybatis)
发表于2022-11-29|演化过程系列
从 JDBC 到 ORM(例:Mybatis)的演化过程​ 下面我将介绍Java操作Mysql数据的方式的演化过程,从最基本的JDBC到ORM框架的实现,每一次演化都是为了解决现有存在的问题。 JDBC这里需要加入Mysql驱动包或者依赖. <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.13</version> </dependency> @Test public void test1() throws SQLException { // 注册驱动 Driver driver = new com.mysql.jdbc.Driver(); // 设置配置 Properties properties = new Properties(); properties.setProperty("user","root"); ...
手写线程池
发表于2022-11-28|手写系列
手写线程池 ​ 我们从初级阶段自己创建线程去异步执行任务,到后期使用线程池不断执行任务,原理书上都有,但都是字面意思,无法深入理解,所以打算自己进行实现。 阶段一: new Thread(()-> System.out.println("异步执行")).start(); 阶段二: // 抽离出一个统一接口,具体实现由子类完成 interface Executor { public void execute(Runnable r); } // 定义各自的子类去实现execute方法 @Slf4j class myExecutor implements Executor { @Override public void execute(Runnable r) { // 底层还是执行的 new Thread(r),虽然现在看起来是有点儿麻烦,但更方便我们进行扩展了 new Thread(r).start(); } } 阶段三:上面我们执行一次方法就创 ...
第二章:链表问题
发表于2022-11-28|数据结构
第二章:链表问题打印两个有序链表的公共部分/** * 给定两个有序链表的头指针head1和head2,打印两个链表的公共部分 * @param head1 * @param head2 */ public static void printCommonPart(Node head1,Node head2) { // 有序 则说明,我们可以用双指针思想,找到相同的点 while (head1 != null && head2 != null) { if (head1.value > head2.value) { head1 = head1.next; } else if (head1.value < head2.value) { head2 = head2.next; } else { // 如果相等,说明到达了公共节点 Syste ...
搭建博客,利用Webhook自动更新
发表于2022-11-28
Hexo d 推送至服务器​ 前段时间利用Hexo搭建博客,并配合GitHub page进行页面显示,一切都很美妙,但有一个问题就是访问速度太慢,后面我希望将博客迁移到腾讯云中,之后就从服务器访问了。现在关于Hexo搭建基本博客的帖子已经很详细了,所以我会放一些我参考的链接,主要介绍如何从本地将文件同步到自己的服务器中。 前置知识Hexo博客搭建三水同学的笔记:https://sanshui.vip/2022/08/10/indexday1/ (这里操作完,基本上就是博客雏形和Github page的显示) Butterfly主题有了基本的博客雏形,但样式比较单一,这时候就可以利用现有的Hexo主题,这里只列举了Butterfly,还有些其他主题,可以自行查找。 推荐教程:https://www.fomal.cc/posts/4aa2d85f.html (这里操作完,样子就会好看许多,剩下的就是页面的修改,按照自己的意愿) 页面音乐播放我当时觉得博客加点儿音乐很有感觉,就捣鼓了些。 推荐教程:https://blog.csdn.net/qq_41467882/article/ ...
第一章:栈与队列
发表于2022-11-27|数据结构
第一章:栈与队列设计一个有getMin功能的栈 要求:pop,push,getMin的时间复杂度为:O(1) public class stackTemplate { // 记录插入值 private Stack<Integer> stack = new Stack<>(); // 记录插入值的最小值 private Stack<Integer> minStack = new Stack<>(); public void push(int value) { stack.push(value); // 如果最小值栈的栈顶元素 大于 当前元素,则说明有新的最小值了, if (minStack.isEmpty() || minStack.peek() >= value) { minStack.push(value); } } public int pop() { ...
Redis 底层结构
发表于2022-11-26|Redis
BigKey是什么 ?BigKey通常以Key的大小和Key中成员的数量来综合判定,例如: Key本身的数据量过大:一个String类型的Key,它的值为5 MB。 Key中的成员数过多:一个ZSET类型的Key,它的成员数量为10,000个。 Key中成员的数据量过大:一个Hash类型的Key,它的成员数量虽然只有1,000个但这些成员的Value(值)总大小为100 MB。 推荐值: 单个key的value小于10KB 对于集合类型的key,建议元素数量小于1000 有什么危害 ? 网络阻塞 对BigKey执行读请求时,少量的QPS就可能导致带宽使用率被占满,导致Redis实例,乃至所在物理机变慢 数据倾斜 BigKey所在的Redis实例内存使用率远超其他实例,无法使数据分片的内存资源达到均衡 Redis阻塞 对元素较多的hash、list、zset等做运算会耗时较旧,使主线程被阻塞 CPU压力 对BigKey的数据序列化和反序列化会导致CPU的使用率飙升,影响Redis实例和本机其它应用 怎么识别 ? redis-cli –bigkeys 利用re ...
1…5678
avatar
庚辰
要么读书,要么旅行,身体和心灵总有一个要在路上.
文章
77
标签
64
分类
24
Follow Me
最新文章
苏格拉底式对话:理解React的设计哲学
苏格拉底式对话:理解React的设计哲学2026-03-03
树结构在计算表达式解析上的应用(设计统计组件)
树结构在计算表达式解析上的应用(设计统计组件)2026-02-20
利用 Delegated Types 与 Self Joins 设计高扩展性系统
利用 Delegated Types 与 Self Joins 设计高扩展性系统2026-01-05
kamal 部署加速
kamal 部署加速2026-01-01
Vue 组件间通信方案:实现 Drawer 单例模式
Vue 组件间通信方案:实现 Drawer 单例模式2025-10-09
分类
  • JVM5
  • Java4
  • LSP1
  • Linux2
  • Redis2
  • Ruby10
  • Spring4
  • Turbo-Rails11
标签
AI AQS锁 Filter IOC IO流 Interceptor JavaScript LSP Mysql OOP Promis RMI RPC Rails React Ruby Ruby 树结构 SDK SQL Servlet Shell SpringMVC SublimeText Vue Zed electron jdbc kamal mysql opencv orm rails ruby ruby,rails rubyGem turbo 事务 二叉树 位运算 元编程
归档
  • 三月 20261
  • 二月 20261
  • 一月 20262
  • 十月 20251
  • 七月 20251
  • 四月 20251
  • 二月 20251
  • 一月 20251
网站资讯
文章数目 :
77
本站访客数 :
本站总访问量 :
最后更新时间 :
©2020 - 2026 By 庚辰
框架 Hexo|主题 Butterfly
陕ICP备2022014054号
搜索
数据库加载中