目录

程序员子悠 · 好记性不如烂笔头

技术人生 X 人生技术

重磅!俄罗斯将与全球互联网断开,启用本国互联网“Runet”!

经历过宿舍断网,经历过公司断网,没想到 21 世纪我们还能经历国家断网! 最近网上有消息说是随着俄罗斯和乌克兰的冲突的加剧,继西方在金融方面针对俄罗斯进行制裁之后,又将在互联网方面进行制裁。 乌克兰互联网名称与数字地址分配机构代表、乌克兰副总理兼数字化转型部长米哈伊洛·费多罗夫又要求俄罗斯的顶级域名例如 .ru、.рф 和 .su 连同其关联的安全套接字层(SSL)证书一起被吊销。他还要求欧洲、中东和中亚部分地区的区域互联网注册机构 RIPE NCC 撤销俄罗斯及其本地互联网注册中心(LIR)使用其分配的 IPv4 和 IPv6 地址,并封锁其 DNS 根服务器。 通常情况下,面对这种威胁,如果没有任何的预防和应对措施,别说俄罗斯了阿粉觉得任何一个国家的互联网生态系统都会受到巨大打击,而且民用互联网更容易受到攻击,普通民众的银行证书和网站密码泄露的可能性会大大增加。 想象一下,让你一天不上网断开所有的网络,不能聊微信,不能打游戏,不能刷抖音,不能居家办公,不能看阿粉的文章推送是多么的难受! 不过俄罗斯作为一个大国,早在 2019 年的时候就想到了这种情况,当时普京签署了一项名叫《主权互....

分享几个阿粉常用的 IDEA 插件,每一个都能提高工作效率

作为一个程序员,虽然阿粉不承认自己每天都在搬砖,但是事实告诉阿粉自己就是在搬砖,那如何高效的搬砖就成了阿粉持续研究的课题,毕竟通过高效的搬砖过后,阿粉才能有时间好好摸鱼。今天阿粉就把自己工作中最常用的几个 IDEA 插件分享给大家,帮助大家提高工作效率(更好的搬砖)。 GenerateAllSetter Postfix Completion 相信大家在日常写代码的时候,经常会遇到 DTO,VO 等其他的 POJO 进行互换的场景,字段的类型和名称都相同,就是需要完全的一个个进行赋值,这里一般会有两种写法,作为有经验的程序员相信大家都会使用 BeanUtils.copyProperties() 的实现,不管是采用哪个工具包下的 copy 方法,原理都是一样的,只是有的效率高点有的效率低的,但是不管怎么样还是很方便的; 但是对于一些有性能要求或者字段不多的实体来说,想最大的提升性能,那就只能一个个字段手动进行 set 和 get 了,这个插件的功能就是帮助大家在满足性能的前提下尽量的减少无效的工作量。 通过安装了这个插件过后,在遇到我们需要一个个手动进行 set 和 get 的场景的时候,....

作为一名工作了7、8年的程序员,感觉啥都会,但是又啥都不精通,怎么办?

最近在逛知乎的时候,遇到上面标题的这个问题,不知道大家看到这个问题是怎么想的,阿粉看到这个还是有点感触的,作为一个即将达到这个工作年限的人,阿粉也经常在思考类似的问题。 阿粉个人还是比较赞同排名第一的回答,这个回答主要从两个方面来分析 选择合适的赛道 技术人员也要有赛道的概念,这里的赛道指的是互联网领域的细分行业,比如说电商领域,社交领域,区块链领域,金融领域,广告领域等。 其实很多技术人员对这个概念并不认同或者说即使认同也不会这么做,都觉得技术人员只要搞好技术就行了,做金融也是写 Java 做电商也是写 Java,反正都是写代码,只要搞好自己的技术并不关心具体的业务。 但是往往忽略了技术是为了业务服务的。见过很多程序员在做需求或者业务的时候只考虑技术层面的东西,并不会主动去了解业务,很多时候这是种不成熟的表现,我们要明白所有的技术都是为了业务服务的,抛开业务场景讨论技术都是不成熟的,技术的发展和升级最终的结果都是业务价值的体现。任何业务需求如果没有产生价值,背后的技术再厉害,再牛逼也没有用,不会有人歌颂,不会有人记住。 而且每个行业因为行业本身的特点就决定了需要使用什么样的技术,比如....

研究生写脚本公开发布代抢九价疫苗被抓!

有道是知识改变命运,有的人因为有了知识改变了自己的人生轨迹,走上人生巅峰,迎娶白富美;而有的人缺因为有了知识却走了违法犯罪的道路。 最近有新闻报道在江西南昌的一个研究生刘某,听说自己的女朋友一直抢不到 HPV 九价疫苗,就想着利用自己的技术,写了一个抢九价疫苗的脚本程序,而且非常顺利的帮到自己的女朋友抢到了九价疫苗。 原本以为故事发展到这里就结束了,女朋友顺利的打上了疫苗,一切都很美好,同时这个程序员刘某技术高超,成功的在女朋友面前秀了一把。 然而缺乏法律知识的两个人,大肆旗鼓的传播,还把这件事情公开到网络上,利用小红书,朋友圈等社交软件散布自己能代抢九价疫苗的消息,然后通过收取 800 到 1000 不等的费用来帮忙别人进行抢购。 原本刘某还想着自己第一次能帮女朋友抢到是因为运气好,没想着靠这个挣钱,但是由于需要代抢的人较多,而且每个还能收取高额的佣金,就没有抵挡住诱惑,开始干起来代抢疫苗的勾当。 可能是因为成功的次数的较多,所以就更加猖狂,多次在微信朋友圈,小红书等各大社交平台发布消息,说可以有偿代抢疫苗,预约九价疫苗 900 ,增加 100 还可以提供加急的服务。 这简直是把火车....

分享几款我在高频使用的 Chrome 浏览器插件,每一个都好用到飞起

世上浏览器千千万,唯 Chrome 独领风骚,Chrome 浏览器的另一个亮点就是它拥有强大的扩展插件,很多好用的功能都可以通过插件来使用,今天就给大家分享几个阿粉常用的 Chrome 浏览器插件,包含编程和阅读相关,如果你有更好用的浏览器插件,欢迎在评论区留言,让更多人使用起来。 编程相关 JSON-handle 不管是不是 Java 程序员,日常工作中必不可少的会接触到 JSON 的使用,当我们做前后端对接的使用,很多时候的入参和出参都是 JSON 格式的数据。json-handle 就是一款渲染 json 格式字符串的插件工具,它可以将一个字符串转化成美观的 json 格式,也可以将 json 格式压缩成一行字符串,使用起来非常方便和简单。 安装过后,点击浏览器搜索框右侧的图标就可以看到下面这个弹框,然后将已经有的 json 数据贴进去,点击 ok 即可。 弹框中还提供了一些快捷操作,比如可以通过 aline 按钮,将 json 格式转换成一行 {"l1":{"l1_1":["l1_1_1","l1_1_2"],"l1_2":{"l1_2_1":121}},"l2":{"l2_1....

轻松破解IDEA 2022,亲测有效!

前言 本教程适用于 IntelliJ IDEA 2022.x 以下所有版本,请放心食用~ 本教程适用 Windows/Mac/Linux 系统,文中以 Windows 系统为例做讲解,其他系统按照教程顺序即可。 仅以下文记录本人 IntelliJ IDEA 2022.x 版本的激活破解全过程,步骤非常详细哟~ 关注公众号:Java极客技术 回复 bbbb16 ,无套路获取破解补丁!(提前下载备用) 一、下载最新的 IDEA 2022 版本安装包 我们先从 IDEA 官网下载 IDEA 2022 最新版本的安装包,下载链接如下: https://www.jetbrains.com/idea/download 点击下载,静心等待其下载完毕即可。 二、先卸载老版本的 IDEA 1、卸载、干净 如果电脑上之前有安装老版本的 IDEA, 需要先卸载干净,否则可能安装失败! 一定要先卸载干净掉老版本的 IDEA。 出现IDEA卸载界面,全部勾选选择项,表示同时删除配置文件,然后点击Uninstall 卸载成功后,点击关闭 三、开始安装 IDEA 2022 版本 安装完成后,勾选 Run Intel....

Java 中如何加密配置文件中的数据库账号和密码

作为程序员每天的开发工作都离不开跟数据库打交道,而且我们的应用程序往往都会配置数据库的链接,那你有没有想过,任何一个能接触到我们项目代码的人员,都可以看到配置文件里面的账号秘密? 相信很多人的项目里面配置文件都是类似这样写的 ############### Mysql配置 ######################### spring.datasource.type=com.zaxxer.hikari.HikariDataSource spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://127.0.0.1:3306/abc?useUnicode=true&characterEncoding=utf-8&useTimezone=true&serverTimezone=GMT%2B8 spring.datasource.username=root spring.datasource.password=1....

关于 Java 的可变参数你真的了解吗?

我们都知道 Java 支持可变参数的形式定义方法,这种语法糖在某些时候可以简化我们的代码,但是关于可变参数是如何实现的以及其他的更多细节,你真的知道吗?今天阿粉就带你来了解一下。 可变参数方法的定义 首先看下可变参数方法在代码上是如何定义的,如下所示: public static void method1(Integer id, String... names) {       System.out.println("id:" + id + " names:" + names.length); } 通过上面的示例,我们可以看出在定义方法时,在最后一个形参类型后加上三点 …,就表示该形参可以接受多个相同类型的参数值,多个参数值被当成数组传入。这里我们需要注意几个点: 可变参数只能作为函数的最后一个参数,在其前面可以有也可以没有任何其他参数; 由于可变参数必须是最后一个参数,所以一个函数最多.....

2021 StackOverflow 开发者年度调查报告

StackOverflow 发布了 2021 年度开发者调查报告,整个调查问卷参与人数达到八万多,来自全球 180 多个地域。问卷内容包含基本信息,教育、工作经历,用到的技术相关,社区相关,人口相关,最终问题六个部分,每个部分由多个随机问题组成。涉及到的问题有受访者的所在地域,工作年限,薪资水平,性别,性取向,以及用到的语言和工具等。 本文来自公众号「Java 极客技术」欢迎关注,获取更多优质 Java 相关文章 基本信息 在整个参与问卷调查的人群中,美国人数占比 18.33%,15288 份;中国占比 1.27% ,1055 份,相比占比还是蛮低的,不过也可以理解,毕竟国内会科学上网的并不多。不过让阿粉好奇的是阿三竟然是排名第二,达到了 12.61%。前十的国家就提供了 60% 的份额,相对来说,其他地域提供的占比还是偏低,看下面 TOP 10 的名单。 报告中提到 53.06 % 的人编写第一行代码的时候是 11-17 岁,说明编程的年纪在慢慢年轻化,很多人在大学前都已经接触到编程了,其实这一点在国内这几年也在慢慢的发生变化,很多地方已经把 Python 纳入了课程当中。不像阿粉,....

五年,人生有多少个五年?

五年的时光说长不长说短也不短,在创维酷开的五年时光经历了从一个毕业生到职场人的转变,自己真正成长了很多,五年的时光前三年是一个阶段,后两年是一个阶段,每个阶段都接触着不同的人,做着不同的事情。 感恩 这几年很感恩公司,提供了一个很好平台,让我可以有实现自我的机会,从 2015 年的实习开始进入酷开这个大家庭,到后来的入职和转正,再到后期的主程,跟着公司一起成长进步,也见证了公司很多高光时刻;很感恩同事,这几年进进出出共事过好多同事,大家一起做着有意思的事情,从刚开始的三四个人的小团队开始,到现在日渐完善的队伍,整个广告系统也进入的正轨,有前端,有后台,有数据,有算法,不像以前三四个人什么都自己做,不过也正是经历了那个什么都要自己做的阶段,才能成长的更多;更感恩良师益友的师父,在这几年对我的帮忙,以及对我信任和鼓励,不仅工作中给予支持和辅导,而且每次在我迷茫或者心情不好的时候都能及时的提供帮助,很多次的交流虽然时间不长但是都受益匪浅。**特别是教导我要专注一个领域的行业积累,在一个行业里面深耕下去,未来才能有更好的发展。**这更加坚定了我要在互联网广告行业深耕下去的信念。 回顾 在酷开的....

2020 年终总结——这是最好的时代也是最坏的时代

2020 年已经接近尾声,又到了该进行年度总结时候,回想 2020 一年,会发现这一年过的真是快。这一年注定是一个不平凡的一年,年初因为疫情原因,复工延迟了很多天,等到完全复工基本上都过去四分之一了。虽然这一年过的很快,而且也没有完成去年立得 Flag ,但是总的来说这一年还是有很多其他收获的。 工作 今年工作方面还算顺利,小组团队人数也有所增加,整个团队负责的业务也在快速增长,虽然说今年整个大环境不怎么样,公司也面临各种挑战,领导层的决策也经常变动,整个年度的任务还是很繁重的,特别是后面几个月由于种种原因加班也比较多。从业务需求上来说今年也实现了几个比较重要和挑战的产品需求,主要有联合频控,家庭去重,全网通投,IPDX,每一项除了其本身的价值之外都还挺有意思和挑战的,通过这几个功能的实现再结合程序化广告内容使得自己对整个广告行业也有来更深的认识。 今年还有个比较重要的任务就是接入拓展终端,将拓展部门拓展的新的终端接入到我们的广告系统,进行广告的投放。期间由于终端的特殊性以及部分运营商出网情况的不同涉及到对应地域解析也是很有意思的一个场景,最后也给出了相关的解决方案。 另外一个从年初就....

计算广告——常见的几种广告形式以及 OTT 广告与在线广告区别

前言 前面两篇文章给大家介绍了互联网广告的发展历程以及计算广告要解决的核心问题,没看过的朋友可以去花几分钟看一下,简单的做个了解,这篇文章用简短的篇幅给大家介绍一下常见的广告模式以及 OTT 广告与互联网广告一些区别。我们闲话少说,直接进入正题。 常见广告模式 首先广告模式目前分为两大类,一是品牌广告,另一类是效果广告。品牌广告和效果广告在整个投放的过程中差别还是很大的,在互联网广告中效果广告更为常见。 品牌广告 线下广告 合约量广告 合约量广告主要是以 CPT,CPM 方式售卖,并且基本以品牌广告为主。 品牌广告以增加品牌曝光度为目的,不看重短期的利益而注重长久的影响,主要是为了给用户深远的记忆,让用户对品牌增加信任,即使短期内不产生效益,但是从长久来看,品牌效应还是可以带来更好的口碑和收益的。从投放的角度来说对媒体的要求更高,因为品牌广告经常有保量的要求,所以需要进行库存预估和排期,这对系统的要求就高了很多。品牌广告库存预估也是一个行业的难题,如何提升预估库存的准确率,一直是一个值得研究的问题。 效果广告 搜索广告 以百度,谷歌为首的搜索广告常年占据广告市场份额。搜索广告是互联......

计算广告——计算广告的核心问题

前言 前一篇文章给大家介绍了一下广告的含义,参与者,广告的发展以及常见的广告形式和结算方式,算是对互联网广告有了一个整体的了解,互联网广告我们通常叫计算广告,既然叫计算广告,那么我们就要思考一个问题,广告为什么要计算?计算广告的核心问题是什么?带着这两个问题,我们来仔细研究一下。 计算广告 广告为什么要计算 前面我们已经提到现在的广告行业从之前的传统线下广告已经发展成为互联网广告,对于互联网的从业人员应该都能理解为什么广告需要计算,但是对于很多传统行业或者非互联网行业的人都不是很理解,觉得广告不就是想想创意,然后忽悠忽悠用户不就可以了吗?为什么还要计算呢。 三方博弈 在将广告为什么要计算之前,我们先回忆一下前文提到的三方博弈。广告的参与有:需求方,供给方,受众。 需求方:需求方也就是我们常说的广告主,也就是需要打广告推广商品的人,我们平时看到的各种商品的卖家都是广告主,比如宝马汽车,可口可乐公司,脑白金等等,这些需要通过打广告来推广的角色都是广告主。 供给方:供给方既是平台,或者说媒体。比如说电视台,百度搜索引擎,头条微博等任何能提供广告位触达用户的平台。 受众:既我们普通的用户大众。....

计算广告——互联网广告的发展历程

前言 广告——一个我们天天都会遇到的一个词。对广告行业,如果不是这个行业的从业者的话虽然天天都看到,但是对于背后的商业逻辑并不清楚,特别是很多做广告系统的开发人员,整天都在 CRUD,对广告行业并不是很了解,很多时候只知道实现某个功能,但是背后的逻辑和商业价值是什么并不清楚。 本人准备通过一系列的文章给大家分享一些关于广告行业的知识,主要是针对广告系统的开发、投放或者一些运营销售人员,普及一些广告行业的背景知识,行业术语以及一些业务模式。 题外话:提到广告很多人都会很不待见,觉得广告都是骗人的,看到广告都很不开心。说实话作为一个广告行业从业者我也不喜欢广告 😅,但是有一个不可忽视的事情是广告行业就跟金融行业一样,都是很重要的一个行业。正所谓有人的地方就有江湖,同样的有买卖的就有金融就有广告。 在我们的日常生活中到处都是有广告的存在,无论是线上还是线下,各种场合都会有,而随着这么几年时代和技术的发展,广告也从线下渐渐转化到线上;广告的采买也从原始的传统方式人工采买广告位变成了程序化的人群定向采买。 广告的含义 什么是广告 在深入探讨之前,我们先看下什么是广告,也就是广告的定义的是什么。....

远程办公与在公司办公有什么不同

今天是 2020 年 2 月 24 日 周一,今天是疫情隔离结束后的第一个正式工作日,之前都是在家远程办公,周末的时候收到公司通知提到广东的疫情已经控制的很好了,只要在家隔离过三天的都可以正常回公司上班了,只要全程戴好口罩配合测量体温就好。 这个春节的假期有点长,长的让人有点在家待不住,虽然在家也是远程办公,但是毕竟还是会被各种杂事和诱惑打扰到,确实比较难以静下心来。所以既然今天是第一天复工,在这个不寻常的日子记录一下一天的过程和状态,另外也说说在家办公和在公司办公整个人的感受。 早上洗漱完后,背上双肩包,带上 N95 就出门上班了,由于住的距离公司比较近,全程都是走过去的,只是由于特殊情况,一些小道被封闭了,只能走正门进入。早上出公寓和园区的时候还是很快,因为是出门,所以没有量体温,到公司楼下的时候就不一样了,排队测量体温的人和私家车很多。由于我今天是第一天复工还没有办理出入证,所以除了测量体温还需要使用身份证登记,并且还有查一下 15 天之内的行程轨迹,因为担心是从重灾区过来的。 一切还是很顺利的,因为作者老家也并不是重灾区,进到公司大楼的时候,同样的操作又来了一遍。经过两次的登记....

【Redis 06】聊聊 Redis 的事务

背景 提到事务想必大家一定不会陌生,工作面试中多多少少都会了解到,这篇文章主要带大家再简单回忆一下事务的基本知识,然后重点介绍下 Redis 的事务,关于 Redis 的事务有何不同我们继续往下看就知道了。 什么事务 说到事务,首先我们需要知道什么是事务。首先事务是作为单个逻辑工作单元执行的一系列操作,这些操作作为一个整体一起向系统提交,要么都执行,要么都不执行。事务是一个不可分割的逻辑单元。 事务的四大特性 A(原子性)事务的各步操作是不可分的,保证一系列的操作要么都完成,要么都不完成; C(一致性)事务完成,数据必须处于一致的状态; I(隔离性)对数据进行修改的所有并发事务彼此之间是相互隔离,这表明事务必须是独立的,不应以任何方式依赖或影响其他事务; D(持久性)表示事务对数据处理结束后,对数据更改必须持久化,不管是事务成功还是回滚。事务日志都能够保持事务的永久性。 以上是常规的事务以及事务的特性。下面我们来看一下什么是 Redis 的事务,以及 Redis 事务有什么特殊性质。 Redis 事务 关于 Redis 的性质官方文档如下 MULTI, EXEC, DISCARD an....

【Redis 05】一文带你了解 Redis 的发布与订阅的底层原理

01、前言 发布订阅系统在我们日常的工作中经常会使用到,这种场景大部分情况我们都是使用消息队列的,常用的消息队列有 Kafka,RocketMQ,RabbitMQ,每一种消息队列都有其特性,关于 Kafka 的使用和源码分析,公号前面有相关的文章,大家可以前往回顾一下,另外两款消息队列大家有需要可以自行研究,后续我们会出相应的介绍文章。这篇文章主要是给大家介绍 Redis 的发布订阅系统,很多时候我们可能不需要独立部署相应的消息队列,只是简单的使用,而且数据量也不会太大,这种情况下,我们就可以使用 Redis 的 Pub/Sub 模型。 02、使用方式 2.1 发布与订阅 Redis 的发布订阅功能主要由 PUBLISH,SUBSCRIBE,PSUBSCRIBE 命令组成,一个或者多个客户端订阅某个或者多个频道,当其他客户端向该频道发送消息的时候,订阅了该频道的客户端都会收到对应的消息。 上图中有四个客户端,Client 02,Client 03,Client 04 订阅了同一个 Sport 频道(Channel),这时当 Client 01 向 Sport Channel 发送消息 ....

【Redis 04】一文带你了解 Redis 的慢日志相关底层原理

01、前言 相信很多小伙伴在使用 Redis 的时候都知道 Redis 有相关慢日志的查询功能,并且多多少少都看过。那 Redis 底层到底是如果创建慢日志以及慢日志的结构是什么样子的呢?这篇文章就带大家认识一下。我们先看一张慢日志的截图 使用 slowlog get 2 命令查看最近的两条慢日志信息,如上图,我们可以看到每条日志中包含的信息有六个部分组成,从上到下编号为 0-5,依次代表的意思是 0:日志的唯一编号 ID 1:命令执行的当前时间戳 2:命令执行的耗时时长,单位微妙 3:具体的执行命令和参数 4:客户端的 ip 和端口(4.0 版本以上才支持) 5:客户端名称(4.0 版本以上支持) 如上图所示,第一条慢日志的 ID 是 41,命令执行的时间戳是 1575729996,并且执行了 16129 微妙,具体执行的命令就是 slowlog get ,ip 和端口是 27.38.56.88:8223 ,客户端的名称没有设置。 02、慢日志命令设置 查看命令 上面我们已经大概的知道的一条慢日志的格式,自然的我们可以想到的问题是一个命令执行多长时间,我们就可以认为是慢查询,以及慢日....

【Redis 03】一文看懂 Redis 的内存回收策略和 Key 过期策略

01、前言 Redis 作为当下最热门的 Key-Value 存储系统,在大大小小的系统中都扮演着重要的角色,不管是 session 存储还是热点数据的缓存,亦或是其他场景,我们都会使用到 Redis。在生产环境我们偶尔会遇到 Redis 服务器内存不够的情况,那对于这种情况 Redis 的内存是如何回收处理的呢?另外对于带有过期时间的 Key Redis 又是如何处理的呢? 02、Redis 内存设置 我们都知道如果我们要设置 Redis 的最大内存大小只需要在配置文件 redis.conf 中配置一行 maxmemory xxx 即可,或者我们通过 config set 命令在运行时动态配置 Redis 的内存大小。 03、Redis 内存过期策略 3.1、过期策略的配置 那么当 Redis 内存不够的时候,我们要知道 Redis 是根据什么策略来淘汰数据的,在配置文件中我们使用 maxmemory-policy 来配置策略,如下图 我们可以看到策略的值由如下几种: volatile-lru: 在所有带有过期时间的 key 中使用 LRU 算法淘汰数据; alkeys-lru: 在....

【Redis 02】Redis 简单动态字符串

大家好,我是鸭血粉丝(大家会亲切的喊我 「阿粉」),是一位喜欢吃鸭血粉丝的程序员,之前给大家总结了线上 OOM 的情况,相信大家也能从中学到一些东西,身为一名有追求的程序员,阿粉我的理解是光会吃老本是不行的,所以我一直也在学习,今天大家就跟我一起来了解一下 Redis 的 SDS 吧(不是 SOS 哦~)。 01、SDS 数据结构 Redis 底层是基于 C 语言来开发的,但是它没有采用 C 语言传统的字符串表示方式,而是自定义了一种叫做 SDS(Sample Dynamic String,简单动态字符串)的数据结构来表示字符串。传统的 C 语言的字符串是采用空字符(\0)作为结尾的字符数组,SDS 的数据结构稍微复杂一点,整个结构包含三个部分,是 Redis 的基础。(阿粉猜测这里就是传说中的青出于蓝而胜于蓝)。 1.1、数据结构 在源码 sds.h/sdshdr 结构体中定于了 SDS 的数据结构,包括三个部分,free,len,buf[],依次含义如下 buf[]:字节数组,用于存放实际的字符串; len:记录 buf 数组中已经使用的字节数量,等同于 SDS 所保存的字符串的长....