- 博客(201)
- 资源 (2)
- 收藏
- 关注
原创 深度学习和机器学习的本质区别(白话版)
机器学习适用于结构化数据、需要解释性强的任务,而深度学习则适用于更复杂、难以人为定义特征的任务,如图像识别、自然语言处理等。两者本质上都是在推导参数 ( w ),但机器学习的模式更简单,而深度学习依赖多层计算,能自动提取数据中的深层模式。
2025-02-18 10:00:17
393
原创 对gru的理解
它是**LSTM(Long Short-Term Memory)**的简化版,旨在缓解标准RNN的梯度消失问题,同时减少计算开销。所以这体现了更新门的作用:决定当前时间步的隐藏状态有多少信息需要保留、多少信息来自新输入。(重置门) 越接近0的时候,结果受到过去状态的影响越小。这就是重置门的作用。用于控制遗忘过去的信息。GRU(Gated Recurrent Unit,门控循环单元)是一种。(重置门) 越接近1则结果受到过去状态的影响越大,(当前输入)影响大, 当。越接近0时, 结果受到。
2025-02-11 10:28:43
422
原创 LSTM的介绍
HtH_tHt是 LSTM 每个时间步的输出,它会被传递到下一个时间步,也可以用于最终的预测。由于HtH_tHt直接受输出门(Output Gate)控制,它的值可能会随着时间快速变化,因此它更偏向短期信息的存储。在某些情况下,( h_t ) 可能会丢失远程依赖信息,类似于 RNN 里的信息传递方式。
2025-02-10 10:52:45
1165
原创 逻辑回归公式推导-详细版
逻辑回归的损失函数(或称为代价函数)是用于衡量模型预测结果和真实结果之间差距的一个函数。它通常采用对数似然损失函数(Log-Loss),也称为交叉熵损失函数(Cross-Entropy Loss)。我们通过最大化似然函数来推导它,并将其转化为最小化损失函数的形式。
2024-10-24 10:28:24
1396
原创 正规方程推导,详细版
Jθ12m∑i1mhθxi−yi2Jθ2m1∑i1mhθxi−yi2mmm是样本数量。xix^{(i)}xi是第iii个样本的特征向量。yiy^{(i)}yi是第iii个样本的实际值。hθxihθxi是模型对第iii个样本的预测值。θ\thetaθ是模型的参数向量。在求导过程中,我们使用了矩阵微积分的规则,特别是关于二次型和线性项的导数。
2024-10-19 12:46:24
1009
1
原创 chromium启动流程(二)-UtilityProcess进程启动流程
一文我们知道 browser进程通过RunBrowser 函数启动,而其他进程则通过RunOtherNamedProcessTypeMain函数启动,今天我们以NetworkService进程的启动来分析其他进程启动, 同时也说明service进程的运行方式。函数会根据Service 的名称判断是否能在io服务线程执行,如果可以在io服务线程执行,就调用io_thread_services_->RunService执行,否则只能在主线程执行,调用TryRunMainThreadService在主线程执行。
2024-02-04 15:06:56
1370
原创 chromium启动流程(一)-browser进程启动流程
前面通过一些列文章,我们了解清楚了chromium的线程模型和ipc通信框架ipcz。接下来我们分析一下chromium的启动流程。本篇以browser进程启动为例进行分析。chromium的启动入口在chrome/app/chrome_exe_main_aura.cc中。这里面Aura是Chromium项目中用于窗口管理的底层框架。它负责管理用户界面的窗口和其他图形元素。Aura提供了一个跨平台的框架,用于构建Chromium浏览器的用户界面组件。
2024-01-28 19:32:34
2854
原创 chromium通信系统-ipcz系统(十一)-mojo binding
这里908-909行创建Message的时候指定的消息名称为internal::kChildProcess_BindServiceInterface_Name, 用于指示服务端调用哪个方法。Accept方法调用ChildProcessStubDispatch::Accept方法,第一个参数为sink_, 第二个参数为消息体。mojom::ChildProcess::Stub_ stub_, 也就是ChildProcessStub。我们看一下它的实现以及set_sink 方法。生成带c++代码如下。
2024-01-08 19:34:19
1414
原创 chromium通信系统-ipcz系统(十)-消息通知(trap)
MojoAddTriggerIpcz 函数顾名思义就是向trap添加一个触发器,用于注册trap 事件观察者,参数trap_handle 是用于指向MojoTrap的句柄,handle 是 portal的句柄,也就是添加的触发器针对与portal 上面的事件。Trap函数如果trap 关注的事件(conditions)没有满足,则会注册成功,否则返回IPCZ_RESULT_FAILED_PRECONDITION 表示前置条件不满足,满足的条件通过satisfied_condition_flags参数返回。
2024-01-08 14:54:47
1076
原创 chromium通信系统-ipcz系统(九)-ipcz系统代码实现-跨Node通信-代理和代理消除
chromium通信系统-ipcz系统(六)-ipcz系统代码实现-跨Node通信-基础通信 一文我们分析了跨Node的基础通信过程。 a进程和b进程通信的过程。 但在程序中a进程将自己打开的一对portal中的一个portal传递给了b进程。由于篇幅问题这个过程我们并没有分析,这篇文章我们就来分析这个过程。代理路由的形成我们已经分析了基础通信过程。这里我们直接从RemoteRouterLink::AcceptParcel 函数开始分析端口的发送过程。142 void RemoteRouterLink
2024-01-02 19:13:16
1030
原创 chromium通信系统-ipcz系统(八)-ipcz系统代码实现-跨Node通信-Broker和Broker通信
前面我们分析了Broker和NonBroker通信,也分析了NonBroker和NonBroker通信,这里我们分析一下Broker和Broker通信过程。我们直接一步到位,看NodeConnector的创建。当前节点是broker的情况下,对端节点也是broker,就是broker to broker请求,创建NodeConnectorForBrokerToBroker。uint32_t。
2024-01-01 18:43:26
995
原创 chromium通信系统-ipcz系统(七)-ipcz系统代码实现-跨Node通信-NonBroker和NonBroker通信
在chromium通信系统-ipcz系统(六)-ipcz系统代码实现-跨Node通信-基础通信 一文中我们分析了broker 和 nonbroker 通信的过程。本文我们来分析NonBroker 和NonBroker的通信过程,同样以单元测试为例子分析。mojo/core/invitation_unittest.cc 951 DEFINE_TEST_CLIENT(NonBrokerToNonBrokerHost) { 952 MojoHandle invitation = AcceptInvita
2024-01-01 17:13:01
930
原创 chromium通信系统-ipcz系统(六)-ipcz系统代码实现-跨Node通信-Broker和NodeBroker通信
chromium通信系统-ipcz系统(二)-ipcz系统代码实现-同Node通信一文分析了同Node通信的场景。今天我们来分析一下跨Node通信的场景。我们以典型的broker 和非broker通信的场景来分析。mojo/core/invitation_unittest.cc 926 TEST_F(MAYBE_InvitationTest, NonBrokerToNonBroker) { 927 // Tests a non-broker inviting another non-broke
2023-12-16 10:08:56
1179
原创 chromium通信系统-ipcz系统(五)-ipcz系统代码实现-信道和共享内存
chromium通信系统-mojo系统(一)-ipcz系统代码实现-同Node通信一文中我们分析了同Node通信的过程,在分析跨Node(跨进程)通信过程前,为了缩小篇幅,作为承上启下,我们先来分析一下Ipcz的通信信道和共享内存机制。我们在前面chromium通信系统-mojo系统(一)-ipcz系统基本概念一文介绍了NodeLink和RouterLink的概念,这两个概念都是比较上层,在一个操作系统中,两个进程要想通信,就要借助ipc机制。 如上图所示,RouterLink之间的通信要借助NodeL
2023-12-05 12:57:15
794
原创 chromium通信系统-ipcz系统(四)-ipcz-分层、和mojo的关系以及handle
ipcz driver层对应的对象基类为ObjectBase,ObjectBase 提供的方法包括: type方法返回对象的类型,FromHandle() 和 TakeFromHandle() 方法用于将IpczHandle() 转化为具体对象。ipcz层对应的对象基类为APIObject,APIObject 提供四个方法,FromHandle() 和 TakeFromHandle() 方法用于将IpczHandle() 转化为具体对象。系统层面的实现,主要是对Socket文件描述的包装。
2023-12-04 22:44:20
1631
原创 chromium通信系统-ipcz系统(三)-ipcz-消息相关的宏展开
mojo消息相关的宏人工比较难展开,所以让gpt帮忙展开了一下,写在这里bool NodeMessageListener::OnMessage(Message& message) { return DispatchMessage(message);}bool NodeMessageListener::OnTransportMessage( const DriverTransport::RawMessage& raw_message, const DriverTra
2023-12-03 09:00:03
330
原创 chromium通信系统-ipcz系统(二)-ipcz系统代码实现-同Node通信
在chromium通信系统-mojo系统(一)-ipcz系统基本概念一文中我们介绍了ipcz的基本概念。 本章我们来通过代码分析它的实现。handle系统为了不对上层api暴露太多细节,实现解耦,也方便于传输,ipcz系统使用handle表示一个对象,handle类似于文件描述符,用IpczHandle类型表示ipcz系统内的一个对象。一个可以用IpczHandle 句柄表示的对象必须是APIObject子类。APIObject数据结构如下class APIObject : public RefCou
2023-11-26 19:25:24
1570
原创 Android NativeBridge过程分析
Art的NativeBridge使用hodini作为callback实际去加载类库其中做了少量的一些操作1 Zoygote fork应用进程的时候frameworks/base/core/jni/com_android_internal_os_Zygote.cppForkAndSpecializeCommon函数bool use_native_bridge = !is_system_server && (instructionSet != NULL) &&
2023-10-19 15:58:31
691
原创 chromium线程模型(2)-线程池实现
到这里,除了关闭的情景,线程池的方方面面也分析的差不多了。我觉得chromium的设计实在是太复杂,存在过度设计嫌疑。另外如果有协程就不必这么大费周折的去处理阻塞任务。也许是因为开发者对底层不太了解,也可能是很多历史包袱,才使得chromium的设计如此复杂吧。
2023-10-19 10:25:40
852
原创 C++编程语言的深度解析: 从零开始的学习路线
编程,作为21世纪的一项核心技能,吸引了越来越多的人。其中,C++作为一种历史悠久、应用广泛的语言,依然具有强大的生命力。但是,C++的学习曲线对初学者来说可能略显陡峭。在这篇深入探讨中,我们将一步一步帮助你构建一个稳固的C++学习基础。
2023-10-11 09:45:38
305
翻译 chromium线程模型(1)--- 官方文档
这段代码主要介绍了Chrome浏览器的多进程和多线程架构。Chrome具有多进程架构,每个进程都是高度多线程的。本文将介绍每个进程共享的基本线程系统。主要目标是保持主线程(在浏览器进程中称为“UI”线程)和IO线程(每个进程用于接收IPC的线程)响应灵敏。这意味着将任何阻塞的I/O或其他昂贵的操作卸载到其他线程。我们的方法是使用消息传递作为线程之间通信的方式。我们不鼓励使用锁定和线程安全的对象。相反,对象只存在于一个(通常是虚拟的——稍后我们将讨论!)线程上,我们通过这些线程之间传递消息进行通信。
2023-10-02 09:06:45
1128
1
原创 一场时代的挑战与转变
总的来说,年轻人存款难是一个深层次的社会问题,它的解决需要政府、社会和个人共同努力。对于年轻人来说,他们面临的不仅仅是存款的问题,更是一个如何在追求生活质量的同时,处理好财务问题,实现生活和理财的平衡的问题。在我们的社会中,有一种现象引起了人们广泛的关注,那就是“年轻人存款”的问题。年轻人需要学会如何在享受生活的同时,规划好自己的财务,做到既能满足当下的生活需求,也能为未来做好准备。存款的难题,实际上是一个更广泛的社会问题的反映。年轻人,作为社会的新生力量,他们的财务状况自然引起了人们的关注。
2023-06-25 14:28:01
273
1
原创 Android连接器(二)-elf文件的加载
VerifyElfHeaderelf加载过程其实最主要的部分就是创建程序的段ElfReader::ElfReader(const char* name, int fd, off64_t file_offset, off64_t file_size) : name_(name), fd_(fd), file_offset_(file_offset), file_size_(file_size), phdr_num_(0), phdr_mmap_(nu
2022-05-06 10:44:27
824
原创 Android连接器(一)-elf文件格式总结
elf包含两种视图,分别是文件视图和程序视图描述文件视图的主要数据结构就是section,一个elf文件包含多个section,每个section是相对独立的数据。文件使用Section Headers来描述section的名称类型以及位置大小。描述程序的视图为程序头表和程序头。链接器会根据程序头表来对数据进行加载。程序头表中存放多个程序头,程序头描述的是程序段。程序段并不在elf中,需要链接器进行内存分配,并将elf文件中的不同部分映射到分配的段内存上。一个程序段版本多个具有相同属性(读写执行权限一
2022-05-06 10:39:05
851
原创 Android连接器(三)-Android 程序加载运行-链接器实现
/* * This is the entry point for the linker, called from begin.S. This * method is responsible for fixing the linker's own relocations, and * then calling __linker_init_post_relocation(). * * Because this method is called before the linker has fixed i
2022-05-04 15:50:06
1203
原创 聊一聊PhoneWindowManager的窗口布局管理
记得之前在小米的时候,有个同学说PhoneWindowManager是最乱的地方,好像很多杂活都是PhoneWindowManager去干,其实我不太认同这个说法。 仔细分析一下,PhoneWindowManager实现了WindowManagerPolicy, WindowManagerPolicy注释写的很清楚: * This interface supplies all UI-specific behavior of the window manage
2022-04-11 09:28:40
2532
原创 如何看到守护daemon进程的标准输出log
可以gdb 来实现:gdb -p pid 某个进程gdb > call close(1)(gdb) > call dup2(creat(“/var/log/print.log”,0666),1)(gdb) > quit#!/bin/shLOG_FILE=”/var/log/debug_gdb.txt”if [ ! -n “$1” ] ;thenecho -e “please input process pid”exitelseecho $LOG_FILEfi
2021-09-07 13:59:21
386
原创 Android 策略路由
Android使用netd对网络进行管理,一个操作系统如何对网络进行管理的呢,又是如何实现的,我们本篇文章就来分析一下。Android的网络管理我觉得最重要的就是策略路由,为了了解Android的策略路由,我们先熟悉下路由规则。路由器我们都比较熟悉,属于三成设备,路由器是用于数据报转发的,那么路由器如何确定将一个设备转发到下一跳路由呢,是通过路由表。#ip route show61.135.165.183 via 192.168.1.1 dev wlp5s0 proto unspec defaul
2021-08-11 08:46:55
9922
3
原创 arm异常处理unwind 过程
backtrace:#00 pc 00062928 /data/app/com.ss.android.article.news-1/lib/arm/libuserinfo.so (_Unwind_VRS_Pop+84)#01 pc 00062f64 /data/app/com.ss.android.article.news-1/lib/arm/libuserinfo.so (__gnu_unwind_execute+240)#02 pc 00063230 /data/app/com.ss.androi
2021-07-10 18:23:52
1361
2
原创 通过auditd找到干坏事的进程
最近发现服务器上某个进程会定期执行echo 1 > /proc/sys/vm/drop_caches 命令, 不知道哪个傻瓜干的, 这严重影响了服务器的性能, 问题是通过kernal log看到的[30352749.162493] sh (11336): drop_caches: 1[30356347.539229] sh (21947): drop_caches: 1[30359945.590508] sh (28856): drop_caches: 1[30363543.255243] s
2021-06-11 09:18:16
2360
原创 大量CLOSE_WAIT 状态链接问题
代码复线close_wait 状态服务端import socket #socket模块import timeHOST='127.0.0.1'PORT=50007s= socket.socket(socket.AF_INET,socket.SOCK_STREAM) #定义socket类型,网络通信,TCPs.bind((HOST,PORT)) #套接字绑定的IP与端口s.listen(1) #开始TCP监听,监听1个请求while 1: conn,ad.
2021-06-10 10:55:45
554
原创 linux kernel log 时间戳转可视化时间
#!/bin/bash if [ $# -ne 1 ];then echo "input an dmesg time" exit 1fi unix_time=`echo "$(date +%s) - $(cat /proc/uptime | cut -f 1 -d' ') + ${1}" | bc`echo ${unix_time}date -d @${unix_time} "+%Y-%m-%d %H:%M:%S"
2021-05-14 14:09:33
2041
1
原创 内存泄漏的一种分析思路
这个思路主要是dump应用程序的内存,然后通过strings程序来寻哪些字符串重复的比较多,可能是内存泄漏引起的。然后strings -a xxx.mem | sort | uniq -c | sort然后看重复率比较高的字符串,是否指向某些泄漏的内存。...
2021-02-04 13:22:01
262
原创 2021年计划
1 学会多思考,每天7半做20分钟冥想2 写一个基于arm v8操作系统,在树莓派上运行起来3 研究brpc和bthread代码4 继续体系学习android5 减肥到170斤一下6 买房7 晋升或者跳槽8 减少手机使用9 读20本书2021年最主要的就是多写少看...
2021-01-25 09:46:47
484
1
原创 Android 设置window信息到inputflinger
在Android InputDispatch事件派发->选择目标窗口一文中我们分析了Android 根据Wms的window信息来派发事件到window对应的应用程序,今天我们来分析下Android如何更新window信息到inputflinger。当window信息发生变化的时候Wms需要更新window的信息到inputflinger, Android使用InputMonitor.java类来完成操作,InputMonitor 更新window的函数为updateInputWindowsLw。 我们在
2021-01-20 22:24:45
1109
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人