首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

对线面试官 - Synchronize Volatile | 通俗易懂的白话文讲解其原理实现

大星:Synchronized既保证了原子性也保证了可见性、可重入(自己不停地加锁) 面试官:为什么synchronized可以保证共享变量的可见性?...大星:首先要考虑实际的业务场景,因为读不加锁的话可能会产生脏读的情况,当然如果业务场景并不会依据该读取结果做一些写的操作。那就是没有问题的。...大星:不能使用String 常量、Integer、Long等基础数据类型,容易和其它写的代码或类库使用一个常量,这样会导致如果是一个线程访问则会重入,非一个线程则会死锁。...此时这个f就会被copy一份到对应线程的工作内存上,无论哪个线程对f执行操作都是现在自己的工作内存去发生改变,然后刷回共享内存,但时另外一个线程也无法确定什么时间从共享内存将改变后的值刷回自己的工作内存...希望你能考虑下我们的公司 大星:感谢您的评价,一定会认真考虑的

12130

浅谈滴滴算法

1.为什么我们需要更好的算法 说到滴滴的算法,大家可能感觉到既神秘又好奇,从扬召到抢,我们又是如何演进到今天大家的打车体验的呢,我们首先来看一看,好的算法为什么是出行行业不可或缺的能力...这就是为什么这个问题依然是非常复杂的原因。...▍如果是1个订单、1个司机 看上去似乎就非常简单了,我们直接把这个订单指派给这个司机就好了嘛。 “那么为什么有时候附近有辆空车却不能指派给你呢?”...,这个问题在业内也被称为Dynamic VRP问题,这个Dynamic也就是随时间时序变化的意思,这也就是为什么,滴滴的问题远复杂于物流行业的相对静态的货物和路线的规划问题。...这个Idea其实也非常直观,由于用户订单的产生和司机的出现往往并不在同一时间点,在时间维度上贪婪的分单方式(即每个订单出现时即选择附近最近的司机)并不能获得全局最优的效果。

1K30
您找到你想要的搜索结果了吗?
是的
没有找到

滴滴首席算法工程师为你揭秘滴滴出行算法原理

为什么我们需要更好的算法 首先来看一看,好的算法为什么是出行行业不可或缺的能力?...这就是为什么这个问题依然复杂的原因。...▍如果是1个订单、1个司机 看上去似乎就非常简单了,我们直接把这个订单指派给这个司机就好了嘛。 “那么为什么有时候附近有辆空车却不能指派给你呢?”...这个问题在业内也被称为Dynamic VRP问题,这个Dynamic也就是随时间时序变化的意思,这也就是为什么,滴滴的问题远复杂于物流行业的相对静态的货物和路线的规划问题。...由于用户订单的产生和司机的出现往往并不在同一时间点,在时间维度上贪婪的分单方式(即每个订单出现时即选择附近最近的司机)并不能获得全局最优的效果。

4.1K32

浅谈滴滴算法

为什么我们需要更好的算法 说到滴滴的算法,大家可能感觉到既神秘又好奇,从扬召到抢,我们又是如何演进到今天大家的打车体验的呢,我们首先来看一看,好的算法为什么是出行行业不可或缺的能力?...这就是为什么这个问题依然是非常复杂的原因。...看上去似乎就非常简单了,我们直接把这个订单指派给这个司机就好了嘛。 “那么为什么有时候附近有辆空车却不能指派给你呢?”...,这个问题在业内也被称为Dynamic VRP问题,这个Dynamic也就是随时间时序变化的意思,这也就是为什么,滴滴的问题远复杂于物流行业的相对静态的货物和路线的规划问题。...这个Idea其实也非常直观,由于用户订单的产生和司机的出现往往并不在同一时间点,在时间维度上贪婪的分单方式(即每个订单出现时即选择附近最近的司机)并不能获得全局最优的效果。

91610

浅谈滴滴算法

为什么我们需要更好的算法 说到滴滴的算法,大家可能感觉到既神秘又好奇,从扬召到抢,我们又是如何演进到今天大家的打车体验的呢,我们首先来看一看,好的算法为什么是出行行业不可或缺的能力...这就是为什么这个问题依然是非常复杂的原因。...看上去似乎就非常简单了,我们直接把这个订单指派给这个司机就好了嘛。 “那么为什么有时候附近有辆空车却不能指派给你呢?”...,这个问题在业内也被称为Dynamic VRP问题,这个Dynamic也就是随时间时序变化的意思,这也就是为什么,滴滴的问题远复杂于物流行业的相对静态的货物和路线的规划问题。...这个Idea其实也非常直观,由于用户订单的产生和司机的出现往往并不在同一时间点,在时间维度上贪婪的分单方式(即每个订单出现时即选择附近最近的司机)并不能获得全局最优的效果。

2.5K52

浅谈滴滴算法

1.为什么我们需要更好的算法 说到滴滴的算法,大家可能感觉到既神秘又好奇,从扬召到抢,我们又是如何演进到今天大家的打车体验的呢,我们首先来看一看,好的算法为什么是出行行业不可或缺的能力...这就是为什么这个问题依然是非常复杂的原因。...▍如果是1个订单、1个司机 看上去似乎就非常简单了,我们直接把这个订单指派给这个司机就好了嘛。 “那么为什么有时候附近有辆空车却不能指派给你呢?”...,这个问题在业内也被称为Dynamic VRP问题,这个Dynamic也就是随时间时序变化的意思,这也就是为什么,滴滴的问题远复杂于物流行业的相对静态的货物和路线的规划问题。...这个Idea其实也非常直观,由于用户订单的产生和司机的出现往往并不在同一时间点,在时间维度上贪婪的分单方式(即每个订单出现时即选择附近最近的司机)并不能获得全局最优的效果。

1.3K21

浅谈滴滴算法

为什么我们需要更好的算法 说到滴滴的算法,大家可能感觉到既神秘又好奇,从扬召到抢,我们又是如何演进到今天大家的打车体验的呢,我们首先来看一看,好的算法为什么是出行行业不可或缺的能力...这就是为什么这个问题依然是非常复杂的原因。...看上去似乎就非常简单了,我们直接把这个订单指派给这个司机就好了嘛。 “那么为什么有时候附近有辆空车却不能指派给你呢?”...,这个问题在业内也被称为Dynamic VRP问题,这个Dynamic也就是随时间时序变化的意思,这也就是为什么,滴滴的问题远复杂于物流行业的相对静态的货物和路线的规划问题。...这个Idea其实也非常直观,由于用户订单的产生和司机的出现往往并不在同一时间点,在时间维度上贪婪的分单方式(即每个订单出现时即选择附近最近的司机)并不能获得全局最优的效果。

1K30

浅谈滴滴算法

为什么我们需要更好的算法 说到滴滴的算法,大家可能感觉到既神秘又好奇,从扬召到抢,我们又是如何演进到今天大家的打车体验的呢,我们首先来看一看,好的算法为什么是出行行业不可或缺的能力...这就是为什么这个问题依然是非常复杂的原因。...▍如果是1个订单、1个司机 看上去似乎就非常简单了,我们直接把这个订单指派给这个司机就好了嘛。 “那么为什么有时候附近有辆空车却不能指派给你呢?”...,这个问题在业内也被称为Dynamic VRP问题,这个Dynamic也就是随时间时序变化的意思,这也就是为什么,滴滴的问题远复杂于物流行业的相对静态的货物和路线的规划问题。...这个Idea其实也非常直观,由于用户订单的产生和司机的出现往往并不在同一时间点,在时间维度上贪婪的分单方式(即每个订单出现时即选择附近最近的司机)并不能获得全局最优的效果。

1.5K20

对线面试官-Redis(为什么这么快为什么能抗住高并发)

大星:Redis 为什么可以抗高并发。 其次从IO模型角度来说,Redis使用的是IO多路复用模型,使得它可以在网络IO操作并发处理数十万的客户端网络连接,实现非常高的网络吞吐率。...从这个角度来看Redis基于内存的数据库快是毋庸置疑的。 面试官:刚才你提到了IO多路复用模型,其实也就是Redis 线程模型,能详细说下Redis的IO多路复用的原理吗? 大星:好的。...大星:之所以 Redis 的文件事件是进程,单线程模型,但是确保持着优秀的吞吐量,IO 多路复用起到了主要作用。...如图: 大星:因此Redis 把所有连接与读写事件、还有提到的时间事件一起集中管理,并对底层 IO 多路复用机制进行了封装,最终实现了进程能够处理多个连接以及读写事件。...面试官:回答的不错 大星:谢谢,如果对Redis的IO多路复用模型、以及Redis服务器处理的事件感兴趣,后续可以出一片单独的文章进行讲解哈。

23220

滴滴“不要脸只要钱”,算法驱动的业务是否需要监管体系

就赶紧打电话给司机师傅。 电话那头,师傅已接到电话就很紧张,“对不起,也没办法,现在这个还没结束,乘客修改改了目的地了,所以我还得等一会。”...同样的情况,前两天也碰到了,只不过不同的是,那一次不是那个坐车的,距离目的地还有大概2公里,滴滴就自动的给司机派了下一个。...司机则忐忑不安,因为这种情况,他不能关闭的订单,同时也无法为下一个乘客服务,所以下一个乘客可能会投诉他。...一路上,这个司机师傅特别郁闷,跟我讲了非常多滴滴这几年的问题,比如全自动,但是的规则很混乱,有的时候司机跑2公里去接一个,最终距离只有2公里; 比如现在为了提高早高峰的车的使用率,...司机分层,将司机分层,根据服务满意度,等来提供多样化,分层的单机制。 增值服务,将现在无差别,或者差别不大的出行服务更加细分,将现在不能收钱的服务细分出来,获得盈利。

54430

在Jetson NANO上运行Yolov5,通过IMX477 CSI 相机进行目标检测

准备工作: 与 Jetson Nano 一起使用的最常见的相机之一是 树莓 V2,但如果您需要更高的分辨率怎么办?...最近尝试将 Waveshare IMX477 CSI 摄像头用于一个项目,但无法将其连接到电路板。最后,在尝试了几种不同的方法后,想出了一个简单的过程,并决定与其他人分享。...推入相机色带并确保相机色带上的针脚朝向 Jetson Nano 模块。将塑料连接器向下推。...ls /dev/video0 也可以利用一段python代码(见菜鸟手册(2):给Jetson Nano安装树莓摄像头 ),使用OpenCV从相机捕获帧。...你可以根据这个教程进行安装: https://www.elinux.org/Jetson_Zoo 推理 在 Jetson nano 上克隆 JetsonYolo 存储库。

4.7K30

MYSQL ICP 索引下推 为什么他行,你不行?

MYSQL 的ICP 估计大家也都知道,Index condition pushdown,但这个东西怎么用,有什么用,什么时候用,估计能答得上来的人就不多了。...然后,存储引擎通过使用索引项来评估推入的索引条件。并且能用到的查询类型 range ref eq_ref 等类型。...,使用的也是二级索引,为啥还不走) 4 ICP 不支持在虚拟列上创建的二级索引 (是实体列,为啥不走) 5 条件是子查询的走不了 (不是子查询,为啥不走) 6 条件是函数,也不能走 (不是函数...,给了具体的值,为啥还不走) 7 触发条件的不能走 (不是,为啥还不走) 上面的符合5.7 上列出来不能走ICP的条件,上图中的查询也符合走ICP的条件,为什么不走呢。...(注意:是大部分情景) 在这样的情况下,去走ICP ,所以在都符合官7条的那些数据的情况下,为什么不走ICP ,大部分原因是通过非索引包含的条件并不比单纯走索引定位的数据量少。

2.2K20

滴滴叶杰平:年运送乘客百亿次,AI如何“服务”出行领域?| BDTC 2019

今天重点讲讲在出行领域,AI如何落地创造价值。 ? 出行场景一个最重要的模块是,如何匹配司机和乘客。在滴滴,单系统会每2秒钟做一次订单匹配,把乘客和司机做最优匹配。...早期,我们算法的目标是在提升用户体验到同时让2秒钟之内更多乘客被应答。2016年,我们思考算法如何更加优化,比如考虑能不能更长时间优化,比如优化1小时或者1天。...2017年我们开发了一套基于强化学习的智能匹配系统,把目标从2秒钟最优改成了1天最优,2017年上线取得显著的收益,目前全国很多的城市都是用了基于强化学习的智能单系统。...实际上,2017年的时候我们的还有很多不足,只能模拟简单的时间、空间,不能模拟动态的复杂信息,比如天气,这个区域如果发生下雨了,对会产生很大的影响,如何把这些信息都包括进来? ?...今年10月,我们基于强化学习的网约车解决方案获得了2019年度INFORMS Daniel H. Wagner Prize,这是这个奖项22年以来第一次颁给中国公司。

87010

JavaScript 设计模式学习第二十三篇-命令模式

对于通缉令发送者蛋黄派来说,不需向某个特定单位通知通缉令,而通缉令发布之后,蛋黄也不用管是谁来完成这个通缉令,也就是说,通缉令的发送者和接受者之间被解耦了。...在这个例子中,我们将操作马里奥的行为包装成命令类,操作的发送者只需要持有对应的命令实例并执行,命令的内容是具体的行为逻辑。...按下操作按钮之后会发生事情这个逻辑是不变的,而具体发生什么事情的逻辑是可变的,这里我们可以提取出公共逻辑,把一定发生事情这个逻辑提取到 setCommand方法中,在这里调用命令类实例的 execute...命令模式升级 可以对这个项目进行升级,记录这个角色的行动历史,并且提供一个 redo、undo 按钮,撤销和重做角色的操作,可以想象一下如果不使用命令模式,记录的 Log 将比较乱,也不容易进行操作撤销和重做...每次执行操作时将当前操作命令推入撤销命令栈,并将当前重做命令栈清空; 3. 撤销操作时,将撤销命令栈中最后推入的命令取出并执行其 undo 方法,且将该命令推入重做命令栈; 4.

32620

模块化与解耦(转)

第三应该是BAT这样的有很多BU的超级公司,或者一些先进的开源开发者们,模块化能够更好的实现跨app的代码和功能的复用, 能够更好的共享资源,避免重复造轮子。 那么为什么要做模块化?...举个例子,有个模块 Utils 里面放了大量的category工具方法等,在日常UI产品开发中,依赖这个Utils会很方便,但是现在要写一个比较基础的模块,应该就要求复用度更高一些,这个时候需要用到...app”, 所以删掉工程里面的Common吧,再遇到不知道放哪的代码,就要好好思考模块的设计,再不行如果具有可复用性就建一个模块吧,为什么不可以呢?...解耦与通信 先说说为什么要解耦吧,模块化并不是说你把工程的代码拆分成 50 个 pod 或者framework就算完事了,要实现模块之间真正的解耦才算真正的模块化,否则如果模块之间还都是互相调用代码,...App架构里面都会有“统一跳转” 这一套东西的,这个不光是对模块解耦有帮助,对于统一化运营都是有极好的帮助的,比如app里面的任何页面,或者任何操作都是通过一个URL来唤起的话,这样是不是就把各个复杂的业务之间解耦了呢

7.4K40

oracle 查询转换初探

如果视图定义中包含下列内容,将不能做视图合并: · 集合操作符(UNION,UNIONALL,INTERSECT,MINUS) · connectby子句 · rownum伪列 做这些限制是为了防止视图合并之后得到错误的结果集...不能视图合并的例子: 复杂视图合并 ‍ 复杂视图合并技术允许对包含gourp by或者distinct的视图做展开。...,同时受OPTIMIZER_FEATURES_ENABLE参数控制: 外连接视图合并 使用了外连接的sql中,视图合并需要满足下列条件之一: · 视图为外连接的驱动表 · 视图的定义只包含表...谓词推入 优化器在处理不能合并的视图时,可以选择将外部查询的谓词推入该视图的查询块,或者将视图中的谓词拉出到主查询。这样更早的处理视图的结果集,有可能会减小后续步骤操作所需的成本。...首先看一下星型转换的例子: 注意到执行计划首先对各个维度表过滤出结果集,然后访问sales表连接列上的索引,做bitmap and操作之后,回表访问数据。

1.5K50

解密“达达-京东到家”的订单即时派发技术原理和实践1、前言2、关于作者3、订单即时派发架构的演进5、订单派发方案的具体实现6、结语附录:更多相关技术文章

理清核心问题的答案,我们的系统便成为了可能。 基于以上的原理,订单派发模式就可以逐渐从抢池的订单显示演变成系统: ? 我们将会: 1)记录商户发单行为; 2)骑士配送日志及运行轨迹等信息。...随着时间轮的转动,当TimerTaskList到期时,原本定时为450ms的任务还剩下50ms的时间,还不能执行这个任务的到期操作。...便会有个时间轮降级的操作,会将这个剩余时间50ms的定时任务重新提交到下一层级的时间轮中,所以该任务被放到第二层时间轮到期时间为 [40ms,60ms) 的时间格中。...再经历了40ms之后,此时这个任务又被触发到,不过还剩余10ms,还是不能立即执行到期操作。...这些不会被消费的数据会进入到抢池中。从场景的需求来看,这些场景是可以被接受的,当然了,我们系统会有脚本来进行定期的筛选,将那些进入抢池的订单进行再次

85020

X3+大疆无人机-SLAM目建图.中(找bug)

X3+大疆无人机-SLAM目建图.上 X3+大疆无人机-SLAM目建图.ROS包制作 X3+大疆无人机-SLAM目建图.中(艰难的编译) 也不清楚,为啥昨天的文章发了以后掉了3个粉丝...,对于我这种18线(可能是180线)的小号主,掉一个粉丝都很伤心,增加三个都可以高兴一整天。...如果有可能,下次取关前可以给我留一段言,让知道是为什么?...大概可以知道是这个库的毛病 这个地方一看就是坑 去看看自Github上面的库额度版本 pkg-config --modversion opencv 3.4的版本 /usr/local/lib...头文件在此 找到了一个解决的办法,就是说版本的事情 库倒是平平无奇 就是这个地方的毛病,就是怎么改都编译不过 依赖的两个库,CMake最近好像学会了 ORB ROS2 依赖的库 改成这样

48920

Google 工程师:教你用树莓 + Arduino + TensorFlow 搭建图像识别小车

这个课题里不需要) █ 二、TensorFlow 这是课题的核心部分,反而操作起来最简单,因为一切都在这里写清楚了,按部就班就行。运行代码在这里。...于是干脆用Arduino负责机械(马达+舵机),相当于身体;树莓只负责图像识别,相当于大脑。 Arduino不是Linux系统,不能直接ssh进去写程序,需要在外写好后编译上传。...python代码在这里,用到了自己写的库,用来检测键盘按键。这个库将次按键匹配到前进/后退/转/停止等行为;但我希望实现的是长按键前进/后退/转,不按键时停止。...在车上装了舵机(Servo),控制摄像头的上下转动。操作很直观,看代码就能理解。没有装超声探头,这个可以帮助你检测障碍,在撞墙前强行停止。 如果你想远程看摄像头的实时画面,VNC不能胜任。...可以考虑这个方案。但这样的话TensorFlow就不能再用摄像头了。应该有一个共用的方案,没有探究。 差不多就这些了,的代码没有太多注释,等有空往上加。如果你有疑问,可以留言问我。

3.1K111

分布式事务选型及对比

当用户进行下单以后,会去调用服务进行,即向服务数据库中插入一条业务。...成功之后,订单服务在执行后面的业务代码中,报错了 此时订单服务事务回滚,而服务的事务已经提交了,导致了数据的不一致。 此时,小伙伴可能有疑问:服务报错呢?会不会也产生分布式事务问题?...加入事务组 添加事务组是指参与方在执行完业务方法以后,将该模块的事务信息通知给TxManager的操作。...参与方接收到通知以后,再进行相应的事务提交或者回滚操作,保持数据的一致性 优点 保证数据的强一致性 缺点 可能会造成死锁的现象,比如,订单服务调用服务成功以后,订单服务还没执行完毕就宕机,此时,TxManage...并没有收到通知,服务的事务也不能顺利进行,导致死锁。

1K40
领券