关于智捷晟可以我的有限公司司的,我是19年初和你一样的,现在联系不上了,在取证,方便给个联系方式吗

原标题:扬长趋极见本真 - 专访插畫师曹楠

近年来越来越多的华人设计师设计留学生,带着来自不同国家的设计理念风格,教育背景回到国内从事着与设计相关的工莋。他们是新一代的设计师群体有着华人的文化背景同时深受国际(西方)设计教育理念的影响。

这期的专访对象是毕业于纽约视觉藝术学院的插画专业的曹楠

"曹楠(Nan Cao),原居北京毕业于美国纽约视觉艺术学院(SVA)插画专业,获硕士学位并在本科期间就读于美国馬里兰艺术学院(MICA),主修插画和平面设计专业作为一名生活在纽约的自由插画师和艺术教师,曹楠为 Spectrum, News Break 等公司

团队绘制插画;同时,她的莋品也在纽约希腊,法国等多个画廊展出而她绘制的关于纽约生活的小记,以及庆祝纽约2020新年的系列作品也在横跨纽约五个大区的1700个電子屏台上滚动播放在纽约生活工作,曹楠的灵感多来源于艺术博物馆中的探寻和对所生活城市的观察和体味."

你对插画的热爱是有家庭嘚影响还是个人兴趣所致当初你是因为什么原因选择了插画师这条路?

选择成为一名画师可以说是成长经历自然所致我的母亲是一位微生物学教授,因为研究工作的需要我自小跟随母亲辗转于各个城市,最后定居北京在移居北京之前,交朋友于我是一件困难的事情频繁的迁居,工作繁忙的母亲……书画纸和水彩笔做为我儿时玩伴,陪我度过了许多孤单的时光渐渐的,绘画成为我的一种习惯和獲得内心平静的方法而钟爱的神话故事与叙事文学是我早时获得灵感的主要源泉。在高中毕业后我决心把绘画当成自己未来的职业,並考入首都师范大学油画系在学期间,除了扎实自己的绘画基本功我不断尝试和摸索不同的绘画形式,希望能够找到自己理想的叙事方式为了进一步开拓视野寻找答案,我向美国的艺术学府递交了申请并在大学毕业前夕接到了来自马里兰艺术学院插画系的录取通知。在求学期间我十分钟爱插画这一绘画形式所拥有的灵活,包容而多元的创作可能并决定成为一名插画师。

当初你读本科选择马里兰藝术学院的初衷是什么之后读研究生为何又选了SVA?

在决定去海外求学时我对海外的艺术院校完全不了解,而当时国内对于海外艺术院校的介绍与联系也不如如今全面选择马里兰艺术学院可以说是一种巧合,运气努力和虚荣心的结合。当时的我十分清楚希望在美国顶尖的艺术学府学习顶尖的插画知识为自己争取顶尖的学习资源。 所以在收集院校信息的时候我简单地在搜索引擎中输入了:“美国,艺術院校前三插画系”,几个关键字而马里兰艺术学院(MICA)便是其中的搜素结果之一。之后我登陆每所学校的网站一边翻电子词典一邊阅读院校网站上的信息。在了解了各个学校插画系的课程内容教学结构和师资资源以后,我认为这个地处巴尔的摩的学院非常适合当時想要专心钻研专业内向安静的我,便向MICA递交了我的申请资料

选择SVA的原因则更为明确和成熟,是准备进入一个新阶段的自然结果在唍成MICA的学业后,我深知自己的插画虽然优秀确不是出自我最舒服的创作方式,少了灵魂至少我自己是这么认为的。我希望能有进一步嘚突破从各个方面成长为一个专业,成熟有自我声音的插画师(视觉创作者)。而纽约这座城市是一个埋藏宝藏充满挑战,危险且洣失的城市是艺术工作者获取灵感的理想地点之一。所以可以说 我选择SVA是选择了纽约这座城市选择了一种跳出自己舒适圈的生活和学習的方式。

SVA的插画研究生是两年制在专业课程设置方面,SVA还是相对保守和传统的 在学第一年,我们需要完成创意写作创意素描速写,新媒体插画探索等基础类课程以及两个插画作品项目(可以是漫画,海报集诗歌插画集,童书等等);第二学年我们主要集中完成長达一年的毕业项目(形式开放)并兼修传统油画写生,职业规划等更加实用和市场接轨的课程

你在SVA和MICA两所院校中学习的课程有何不哃?都有何收获

我在MICA读的是本科,所以我只能根据我自己的实际情况来讨论首先, 本科的课程设置更细碎多元学生可以自由选修和嘗试不同形式的插画课程,并跨专业选修其他专业的课程其次,本科课程的内容相对基础和简单课堂布置的项目和作业也通常控制在兩周内完成,最后MICA的教授非常友善,并投入大量的时间在校内课上和课后辅导上每个教授课下都有自己的 drop in hour, 学生可以同教授约见来单独討论作品。得益于丰富的课程资源和充裕的师生交流机会在本科期间我迅速调整和吸取专业知识,也结识了很多优秀的朋友和导师

SVA的研究生则要求更强的自律和自主性。相比国内几乎人人考研的情况在美国读艺术研究生不是每个人的选择。因此凡是考入研究生部的學生对自己都有着非常明确的规划。以此为前提研究生部的教授不会一直像本科老师一样督促你完成作业,监督你的出席率 他们的工莋更多的是提供广泛的资源和信息,而学生自己需要主动提出问题寻求指导,自主独立地对所得信息整合和删选居住和工作在纽约,茬校的老师更加忙碌事务繁杂,对学生的指导时间会多集中在课堂在学期间,我最大的收获之一是找到了更加钟爱的绘画语言对这個职业有了更现实的认识,可以说 在SVA求学和毕业后,我学到了除绘画本身之外的许多事情而这些事情又是围绕着我的职业道路所必备嘚能力。

介绍一个你认为最有趣的项目在你们学校的学习生涯中

在学期间我所做的项目其实对我同等有趣和重要。然而有一个项目对我來说是意义非凡的它是我对作为画者的自己的一份独白,一种自我救赎和倾诉的方式在研究生的第一年,我用丙烯颜料绘制了一本取洺《Red Hands》的书这是一本讲述我本人真实故事的绘本,一篇关于患有手疾的画者的独白《Red Hands》讲述了一个需要日夜忍受手疾带来的疼痛的女駭选择追寻自己的目标,继续与心爱的画布画笔和颜料为伴的故事。在绘制这本书时我已经被慢性的手部肌腱炎困扰多年,需要不断尋求医生止痛药和绷带的帮助。为了寻找内心的平静重获更多的勇气,我选择为自己画一本书一本用画笔一笔笔将内心的挣扎,困惑和自省刻入画布的书

你最喜欢的一个插画师和艺术家是谁?为什么

Joan Miró 的作品抽象,大胆而优雅在我失去绘画的感觉和过度思考自巳的作品时,我会看 Joan Miró 的画来清理自己的思路Brad Holland 是我决心学习插画的原因之一,他用油画传统媒介绘制的作品或诙谐或讽刺,或黑暗戓诗意。在我心中 Brad Holland 的作品巧妙地平衡在商业绘画和纯艺术品的边缘之上是非常耐看而充满智慧的作品。而 Charley Harper 充满设计感的轻快风格与我自巳的绘画风格其实差异很大他的作品核心严谨而科学,在表述方式上自然而流畅是刺激我创新的助力。

对于和你一样热爱插画并坚持莋画的同学你有什么建议?

作为插画师画画是像吃饭和睡觉一样自然而然发生的事。我的建议和经验其实非常简单就是诚实的作画,画自己喜欢的作品不要过度强迫自己去追寻潮流。 人们常说要取长补短但其实认识到自己的短板和强项,学会扬长避短是我更认可嘚在自己绘画专业道路上所持有的态度。我们需要了解自己的擅长并努力发扬做到极致,这样你就会自然画出传达自己独有的声音的莋品

除了工作以外,你还有哪些兴趣爱好

看书,逛博物馆逛跳蚤市场,游泳跳舞…

你觉得这场疫情对插画师的工作和市场有影响嗎?

我觉得相对于疫情对于整个社会经济的冲击插画师所受的影响是在正常的范围之内的,相较于许多在疫情期间完全失去工作的人来說插画师依然可以保持正常的远程工作状态。但是由于社会的工作生产节奏放慢很多商业需求减少或停滞,我们所能得到的合作机会吔确实大大减少了但是希望在疫情结束后,一切可以尽快地恢复起来

插画师通常都会通过社交媒体和经纪人和相关平台去接洽到一些項目,在你的服务的项目中是否有类似的经历

我主要在 Facebook,Instagram, Behance 上更新自己的作品目前我直接因为社交媒体接洽到的项目并不多,主要还是通过自己写邮件给客户来介绍自己的作品从而得到合作机会。

我希望能够在高校教授插画类课程同时继续做自由插画师。

你会从哪些方面获取灵感另外我们很想听你讲讲灵感转化为作品的过程。

我获取灵感的方式经常转变目前来说, 我汲取灵感的途径主要是定期到紐约的博物馆报道事实上,生活在纽约本身也在不断地带给我灵感我的灵感转化过程非常简单,举例来讲在我绘制登上 Link NYC 的系列插画時,我会捕捉关键字(我在画中所需要表达的核心思想):纽约纽约人,生活然后我会将存于脑中的想法全都潦草的画下来。接下来我会把草稿搁在一边一段时间再重新拿出来筛选,最后挑出最强的想法然后画完成稿。

你通常在创作过程中使用哪些工具比较多

我通常使用墨水在纸上作画,然后扫描并用 Photoshop 上色

你服务参与项目中,插画细分类似偏向绘本、出版物、商业插画、动画举一个代表性案唎?

目前我的作品多用在商业-编辑类插画例如我近期为 The Shanghairen 绘制的封面插画。

你是如何发展、建立属于自己的独特视觉语言的

建立自己的視觉语言是一种自然而然的感觉,无需强求每个人的学习方式不同,你个人的成长生活状态就是你自己的视觉语言。我不会花大量的時间去看其他插画师的作品因为这样的做法到最后只会使我的风格无限趋近于某一人或一类的作品(这个信息时代为人们提供了无限丰富的资源和想象力,却也不可避免地剥夺了许多人独立的创造意志和作为创意者的自觉和自尊) 但我会大量的看摄影电影,架上绘画雕塑等作品来拓宽自己的见识

之前因为你修过平面设计专业就请你关于平面设计如何辅助到插画,或插画中如何衔接好平面设计这个話题给出你的观点。

于我来说 学习平面设计的经历让我了解到平面设计是独立深奥的专业学科,有着独特的美学和科学性学上手的知识容易,把平面设计作品做成艺术品不易需要钻研。我获得的知识非常皮毛“Less is more”是我在学期间非常敬重的老师经常提及的设计观点,“精简有效,巧妙地传达信息”这一美学理念直接影响到我创作插画作品时所秉持的态度早期我的作品风格含有大量眼花缭乱的复雜线条和视觉元素,如今我更致力绘制简洁直中红心概念的作品。

我们知道你近期和美国一家新闻媒体平台News Break合作绘制了一系列以Covid-19 为主題的插画作品,就疫情这个主题创作的作品我们对比中外插画师的表达很不同(国内太绘画和具象),你能分享下你的这组创作的故事嗎同时如何看待国内的作品?

Covid-19 给世界带来的冲击无疑是巨大恐怖的许多人把这次疫情和百年前的 Spanish Flu 相比较。对于西方一些国家比如美國,这是他们有史以来第一次处理和面对这样形式的自然灾害各大新闻媒体都在日夜跟踪报道相关的新闻,关注和记录这件将在人类历史上留下深重一笔的事件我和 News Break 合作的插画系列其实也是源于一样的原因:我们身处灾难,是见证者是旁观者,是当事人…我们需要感受和记录 Covid-19 带给人类生活和意识形态的冲击和改变 从我个人的浅见来推测,中外插画师对疫情主题表达方式的不同可以是由于主流观众的審美喜好不同;也可以是源于中西方文化中在表达事件的方式和形式上的差异西方艺术家的视觉作品往往广泛地表达抽象的情绪,如鼓勵恐惧,愤怒希望等。

未经允许请勿转载,谢谢合作

}

这几天的GC问题还未解决通过《》了解了些GC的基础知识,今天这篇文章(/art/280.htm)是从网上看到的案例很具备典型性,借鉴一下

处理过线上问题的同学基本上都会遇到系统突然運行缓慢,CPU 100%以及Full GC次数过多的问题。当然这些问题最终导致的直观现象就是系统运行缓慢,并且有大量的报警

本篇文章主要针对系统運行缓慢这一问题,提供该问题的排查思路从而定位出问题的代码点,进而提供解决该问题的思路

对于线上系统突然产生的运行缓慢問题,如果该问题导致线上系统不可用那么首先需要做的就是,导出jstack和内存信息然后重启系统,尽快保证系统的可用性

这种情况可能的原因主要有两种:

1.代码中某个位置读取数据量较大,导致系统内存耗尽从而导致 Full GC 次数过多,系统缓慢

2.代码中有比较耗CPU的操作,导致CPU 过高系统运行缓慢。

相对来说这是出现频率***的两种线上问题,而且他们会直接导致系统不可用

另外有几种情况也会导致某个功能運行缓慢,但是不至于导致系统不可用:

1.代码某个位置有阻塞性的操作导致该功能调用整体比较耗时,但出现是比较随机的

2.某个线程甴于某种原因而进入WAITING状态,此时该功能整体不可用但是无法复现。

3.由于锁使用不当导致多个线程进入死锁状态,从而导致系统整体比較缓慢

对于这三种情况,通过查看CPU和系统内存情况是无法查看出具体问题的因为他们相对来说都是具有一定阻塞性操作,CPU和系统内存使用情况都不高但是功能却很慢。

下面我们就通过查看系统日志来一步一步甄别上述几种问题

相对来说,这种情况是最容易出现的尤其是新功能上线时。

对于 Full GC 较多的情况其主要有如下两个特征:

1.线上多个线程的CPU都超过了***,jstack 命令可以看到这些线程主要是垃圾回收线程

2.通过jstat命令监控GC情况,可以看到Full GC次数非常多并且次数在不断增加。

首先我们可以使用top命令查看系统CPU的占用情况如下是系统CPU较高的一个礻例:

可以看到,有一个Java程序此时CPU占用量达到了98.8%此时我们可以复制该进程id9,并且使用如下命令查看该进程的各个线程运行情况:

该进程丅的各个线程运行情况如下:


可以看到在进程为9的Java程序中各个线程的CPU占用情况,接下来我们可以通过jstack命令查看线程id为10的线程为什么耗费CPU ***

需要注意的是,在jsatck命令展示的结果中线程id都转换成了十六进制形式。

可以用如下命令查看转换结果也可以找一个科学计算器进行转換:

这里打印结果说明该线程在jstack中的展现形式为0xa,通过jstack命令我们可以看到如下信息:

这里的VM Thread一行的***显示nid=0xa这里nid的意思就是操作系统线程id的意思,而VM Thread指的就是垃圾回收的线程

这里我们基本上可以确定,当前系统缓慢的原因主要是垃圾回收过于频繁导致G 停顿时间较长。

我们通过如下命令可以查看GC的情况:

可以看到这里FGC指的是Full GC数量,这里高达6793而且还在不断增长。从而进一步证实了是由于内存溢出导致的系統缓慢

那么这里确认了内存溢出,但是如何查看你是哪些对象导致的内存溢出呢这个可以Dump出内存日志,然后通过Eclipse的Mat工具进行查看

如丅图是其展示的一个对象树结构:

经过Mat工具分析之后,我们基本上就能确定内存中主要是哪个对象比较消耗内存然后找到该对象的创建位置,进行处理即可

这里主要是PrintStream最多,但是我们也可以看到其内存消耗量只有12.2%。

也就是说其还不足以导致大量的Full GC,此时我们需要考慮另外一种情况就是代码或者第三方依赖的包中有显示的System.gc()调用。

这种情况我们查看Dump内存得到的文件即可判断因为其会打印GC原因:


比如這里***次GC是由于System.gc()的显示调用导致的,而第二次GC则是JVM主动发起的

总结来说,对于Full GC次数过多主要有以下两种原因:

1.代码中一次获取了大量的對象,导致内存溢出此时可以通过Eclipse的Mat工具查看内存中有哪些对象比较多。

2.内存占用不高但是Full GC次数还是比较多,此时可能是显示的System.gc()调用導致GC次数过多这可以通过添加-XX:+DisableExplicitGC来禁用JVM对显示GC的响应。

在前面***点中我们讲到,CPU过高可能是系统频繁的进行Full GC导致系统缓慢。

而我们平常吔肯定能遇到比较耗时的计算导致CPU过高的情况,此时查看方式其实与上面的非常类似

首先我们通过top命令查看当前CPU消耗过高的进程是哪個,从而得到进程id然后通过top -Hp来查看该进程中有哪些线程CPU过高,一般超过80%就是比较高的80%左右是合理情况。

这样我们就能得到CPU消耗比较高嘚线程id接着通过该线程id的十六进制表示在jstack日志中查看当前线程具体的堆栈信息。

在这里我们就可以区分导致CPU过高的原因具体是Full GC次数过多還是代码中有比较耗时的计算了

如果是Full GC次数过多,那么通过jstack得到的线程信息会是类似于VM Thread之类的线程

而如果是代码中有比较耗时的计算,那么我们得到的就是一个线程的具体堆栈信息

如下是一个代码中有比较耗时的计算,导致CPU过高的线程信息:

这里可以看到在请求UserController的時候,由于该Controller进行了一个比较耗时的调用导致该线程的CPU一直处于100%。

我们可以根据堆栈信息直接定位到UserController的34行,查看代码中具体是什么原洇导致计算量如此之高

不定期出现的接口耗时现象

对于这种情况,比较典型的例子就是我们某个接口访问经常需要2~3s才能返回。

这是比較麻烦的一种情况因为一般来说,其消耗的CPU不多而且占用的内存也不高,也就是说我们通过上述两种方式进行排查是无法解决这种問题的。

而且由于这样的接口耗时比较大的问题是不定时出现的这就导致了我们在通过jstack命令即使得到了线程访问的堆栈信息,我们也没法判断具体哪个线程是正在执行比较耗时操作的线程

对于不定时出现的接口耗时比较严重的问题,我们的定位思路基本如下:首先找到該接口通过压测工具不断加大访问力度。

如果说该接口中有某个位置是比较耗时的由于我们的访问的频率非常高,那么大多数的线程朂终都将阻塞于该阻塞点

这样通过多个线程具有相同的堆栈日志,我们基本上就可以定位到该接口中比较耗时的代码的位置

如下是一個代码中有比较耗时的阻塞操作通过压测工具得到的线程堆栈日志:


从上面的日志你可以看出,这里有多个线程都阻塞在了UserController的第18行说明這是一个阻塞点,也就是导致该接口比较缓慢的原因

某个线程进入WAITING状态

对于这种情况,这是比较罕见的一种情况但是也是有可能出现嘚,而且由于其具有一定的“不可复现性”因而我们在排查的时候是非常难以发现的。

笔者曾经就遇到过类似的这种情况具体的场景昰,在使用CountDownLatch时由于需要每一个并行的任务都执行完成之后才会唤醒主线程往下执行。

而当时我们是通过CountDownLatch控制多个线程连接并导出用户的Gmail郵箱数据这其中有一个线程连接上了用户邮箱,但是连接被服务器挂起了导致该线程一直在等待服务器的响应。

最终导致我们的主线程和其余几个线程都处于WAITING状态

对于这样的问题,查看过jstack日志的读者应该都知道正常情况下,线上大多数线程都是处于TIMED_WAITING状态

而我们这裏出问题的线程所处的状态与其是一模一样的,这就非常容易混淆我们的判断

解决这个问题的思路主要如下:

①通过grep在jstack日志中找出所有嘚处于TIMED_WAITING状态的线程,将其导出到某个文件中如a1.log,如下是一个导出的日志文件示例:

②等待一段时间之后比如10s,再次对jstack日志进行grep将其導出到另一个文件,如a2.log结果如下所示:

③重复步骤2,待导出3~4个文件之后我们对导出的文件进行对比,找出其中在这几个文件中一直都存在的用户线程

这个线程基本上就可以确认是包含了处于等待状态有问题的线程。因为正常的请求线程是不会在20~30s之后还是处于等待状态嘚

④经过排查得到这些线程之后,我们可以继续对其堆栈信息进行排查如果该线程本身就应该处于等待状态,比如用户创建的线程池Φ处于空闲状态的线程那么这种线程的堆栈信息中是不会包含用户自定义的类的。

这些都可以排除掉而剩下的线程基本上就可以确认昰我们要找的有问题的线程。

通过其堆栈信息我们就可以得出具体是在哪个位置的代码导致该线程处于等待状态了。

这里需要说明的是我们在判断是否为用户线程时,可以通过线程最前面的线程名来判断因为一般的框架的线程命名都是非常规范的。

我们通过线程名就鈳以直接判断得出该线程是某些框架中的线程这种线程基本上可以排除掉。

而剩余的比如上面的Thread-0,以及我们可以辨别的自定义线程名这些都是我们需要排查的对象。

经过上面的方式进行排查之后我们基本上就可以得出这里的Thread-0就是我们要找的线程,通过查看其堆栈信息我们就可以得到具体是在哪个位置导致其处于等待状态了。

如下示例中则是在SyncTask的第8行导致该线程进入等待了:

对于死锁这种情况基夲上很容易发现,因为jstack可以帮助我们检查死锁并且在日志中打印具体的死锁线程信息。

如下是一个产生死锁的一个jstack日志示例:

可以看到在jstack日志的底部,其直接帮我们分析了日志中存在哪些死锁以及每个死锁的线程堆栈信息。

这里我们有两个用户线程分别在等待对方释放锁而被阻塞的位置都是在ConnectTask的第5行,此时我们就可以直接定位到该位置并且进行代码分析,从而找到产生死锁的原因

本篇文章主要講解了线上可能出现的五种导致系统缓慢的情况,详细分析了每种情况产生时的现象已经根据现象我们可以通过哪些方式定位得到是这種原因导致的系统缓慢。

简要的说我们进行线上日志分析时,主要可以分为如下步骤:

①通过top命令查看CPU情况如果CPU比较高,则通过top -Hp命令查看当前进程的各个线程运行情况

找出CPU过高的线程之后,将其线程id转换为十六进制的表现形式然后在jstack日志中查看该线程主要在进行的笁作。

1.如果是正常的用户线程则通过该线程的堆栈信息查看其具体是在哪处用户代码处运行比较消耗 CPU。

导出之后将内存情况放到Eclipse的Mat工具Φ进行分析即可得出内存中主要是什么对象比较消耗内存进而可以处理相关代码。

②如果通过top命令看到CPU并不高并且系统内存占用率也仳较低。此时就可以考虑是否是由于另外三种情况导致的问题

具体的可以根据具体情况分析:

1.如果是接口调用比较耗时,并且是不定时絀现则可以通过压测的方式加大阻塞点出现的频率,从而通过jstack查看堆栈信息找到阻塞点。

2.如果是某个功能突然出现停滞的状况这种凊况也无法复现,此时可以通过多次导出jstack日志的方式对比哪些用户线程是一直都处于等待状态这些线程就是可能存在问题的线程。

3.如果通过jstack可以查看到死锁状态则可以检查产生死锁的两个线程的具体阻塞点,从而处理相应的问题

本篇文章主要是提出了五种常见的导致線上功能缓慢的问题,以及排查思路当然,线上的问题出现的形式是多种多样的也不一定局限于这几种情况。如果我们能够仔细分析這些问题出现的场景就可以根据具体情况具体分析,从而解决相应的问题

}

我要回帖

更多关于 我的有限公司 的文章

更多推荐

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

点击添加站长微信