旅中的ios 仿途牛旅行源代码是什么?

各位高手们,谁有matlab(遗传算法在旅行商问题中的应用研究)源代码,能不能发给一份,万分感谢。_百度知道
各位高手们,谁有matlab(遗传算法在旅行商问题中的应用研究)源代码,能不能发给一份,万分感谢。
大概求解30个城市左右就行,最好有详解(毕业设计之类的)
我有更好的答案
楼主,留下联系方式吧,我这有一份。
其他类似问题
为您推荐:
旅行商问题的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁求教:各航司中转和往返舱位代码
弟弟妹妹和我
距北京一百五十里,有一处地方,时间仿佛回到过去,那是慕田峪。
千金募战士,万里筑长城!宋诗人陆游曾对长城发出这样的感叹。
在他眼里,长城属于金戈铁马之地。
如今,秋高气爽之际,父子牵手爬长城,听爸爸讲那遥远的故事......
在ETERM中输入TIM TIFV后会进入到一个查询签证的界面
TIRV&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
NA &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
AR &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
DE &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
TR &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
NA-PASSENGER'S NATIONALITY. ADD /SEMN IN CASE OF SEAMAN&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&& ADD /TYPE FOR OTHER THAN NORMAL PASSPORTS&&&&&&&&&&&&&&&&&&&&&&&&
AR-ALIEN RESIDENTS&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
DE-DESTINATION POINTS&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
TR-TRANSIT POINTS VIA OTHER COUNTRIES&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
(USE 3-LETTER CITY/AIRPORT CODE OR 2-LETTER ISO COUNTRY CODE)&
但是我尝试着在NA/AR/DE/TR后面加ISO国家2字代码或者是城市三字代码都显示不出来签证信息。
请教各位这个指令应该如何使用,谢谢。
6月赛开赛以来,得到了帅爸靓妈的热情支持,纷纷上传宝贝们各种神态表情的萌照,看到宝贝们天真可爱的样子,一天的疲惫都一扫而光,孩子们真是最好的治愈。
现在,《随手拍萌娃》六月赛投票评比正式开启,请为你最喜欢的宝贝投上一票吧
投票日期:6月16日至29日
投票方法:打开“中国航信”微信服务号“服务支持”版块的“航旅吧”,点击《随手拍萌娃6月赛投票贴》,或登录“”点击进入《随手拍萌娃6月赛投票贴》即可为你喜欢的照片投票。
说明:因为本次比赛参赛人数众多,为保证大家能够正常浏览投票贴,特按照参赛者身份分为三个投票贴,分别是《随手拍萌娃6月赛投票贴- 行业伙伴》《随手拍萌娃6月赛投票贴-航信》《随手拍萌娃6月赛投票贴-航信分子公司》
票数最多的照片将获得6月赛一、二、三等奖,领取丰厚奖品。快来投票吧
6月赛开赛以来,得到了帅爸靓妈的热情支持,纷纷上传宝贝们各种神态表情的萌照,看到宝贝们天真可爱的样子,一天的疲惫都一扫而光,孩子们真是最好的治愈。
现在,《随手拍萌娃》六月赛投票评比正式开启,请为你最喜欢的宝贝投上一票吧
投票日期:6月16日至29日
投票方法:打开“中国航信”微信服务号“服务支持”版块的“航旅吧”,点击《随手拍萌娃6月赛投票贴》,或登录“”点击进入《随手拍萌娃6月赛投票贴》即可为你喜欢的照片投票。
说明:因为本次比赛参赛人数众多,为保证大家能够正常浏览投票贴,特按照参赛者身份分为三个投票贴,分别是《随手拍萌娃6月赛投票贴- 行业伙伴》《随手拍萌娃6月赛投票贴-航信》《随手拍萌娃6月赛投票贴-航信分子公司》
票数最多的照片将获得6月赛一、二、三等奖,领取丰厚奖品。快来投票吧
土耳其的夏天是蓝色的,蓝色的地中海,蓝色的海边小镇,还有著名的蓝色清真寺。
特征码(授权码)
航旅聚合android
航旅聚合iphone
中国航信微信一次“奇幻”的Docker libcontainer代码阅读之旅
发表于 16:21|
作者刘梦馨
摘要:之所以称这次代码阅读为奇幻之旅,是因为作者刘梦馨在阅读Docker源码的过程中,发现了几个有趣的事情:从代码来看Docker并未另起炉灶,而是将现有经过考验的隔离安全机制能用的全用上,但源代码的质量让人很难恭维。
编者按:前段时间转载的《》很受欢迎,短短1500字,让大家快速了解了Docker。今天看到作者又出了新作,马上就转过来了。之所以称这次代码阅读为奇幻之旅,是因为作者刘梦馨()在阅读Docker源码的过程中,发现了几个有趣的事情:从代码来看 Docker 并没有另起炉灶新开发机制,而是将现有经过考验的隔离安全机制能用的全用上,包括 cgroups,capability,namespaces,AppArmor 和 SELinux(CSDN刚刚翻译的文章中也提到了这一点);从读代码的角度来看,Docker源代码的质量让人很难恭维,一些代码风格和逻辑上让人读起来很费劲。
作者简介:刘梦馨,一个当过开发和测试的运维人员,在阿里巴巴挖宝,顺便去点亮DBA的技能树。关注Docker,虚拟化和云计算技术。
以下为原文:
一直对Docker提供的容器感到好奇,不知道究竟是如何实现隔离和保证安全的,之前Docker本来是用LXC来提供容器功能的,但是由于对内核代码有一丝恐惧没敢去看,后来听说Docker为了实现跨平台兼容自己实现了一套Native的容器就是libcontainer。既然是新项目那么代码量和复杂度应该都不会太高吧,抱着这个想法我就翻看libcontainer的代码读一读。
首先自然要下到代码才能读,建议去下完整的
,不要只下libcontainer的源码。不然就会像我一样读的时候碰到一个坑,掉里面爬了半天。
接下来就要有一个代码阅读器了,由于Go语言还是个比较新的语言,配套的工具还不是很完善,不过可以用
(自备梯子)这个轻量级的Golang IDE来兼职一下。
打开之后可以看到Docker的目录结构大致是这样的:
那么我们所关注的libcontainer在哪里呢?藏得还挺深的在 \verdor\\libcontainer\。进去之后就会发现有个显眼的container.go在向你招手,嗯第一个坑马上就要来了。
这段代码初看起来还是很浅显的。代码缩水后如下
type Container interface {
ID() string
RunState() (*RunState, Error)
Config() *Config
Start(config *ProcessConfig) (pid int, exitChan chan int, err Error)
Destroy() Error
Processes() ([]int, Error)
Stats() (*ContainerStats, Error)
Pause() Error
Resume() Error
可以看出这段代码只是定义了一个接口,任何实现这些方法的对象就会变成一个Docker认可的 container。其中比较关键的一个函数就是Start了,他是在container里启动进程的方法,可以看到接口的要求是传进一个所要启动进程相关的配置,返回一个进程pid和一个接受退出信息的channel。
下一步自然就是去找这个接口的实现,看看究竟是怎么做的,然后一个坑就来了。由于Go语言不要求对象向Java那样显性声明自己实现哪个接口,只要自己默默实现了对应的方法,就默认变成了那个接口类型的对象。所以没有什么直观的方法,来找到哪些对象实现了这个接口,翻了一下libcontainer文件夹下的文件感觉哪个都不像。感觉有些不详的预兆,装了个Cygwin去grep
Start这个函数,结果意外的发现没有,于是又在整个Docker目录下去 grep 发现还是没有。
我就奇怪了,不是说Docker 1.2之后就支持Native的container了么,他连libcontainer里的container接口都没实现,是怎么调用Native的container的。既然自底向上的找不到,那就只能自顶向下的从上层往下跟去找找怎么回事了。
Docker支持LXC和Native两套容器实现,是通过driver这个接口的两个实现来完成的。在 \daemon\execdriver 中可以看到有lxc和native两个文件夹,里面就是相关的代码。不过在
\daemon\ 目录下可以看到还有一个container.go里面是有个container对象,可是并没有实现libcontainer里对应的接口,难道libcontainer里的那个interface只是一个幌子?
先看一下driver这个接口
type Driver interface {
Run(c *Command, pipes *Pipes, startCallback StartCallback) (int, error) // Run executes the process and blocks until the process exits and returns the exit code
// Exec executes the process in a running container, blocks until the process exits and returns the exit code
Exec(c *Command, processConfig *ProcessConfig, pipes *Pipes, startCallback StartCallback) (int, error)
Kill(c *Command, sig int) error
Pause(c *Command) error
Unpause(c *Command) error
Name() string // Driver name
Info(id string) Info
// "temporary" hack (until we move state from core to plugins)
GetPidsForContainer(id string) ([]int, error) // Returns a list of pids for the given container.
Terminate(c *Command) error
// kill it with fire
Clean(id string) error// clean all traces of container exec
有没有感觉名字虽说和上面的container interface不太一样,不过意思是差不多的。resume 变成了 unpause, destory
变成了 teminate,processes 变成了 getpidsforcontainer,start 也变成了 run 和 exec 两个函数。看到这不得不说
Docker 的代码的一致性和可读性还是惨了点,codereview 需要更严格一些呀。
再进到 native 的 driver.go 就可以看到具体的实现了。在文件头部发现了一长串 import,其中有几个比较抓眼球:
"/docker/libcontainer"
"/docker/libcontainer/apparmor"
"/docker/libcontainer/cgroups/fs"
"/docker/libcontainer/cgroups/systemd"
consolepkg "/docker/libcontainer/console"
"/docker/libcontainer/namespaces"
_ "/docker/libcontainer/namespaces/nsenter"
"/docker/libcontainer/system"
从这里似乎可以看出一点端倪了。libcontainer 的目的是提供一个平台无关的原生容器,这需要包括资源隔离,权限控制等一系列通用组件,所以
libcontainer 就来提供这些通用组件,所以他叫 "lib"。而每个平台想实现自己的容器的话就可以借用这些组件,当然可以只用一部分而不全用,
Docker 就相当于用了包括 AppArmor、cgroups、namespaces 等等组件,然后没用 libcontainer 的 container
接口和其他一些组件,自己写了其他部分完成的所谓 native 的容器。
还是看 run 函数
func (d *driver) Run(c *mand, pipes *execdriver.Pipes, startCallback execdriver.StartCallback) (int, error)
其中 execdriver.Pipes 是一个定义标准输入输出和错误指向的结构,startCallback 是在进程结束或者退出时调用的一个回调函数,最重要的结构是
mand 他定义了容器内运行程序的各种环境和约束条件。可以在 daemon 下的 driver.go 中找到对应的定义。
type Command struct {
`json:"id"`
Rootfs string
`json:"rootfs"`
// root fs of the container
`json:"initpath"` // dockerinit
WorkingDir string
`json:"working_dir"`
ConfigPath string
`json:"config_path"` // this should be able to be removed when the lxc template is moved into the driver
Network *Network
`json:"network"`
*Resources
`json:"resources"`
Mounts []Mount
`json:"mounts"`
AllowedDevices []*devices.Device `json:"allowed_devices"`
AutoCreatedDevices []*devices.Device `json:"autocreated_devices"`
CapAdd []string
`json:"cap_add"`
CapDrop[]string
`json:"cap_drop"`
ContainerPid
`json:"container_pid"`
// the pid for the process inside a container
ProcessConfig
ProcessConfig `json:"process_config"` // Describes the init process of the container.
ProcessLabel
`json:"process_label"`
MountLabel string
`json:"mount_label"`
`json:"lxc_config"`
AppArmorProfile string
`json:"apparmor_profile"`
其中和进程隔离相关的有 Resources 规定了 CPU 和 memory 的资源分配,可供 cgroups 将来调用。 CapAdd 和
CapDrop 这个和 Linux Capability 相关来控制 root 的某些系统调用权限不会被容器内的程序使用。ProcessLabel
为容器内的进程打上一个 Lable 这样的话 SELinux 将来就可以通过这个 lable 来做权限控制。Apparmorprofile 指向
Docker 默认的 apparmor profile 路径,一般为/etc/apparmor.d/docker,用来控制程序对文件系统的访问权限。
可以看到,Docker 对容器的隔离策略并不是自己开发一套隔离机制,而是把现有的能用的已有隔离机制全用上。甚至 AppArmor
和 SELinux 这两个类似并且人家两家还在相互竞争的机制也都一股脑不管三七二十一全加上,颇有拿来主义的风采。这样的话万一恶意程序突破了一层防护还有另外一层挡着,而且这几个隔离机制还相互保护要同时突破所有的防护才行。
而我们真正要在容器中执行的程序在 ProcessConfig 这个结构体中的 Entrypoint。由此可见所谓的容器就是一个穿着各种隔离外套的程序,用这些隔离外套保护这个程序可以活在自己的小天地里,不知有汉无论魏晋。
还是回到 run 里面看看究竟是怎么 run 的吧,看完了一系列的初始化和异常判断后终于到了真正运行的代码,只有一行,长得是这个样子的:
return namespaces.Exec(container, c.ProcessConfig.Stdin, c.ProcessConfig.Stdout, c.ProcessConfig.Stderr, c.ProcessConfig.Console, dataPath, args, func(container *libcontainer.Config, console, dataPath, init string, child *os.File, args []string) *exec.Cmd {
c.ProcessConfig.Path = d.initPath
c.ProcessConfig.Args = append([]string{
DriverName,
"-console", console,
"-pipe", "3",
"-root", filepath.Join(d.root, c.ID),
}, args...)
// set this to nil so that when we set the clone flags anything else is reset
c.ProcessConfig.SysProcAttr = &syscall.SysProcAttr{
Cloneflags: uintptr(namespaces.GetNamespaceFlags(container.Namespaces)),
c.ProcessConfig.ExtraFiles = []*os.File{child}
c.ProcessConfig.Env = container.Env
c.ProcessConfig.Dir = container.RootFs
return &c.ProcessConfig.Cmd
}, func() {
if startCallback != nil {
c.ContainerPid = c.ProcessConfig.Process.Pid
startCallback(&c.ProcessConfig, c.ContainerPid)
看到这里整个人都不好了,我觉得 Docker 这个项目要是这样下去会出问题的,就算你喜欢匿名函数也不要这么偏执好么。我甚至怀疑 Docker
在用什么黑科技来隐藏他的真实代码了。于是我决定放弃这行代码直接看 namespaces.Exec 去了。在\verdor\\libcontainer\namespaces\exec.go里
func Exec(container *libcontainer.Config, stdin io.Reader, stdout, stderr io.Writer, console, dataPath string, args []string, createCommand CreateCommand, startCallback func()) (int, error)
不太确定一个函数 8 个参数真的好么,但是我更纳闷的是在主项目里既然都有 pipe 这个结构把 stdin,stdout,stderr 放在一起为啥到这里就要分开写了,6
个虽然也不少,但是比 8 个要好点。回过头来说一下 namespace ,这又是另一种隔离机制。顾名思义,隔离的是名字空间,这要的话本来属于全局可见的名字资源,如
pid,network,mountpoint 之类的资源虚拟出多份,每个 namespace 一份,每组进程占用一个 namespace。这样的话容器内程序都看不到外部其他进程,攻击的难度自然也就加大了。
然后这里面最关键的执行的一句倒是很简单了。
if err := command.Start(); err != nil {
child.Close()
return -1, err
其中的 command 是系统调用类 exec.Cmd 的一个对象,而之前的关于程序的配置信息已经在那个一行的执行代码里都整合进 command
里了,在这里只要 start 一下程序就跑起来了。然后我就疑惑了,这个函数不是 namespaces 包下的么,咋没有 namespaces
设置的相关代码呢。其实你仔细看那一行的执行代码可以发现 namespaces 的设置也在里面了,换句话说这个 namespaces 包下的 exec
其实没有做什么和 namespaces 相关的事情,只是 start 了一下。这种代码逻辑结构可是给读代码的人带来了不小的困惑啊。
这次读代码的起点是想搞懂容器是如何做隔离和保证安全的。从代码来看 Docker 并没有另起炉灶新开发机制,而是将现有经过考验的隔离安全机制能用的全用上,包括
cgroups,capability,namespaces,AppArmor 和 SELinux。这样一套组合拳打出来的效果理论上看还是很好的,即使其中一个机制出了漏洞,但是要利用这个漏洞的方法很可能会被其他机制限制住,要找到一种同时绕过所有隔离机制的方法难度就要大多了。
但是从读代码的角度来看,Docker 的代码的质量就让人很难恭维了,即使 libcontainer 是一个独立的部分,但本是同根生的名字都不一致,不知道之后会不会更混乱。而一些代码风格和逻辑上也实在让人读起来很费劲,代码质量要提高的地方还有很多。毕竟是开源的项目,即使功能很强大,但是大家如果发现代码质量有问题,恐怕也不大敢用在生产吧。
而至于 libcontainer 尽管从 Docker 中独立出去发展,但是可以看出和主项目还有一些没有切分干净的地方,而且 Docker
主项目目前也没有采用 libcontainer 中的 container 方式,只是在调用里面的一些机制方法,看样子目前还处于一个逐步替换的过程中。libcontainer
和一个独立完整的产品还有一段距离,诸位有兴趣的也可以参与进去,万一这就是下一个伟大的项目呢?
原文链接:
(责编:周小璐)如需要了解更多Docker相关的资讯或是技术文档可访问;如有更多的疑问请在提出,我们会邀请专家回答。CSDN Docker技术交流QQ群:。Container技术日报公众账号已开启,欢迎关注!
推荐阅读相关主题:
CSDN官方微信
扫描二维码,向CSDN吐槽
微信号:CSDNnews
相关热门文章这可是我们无二之旅的门面,也是对于你的综合素质要求最高的一个岗位。从与用户的第一次交流,到通过丰富悉心的推荐与讲解让对方身临其境,进而愿意将宝贵的旅程交到“无二之旅”手中;出行前对于用户需求的全盘了解和熟练掌握,整合交由定制师实际设计与实施,再到用户出行期间的一对一实时跟进,解决路途中的突发状况……定制旅行顾问的挑战与成就感,绝对非同一般。
1、对旅行和探索世界有足够的热忱,能够迅速丰富自己对于全球事物的知识储备,善于内化并以同样的热情传递给周围的人。
2、沟通能力极强,能够深入洞察客户的想法和需求,带人接物得体机灵,善于协调与合作。
3、责任心强严谨细心,在旅程规划的每一步都站在旅者的角度实际考量,每一回旅者遇到疑惑或困难都能及时耐心协助,有极强的解决问题能力及抗压能力。
想加入我们,快快投简历到吧!
整天窝在办公室,说什么发现世界的美?来吧,做一个走遍世界的设计师!我们是全新的旅行,我们的用户都是新一代的年轻人,你的唯一任务,就是让他们,喜欢我们的一切!
1、经历过设计师传统的Level up模式:整天对着iMac,对着Photoshop & illustrator & Dreamweaver,对着一堆天南海北搜集来的素材,苦思冥想,精雕细琢,做网页做APP做UI甚至做平面,度过了无数个熬人的夜晚,各项基础技能已经满足转职需要。(基础技能权重:网页设计>视觉设计>平面设计)
2、渴望新的突破,真心热爱旅行,有与我们一同走遍世界、在行走中发现世界最本质的美、最终凝炼出自己设计风格的梦想。
3、心要年轻,要有创造性,要对将世界的美好传递给千千万万的用户充满热情与动力。
4、有亮眼的互联网&移动互联网从业经历,有拿得出手的作品。
5、真正拥有艰苦创业的奋斗精神。
想加入我们,快快投简历到吧!
工作职责:
1.根据公司战略及实际情况,协助制定公司整体品牌策略并执行;
2.拓展和维护公司媒体资源关系网络,建立媒体档案库,对媒体信息发布进行监测报告,负责舆情监控与危机公关;
3. 根据品牌策略及重要新闻、产品节点,策划高影响力传播事件和线上活动,并组织实施;
4.根据公司项目需求,重点负责创意营销内容和策划工作。
任职要求:
1.大学本科以上学历,有互联网行业公关岗位工作经验,或媒体采编从业经验,有线上活动策划执行的经验;
2.熟悉各类媒体运作机制,有一定的核心媒体资源,准确把控传播内容的有效性;
3.出色的中英文文字功底和富有创意的营销思维,能根据公司的产品特性挖掘传播话题;
4.优秀的中英文沟通能力、较强的学习能力、应变能力;
5.性格开朗,热爱旅行,具备良好的职业素养。
任职要求:
1.一年以上大公司数据结构化、标准化工作经验;
2.必须懂旅行;
3.必须擅长方法论,逻辑思维特别强悍;
4.必须擅长表达、交流、沟通;
5.必须有跨多部门沟通落实工作的协调能力;
6.有管理经验,可以独立带团队优先;
7.会写文案优先。
1.旅行元素数据化的标准制定;
2.将数据标准结合到生产系统工具中去,实现“方便好用”与“数据规范”的最佳平衡,使得标准能真正落实;
3.对于所有历史数据进行存量整理;
4.对于所有新生产数据进行核验及清洗;
5.建立产品数据标准化团队。
任职要求:
1、一年以上渠道拓展相关工作经验;
2、熟悉旅游行业动态,具备丰富的行业内资源(婚庆、银行、大企业等);
3、优秀的沟通、交际能力、组织协调能力及团队合作精神;
4、较强的商务谈判和独立的市场开拓能力;
5、颜值高高高高高高高高。
1、开拓旅游合作资源和渠道,建立需求双方合作关系;
2、拓展新的资源和渠道等,现有资源的维护和管理;
3、负责渠道的工作对接、监控和跟进,做好沟通协调及配合服务工作;
4、市场相关信息的收集和数据统计分析工作。
负责与国外公司联系合作,根据客户需求,通过电话、邮件、网上平台进行交通、酒店、门票等采购、预定工作。
1.较好英文读写能力, 熟悉国外各大预定网站;
2.认真踏实,有耐心和服务意识;
3.一年以上旅游行业工作经验者优先考虑。
关注我们:
Copyright (C) 2016 Uniqueway Inc. 保留所有权利
北京独一之旅国际旅行社有限公司
地址:北京市朝阳区百子湾路苹果社区北区二十二院街艺术区6-19
*本网站部分图片来自网络,若作者看到,请尽快与无二之旅联系。
使用手机登录
使用手机注册
恭喜你注册成功!eclipse中java代码格式化设置方法
由于学Java之前习惯了C#的代码格式化样式,即如下图1的第一种代码格式,而看第二种代码格式时感觉代码很乱,总找不到“{
}”对称的感觉。eclipse自动格式化代码的快捷方式是Ctrl+Shift+F&,下面将通过设置eclipse来达到第一种代码样式。
设置步骤如下:
第一步:启动eclipse&→
Project&→&Properties&→
Java Code Style&→
Formatter&→ 按图2的红色字体的步骤操作。
第二步:按照图3的红色字体步骤操作。
第三步:第二步后会弹出图4窗口。此时选择Braces选项卡,然后按照图4的红色字体步骤操作。
注意:Array initializer可以保持为默认值不变“Same
line”,要不然图中红色3的位置处会换行,就不好看了。
第四步:打开eclipse&→ Window&→&Preferences&→&java&→&Code
Style&→&Formatter&→&按图5的红色字体步骤操作。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 旅行商问题matlab代码 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信