思考专题

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

【编程底层思考】详解Java的JUC多线程并发编程底层组件AQS的作用及原理

Java中的AbstractQueuedSynchronizer(简称AQS)是位于java.util.concurrent.locks包中的一个核心组件,用于构建锁和其他同步器。AQS为实现依赖于FIFO(先进先出)等待队列的阻塞锁和相关同步器提供了一套高效、可扩展的框架。 一、AQS的作用 统一同步状态管理:AQS提供了一个int类型的成员变量state,用于表示同步状态。子类可以根据自己

一道算法题引发的动态内存管理的思考

在做PKU2762时,需要建邻接表。 于是按部就班写了下面一个插入边到邻接表中的函数: const int VMAX = 1010;typedef struct Graph{int vex;Graph* next;}Graph;Graph ArcGraph[VMAX];void insert(int u, int v){Graph* t = new Graph;Graph*

go 和 java 技术选型思考

背景:       go和java我这边自身都在使用,感受比较深,java使用了有7年多,go也就是今年开始的,公司需要所以就学了使用,发现这两个语言都很好,需要根据场景选择,我写下我这边的看法。 关于go和java语言层面和特性就不说了,网上都有,我这边从我这边实际使用的场景情况来说,供大家参考。 给我最大的感受,php转go的不少,也是符合未来技术大趋势的,目前来看,java转go也比较

思考自己写博客的意义

感想 从今年2月份开始,我就要求自己以每周4篇的速度写博客。然而问题是:每周的空闲时间是不稳定的,这导致我没法保证花费相同的时间去输出稳定质量的博客。当时间不够时,我将面临选择:是减少数量来保证稳定的质量,还是降低质量来保证稳定的数量? 我选择的是——牺牲质量。因为,相比于“质量”,“数量”是准确可见的。我担心:一旦有一次没能完成目标数量,便会出现“破窗效应”,让我潜意识里再也不认同“目标”了

是时候重新思考你的Google广告策略了吗?

以产品为中心、仅以关键词为焦点的广告活动是 谷歌广告中常见的一种活动类型。 如果你销售复古女式T恤,你可能会设置基于“复古女式T恤”关键词的独立关键词广告活动。 对于许多B2C零售商来说,这种方法效果不错。但是,对于其他一些商家来说,基于产品和关键词的广告活动并不一定是最好的策略。 比如说,我们接手了一个新的B2B客户的谷歌广告账户,其所有广告活动都是以产品为中心、仅关注关键词的广告活动。

【编程底层思考】如何检测和避免线程死锁

一、什么是线程死锁? 线程死锁发生在多个线程因为争夺资源而相互阻塞,导致程序无法正常结束的情况。例如,线程A持有资源2并等待资源1,线程B持有资源1并等待资源2,这样就形成了死锁。 二、如何检测死锁? 使用jmap、jstack等命令行工具查看JVM的线程栈和堆内存情况,jstack可以显示死锁信息。使用VisualVM、JConsole等图形化工具进行排查。例如,JConsole可以连接到

【个人思考】 Java为什么解释执行时不直接解释源码?

起因 最近学习JVM,产生一个问题:Java为什么解释执行时不直接解释源码? 众所周知,Java 字节码是跨平台的,因此 Java 才能一次编译处处运行。但是,Java 源码本身也是跨平台的啊,为什么不可以省略编译为字节码这一步,直接将源码运行在虚拟机上?如果是效率问题,可不可以在设计 Java 语言的时候解决? 对于此问题,大部分回答诸如:“采用字节码的好处主要包括跨平台性、安全性、性

使用卫星仿真软件STK的一些应用和思考(星地链路、星间链路)

目录 任务描述利用STK建模星地协同系统3个GEO高轨卫星240/20/1 Walker-Star Constellation 低轨卫星星座地面站或者地面设备 链路建模与数据提取处理星地链路星间链路数据读取的几种方法最麻烦的方法使用Matlab与STK互联接口使用大规模使用Chain 总结 任务描述 在一个星地协同的空天地网络中,科研中可能需要建模星地链路以及星间链路,主要受

从spark源码的角度思考scala中的模式匹配

1.scala中模式匹配 2.spark源码中的模式匹配思考 spark中master会收到worker发过来的akka的消息, 此消息是case class即(Master.class中): case class RegisterWorker(id:String,host:String,port:Int,cores:Int,memory:Int,webUiPort:int

对于CVMV的思考

问题解决不了是自己的问题,归根到底是自己能力不够,要从自身找问题,别抱怨没平台,即使没平台自己搭建平台,在互联网时代,网络就是最好的平台,多交流多学习才能成长。      方向比努力本身更重要。天道不一定酬勤,站在风口的猪也能飞翔。成功是勤奋在时间和方向上的累积的结果,只有把握好方向才能找到风口,越努力越幸运。   对于一个问题你能给别人讲明白了,说明你真正理解了。

【编程底层思考】详解Java内存模型(JMM)原理及其作用

Java内存模型(Java Memory Model, JMM)是Java虚拟机(JVM)的一个核心概念,它定义了Java程序中各种变量(线程共享变量)的访问规则,以及在并发环境下,为了确保数据的可见性、原子性和有序性,线程之间如何协作。 作用 确保数据的可见性:在多线程环境中,一个线程修改了共享变量的值,其他线程能够看到这个修改。保证数据的原子性:复合操作(例如自增操作 i++)在多线程环境

对fftshift的思考

首先明确一下,我们这里考虑的二维数组的形式,因为我们主要的学习目标是图像处理。 1. 偶数的情况 我们类比于一维中的情况,DFT中一个周期的对称中心是 M / 2 M/2 M/2,如果 M M M 恰好是一个偶数,那么 M / 2 M/2 M/2 会是一个具体的点,如果 M / 2 M/2 M/2 是一个奇数,则显然对称中心不存在某一个具体的点,它在两点之间。为了简单起见,我们现在

一文详解纷享销客CRM产品逻辑、核心竞争力、AI能力以及商业化思考

在数字经济蓬勃发展的当下,企业数字化转型已然成为增强市场竞争力、促进可持续增长的必由之路。作为这一转型浪潮中的核心引擎,CRM系统正日益成为行业瞩目的焦点。那么,CRM究竟如何助力企业实现成本优化与效率飞跃?近日,崔牛会创始人兼CEO崔强与纷享销客CTO林松进行了深入对话,就“如何锻造高效能、高价值的CRM产品”等核心议题展开了精彩纷呈的交流,详细介绍了纷享销客CRM产品逻辑、核心竞争力、AI

【编程底层思考】什么是JVM对象内存分配的空间分配担保,咋担保的?

JVM对象内存分配的空间分配担保是一种确保在进行垃圾收集GC时,有足够空间处理对象晋升和分配的策略。 该机制主要用于新生代垃圾收集MinorGC和老年代垃圾收集MajorGC或FullGC之间的协调,以避免出现内存不足的情况。 具体来说,空间分配担保机制的工作原理如下 估算新生代存活对象的大小:在每次Minor GC前,JVM会估算新生代中存活对象的大小。这个估算值可以基于之前几次Minor G

系统思考—关键决策

结‮影构‬响行为,精‮决准‬策创造价值! 最‮身近‬边很多‮伙小‬伴找我“助力”,父‮也母‬经常发‮息信‬让我帮忙,忍‮住不‬研究了一下‮些这‬助力活动的“玩法”。说实话,这‮设种‬计从‮构结‬上真‮很的‬巧妙,总是‮那差‬么一点点,逼‮你着‬去邀约新用户,背‮的后‬逻辑非‮有常‬意思。 这‮让也‬我想到,头‮企部‬业往往‮以可‬通过大规‮补模‬贴和‮本资‬投入来迅‮吸速‬引流量,但‮于对‬资

系统思考—盲点

突‮盲破‬点,解‮合锁‬作潜能——JSTO 的‮能高‬碰撞! 在今天的JSTO会议中,我们在Check In环‮分节‬享了近1-2周‮实的‬践和反思。这‮环个‬节不仅‮助帮‬大家‮享共‬了更多的‮息信‬和资源,还‮效有‬促进了彼‮间此‬的合‮与作‬支持,激‮了发‬很多新的‮路思‬和启发。 每一位‮由自‬职业者和‮询咨‬顾问在‮自各‬领域‮有都‬独特‮专的‬业性,但同‮也时‬难免会‮盲有‬点。这

【编程底层思考】详解Java中Collections工具类

Java 的 java.util.Collections 类是一个包装类,它包含了一系列静态方法来操作或返回集合对象。这个类提供了对集合框架的扩展,使得集合的使用更加灵活和强大。以下是 Collections 类的一些关键特性和用途: 静态方法 排序:sort(List list) 可以对列表进行自然顺序排序,sort(List list, Comparator c) 允许使用自定义的比较器进

Go游戏服务器开发的一些思考(四十一):登录流程(三)

登录时序图2-游戏网关段 本流程优缺点如下: 保证能重入 即重新登录不会卡号 保证最多1个客户端能连进游戏,正常游戏 同一帐号多客户端同时登录,理论上存在这些客户端都登录不成功的情况 因为时序关系,4.1步,有几率这些客户端都收到消息,并断开连接网络会话 这本身就是违规操作,其实不成功也没什么关系。 更多参考 请参见本人github:https://github.com/fan

Go游戏服务器开发的一些思考(四十):cstruct-go与gogoprotobuf

初次基准测试 可以看到,cstruct-go比gogoprotobuf慢600+ns 于是,github上,看了下gogoprotobuf代码 发现,主要区别在于对slice的用法上 append vs make(,fixedsize) 对照下,发现 gogoprotobuf对slice做的2件事: 在encode只做了一次make内存分配在decode对每个slice类型,只做一

Go游戏服务器开发的一些思考(三十九):go reflect的正确使用方法

错误的使用 go reflect包,在写一些通用库、通用模块时,提供了不少便利。 但是需要注意,go reflect包是非常慢的! 下图,就是一次失败使用go reflect包的尝试: (CStructGO 是 本人使用go reflect包写的一个C-Style Struct协议库:cstruct-go) 可以看到,同样的功能,cstruct-go比protobuf慢了一个数量级。

Go游戏服务器开发的一些思考(三十八):MMO游戏移动同步

MMO游戏移动同步 MMO游戏与IO游戏的不同: 类型视野内人数交互性强弱MMO游戏多,大到几百人相对弱IO游戏少到一定范围,如最多10、20人等强 因此,会采取不同的策略,来做移动同步。 类型策略MMO游戏需要控制流量,放缓同步间隔间隔IO游戏可以牺牲可接受的流量,适当频繁同步 本文下面,针对MMO游戏,提供一种移动同步方案。 本方案,综合参考了一些典型的 IO游戏移动同步、MO

思考(五十八):基于 go-micro 实现聊天服的思路

基于 go-micro 实现聊天服 github 上有个 goim ,主要是为弹幕服做的,改成聊天服也有些工作量 将 goim 实现弹幕的思路,与 go-micro 结合,应该能达成快速开发聊天服,且足够应对主业务不是聊天为主的应用 细节如下: 1. 账号登录聊天服 +----------------+ +----------------+

思考(五十七):一处 string 字段竞态问题引发的 crash

string 字段多协程竞态 通常写代码比较注意一些数据结构、容器的多协程竞态,比如 slice 、 map 对于 string 字段的多协程竞态,非常容易忽视 这里举例说明,项目中遇到的问题 竞态代码 代码片段1 (协程1 中执行) func (s *Server) loginOnWindows(p *common.Proto, ch *Channel) (err

思考(五十六):Golang 编程之工厂模式

工厂模式 工厂模式: 在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象 micro/go-micro 在插件的可插拔上使用了工厂模式 micro/go-micro 工厂模式的应用 以Registry的etcd 插件为例 1. 接口 摘自: https://github.com/micro/go-micro/blob/master/registry/r