首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

曝贾扬清第二跳,加入阿里!达摩院或将承载中国下一个AI愿景?

  • 24-03-05 02:21
  • 4184
  • 11794
blog.csdn.net

640?wx_fmt=jpeg


整理 | Jane

出品 | AI科技大本营(公众号id:rgznai100)


无论是国外还是国内,AI 界的人才动向一直是大家关注的焦点,从 2017 年3 月,吴恩达离职百度,开启创业之路;2018 年 9 月,李飞飞离职 Google 重返斯坦福,而两个月后,师生 cp 的另一位李佳也离职自主创业;国内,去年陆奇离职百度担任 YC 中国创始人及首席执行官,到年前腾讯 AI Lab 第一负责人张潼博士离职回归学界;产业界与学界之间的人才流动从未停止,作为这些备受瞩目的人才本身,他们自己也在不断寻求自我的突破中,作出一些新的选择。


AI科技大本营此前的一篇文章《透过腾讯张潼离职事件,看AI研究院如何才算成功?》,作者曾阐述了互联网公司研究院设立的本质、方式及作用。


我们不禁想问:大公司的前沿技术探索与学者的学术研究是真的无法“二者皆可兼得”?


从昨晚到今天,深度学习框架 Caffe 作者、也是 TensorFlow 核心开发者——贾扬清将离职 Facebook 加入阿里达摩院的消息引起了大家强烈高的关注。贾扬清任职 Facebook 担任 AI架构总监一职。虽然在知乎上已经有 二十多万的浏览量,也有各种猜测与评论之言,不过贾扬清本人并未正式回复。

     

640?wx_fmt=png


早在 2015 年的时候,CSDN 曾与贾扬清就 Caffe 的开发与未来规划进行了一次深度对话,“写 Caffe 的原因是因为不想写毕业论文”,也是这样一次“美好的放松“才有了广受大家喜欢与使用的一个高效、实用的深度学习框架,并对深度学习领域起到推动作用。当时,谈及自己对 Caffe 的期待与愿景,贾扬清曾说:“我希望Caffe能够成为机器学习和深度学习领域的Hadoop:人人了解,人人使用,人人获益”。


采访原文可阅读:

贾扬清:希望Caffe成为深度学习领域的Hadoop

https://www.csdn.net/article/2015-07-07/2825150


后来,贾扬清在 Google 实习期间参与 TensorFlow 的开发,并在 Google Brain 前后实习两年、工作两年后,于 2016 年 2 月离职 Google,加入 Facebook,担任 AI架构师,负责前沿 AI研究与平台开发。


个人第一次职业生涯的变动就引起了大家的关注与猜测。


不过之后贾扬清本人也亲自发表回复:


640?wx_fmt=png

     

从贾扬清本人近期的知乎动态上看,并没有太多更新,(二十多天前赞同了一条对电影《流浪地球》的回答,与一个月前赞同了陈天奇对“张潼离职腾讯”事件的看法)其余更多的在近一年前的时间里对”Caffe2 代码并入 PyTorch“的一些关注。


也有传言称,Caffe2 与 PyTorch 的合并也是使贾扬清离职 Facebook 的一个原因。不过随后也有一位“知情人士”出来进行了辟谣:

     

640?wx_fmt=png


然而,到今天消息爆出贾扬清加入阿里达摩院担任硅谷研究院副总裁,继续进行 AI平台打造与研发的工作,同样通过从职业发展的理性分析决策,与感性因素的集合,有人说最近贾扬清在家乡参观佛塔时所发的贴文,也暗示着这次选择。


640?wx_fmt=jpeg


阿里巴巴成立阿里全球研究——达摩院之时,表示将在 3 年 投资 1000 亿引进顶级人才。贾扬清还解释过,不过现在看来,可能是搭上了”时光机“?还是有”姻缘“?


640?wx_fmt=png


对于阿里达摩院而言,继去年9月正式公开人员架构和研究领域之后,就一直吸引了各方新鲜血液的加入。如果“贾扬清加入阿里达摩院”的消息的属实的话,那我们也可以做出一个预测:贾扬清加入阿里后也是在硅谷研究院,不是完整回归到国内阿里的团队,而阿里在做自己框架这件事一直不断努力,贾扬清也一直在 AI研发与平台开发的前沿,并深耕于此,阿里引入这样的顶尖人才,两者的结合将是一件激动人心的喜事。


我们也期待后续贾扬清可以做出成功的框架,落地的产品。



(本文为AI科技大本营整理文章,转载请微信联系 1092722531)



群招募


扫码添加小助手微信,回复:公司+研究方向(学校+研究方向),邀你加入技术交流群。技术群审核较严,敬请谅解。

640?wx_fmt=jpeg

推荐阅读:

  • 投稿近2000,NAACL 2019接收率仅为22.6%|附录取论文名单

  • 如何从零开始用PyTorch实现Chatbot?(附完整代码)

  • 成长路线图:如何成为一名Python开发者?

  • 春招已近,这份面试指南请收下

  • 20万赚200万,48岁创业者是这样吊打小鲜肉的!

  • 一部刷爆朋友圈的5G短片,看完才知道5G多暖多重要!

  • 他修过车、杀过鱼,最终进入阿里巴巴打造9个本地版支付宝!

  • 光凭 5G 根本无法解决宽带问题!

  • 为啥程序员下班后只关显示器从不关电脑?


                         640?wx_fmt=png

❤点击“阅读原文”,查看历史精彩文章。

高阶函数(Higher-Order Functions)是函数式编程中的核心概念,在 Vue 开发中同样大有用武之地。本文将深入探讨 Vue 中高阶函数的应用场景、实现方式以及最佳实践。

一、什么是高阶函数?

高阶函数是指满足以下任一条件的函数:

  1. 接收一个或多个函数作为参数
  2. 返回一个新的函数

在 Vue 上下文中,高阶函数可以帮助我们:

  • 抽象通用逻辑
  • 增强组件功能
  • 实现更灵活的代码复用

二、Vue 2 中的高阶函数应用

1. 高阶组件(HOC)模式

javascript
代码解读
复制代码
// withLoading.js export default function withLoading(WrappedComponent) { return { data() { return { isLoading: false } }, methods: { startLoading() { this.isLoading = true }, stopLoading() { this.isLoading = false } }, render(h) { return h(WrappedComponent, { props: { ...this.$props, isLoading: this.isLoading }, on: { ...this.$listeners, 'start-loading': this.startLoading, 'stop-loading': this.stopLoading } }) } } } // 使用方式 import withLoading from './withLoading' import MyComponent from './MyComponent' export default withLoading(MyComponent)

2. 指令高阶函数

javascript
代码解读
复制代码
// directiveFactory.js export function createResizeDirective(callback) { return { bind(el, binding) { const handler = () => { callback(el, binding) } el.__resizeHandler__ = handler window.addEventListener('resize', handler) }, unbind(el) { window.removeEventListener('resize', el.__resizeHandler__) } } } // 使用方式 import { createResizeDirective } from './directiveFactory' Vue.directive('custom-resize', createResizeDirective((el, binding) => { console.log('元素尺寸变化:', el.offsetWidth) }))

三、Vue 3 组合式 API 中的高阶函数

1. 组合函数工厂

javascript
代码解读
复制代码
// useFetchFactory.js import { ref } from 'vue' export function createFetch(options = {}) { const { baseUrl = '', defaultHeaders = {} } = options return function useFetch(resource) { const data = ref(null) const error = ref(null) const loading = ref(false) const fetchData = async (params = {}) => { loading.value = true try { const url = `${baseUrl}${resource}` const response = await fetch(url, { headers: { ...defaultHeaders }, ...params }) data.value = await response.json() } catch (err) { error.value = err } finally { loading.value = false } } return { data, error, loading, fetchData } } } // 使用方式 import { createFetch } from './useFetchFactory' const useUserFetch = createFetch({ baseUrl: 'https://api.example.com', defaultHeaders: { 'Authorization': 'Bearer token' } }) export default { setup() { const { data, fetchData } = useUserFetch('/users') return { users: data, loadUsers: fetchData } } }

2. 高阶组合函数

javascript
代码解读
复制代码
// withLogging.js export function withLogging(composable) { return function useComposableWithLogging(...args) { const result = composable(...args) // 添加日志功能 for (const key in result) { if (typeof result[key] === 'function') { const original = result[key] result[key] = async (...args) => { console.log(`调用 ${key}`, args) try { const res = await original(...args) console.log(`调用 ${key} 成功`, res) return res } catch (err) { console.error(`调用 ${key} 失败`, err) throw err } } } } return result } } // 使用方式 import { useFetch } from './useFetch' import { withLogging } from './withLogging' const useFetchWithLogging = withLogging(useFetch) export default { setup() { const { fetchData } = useFetchWithLogging('/api/data') // 所有调用都会自动记录日志 } }

四、高阶函数在 Vuex/Pinia 中的应用

1. Vuex 高阶 Action

javascript
代码解读
复制代码
// createAsyncAction.js export function createAsyncAction(action) { return async function wrappedAction({ commit }, payload) { commit('START_LOADING') try { const result = await action(payload) commit('SET_RESULT', result) return result } catch (error) { commit('SET_ERROR', error) throw error } finally { commit('STOP_LOADING') } } } // store.js import { createAsyncAction } from './createAsyncAction' const actions = { fetchUser: createAsyncAction(async (userId) => { const response = await fetch(`/users/${userId}`) return response.json() }) }

2. Pinia 高阶 Store

javascript
代码解读
复制代码
// createAuthStore.js export function createAuthStore(id, options = {}) { return defineStore(id, { state: () => ({ user: null, token: null, ...options.initialState }), actions: { async login(credentials) { const response = await api.login(credentials) this.user = response.user this.token = response.token options.onLogin?.(this.user) }, ...options.customActions } }) } // 使用方式 import { createAuthStore } from './createAuthStore' export const useAdminAuth = createAuthStore('adminAuth', { initialState: { role: 'admin' }, onLogin: (user) => trackLogin(user) })

五、高阶函数的最佳实践

1. 命名约定

  • 高阶组件:with[Feature] (如 withLoading)
  • 高阶函数:create[Functionality] (如 createFetch)
  • 装饰器函数:decorate[Behavior] (如 decorateWithLogging)

2. 类型安全(TypeScript)

typescript
代码解读
复制代码
// 高阶组件类型定义 import { Component, ComponentPublicInstance } from 'vue' type WithLoadingProps = { isLoading: boolean } export function withLoadingextends Component>( WrappedComponent: T ): Component & { new (): ComponentPublicInstance<WithLoadingProps> } { // 实现... }

3. 性能优化

vbnet
代码解读
复制代码
// 记忆化高阶函数 function memoize(fn) { const cache = new Map() return function memoized(...args) { const key = JSON.stringify(args) if (cache.has(key)) return cache.get(key) const result = fn(...args) cache.set(key, result) return result } } const memoizedFetch = memoize(fetch)

六、实际应用场景

1. 权限控制高阶组件

javascript
代码解读
复制代码
// withAuthorization.js export default function withAuthorization(requiredRole) { return function wrapComponent(WrappedComponent) { return { computed: { hasAccess() { return this.$store.getters.userRoles.includes(requiredRole) } }, render(h) { return this.hasAccess ? h(WrappedComponent, { ...this.$attrs, ...this.$props }) : h('div', '无权限访问') } } } }

2. 表单验证高阶函数

javascript
代码解读
复制代码
// createFormValidator.js export function createFormValidator(rules) { return function validate(formData) { const errors = {} Object.entries(rules).forEach(([field, fieldRules]) => { fieldRules.forEach(rule => { if (!rule.validator(formData[field])) { errors[field] = errors[field] || [] errors[field].push(rule.message) } }) }) return { isValid: Object.keys(errors).length === 0, errors } } } // 使用示例 const validateLogin = createFormValidator({ username: [ { validator: val => val.length >= 3, message: '至少3个字符' } ], password: [ { validator: val => val.length >= 8, message: '至少8个字符' } ] })

七、注意事项

  1. 避免过度抽象:只在确实存在重复模式时使用高阶函数
  2. 调试难度:高阶函数会增加调用栈深度,适当添加调试信息
  3. 性能影响:注意闭包和内存使用,避免不必要的函数创建
  4. 可读性平衡:确保代码对团队成员保持可读性

八、总结

Vue 中的高阶函数提供了强大的抽象能力,能够显著提升代码的复用性和可维护性。无论是 Vue 2 的选项式 API 还是 Vue 3 的组合式 API,高阶函数都能找到其用武之地。合理运用高阶函数模式,可以帮助我们:

  • 减少重复代码
  • 统一处理横切关注点(如日志、权限)
  • 创建更具表达力的 API
  • 构建可扩展的架构

掌握高阶函数技巧,将使你的 Vue 开发水平更上一层楼,写出更加优雅和高效的代码。

注:本文转载自blog.csdn.net的AI科技大本营的文章"https://blog.csdn.net/dQCFKyQDXYm3F8rB0/article/details/88097076"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top