博文

Feel free to contact me

I am an art worker. I usually go to work. I start to do what I like when I get off work, and put it on the unity store. If you buy something and you have some problems, you can contact me. My mail is chajianbanyungong2@163.com.

SuperScenePack3

图片
一、背景 有些同学提出“ArrayList的public <T> T[] toArray(T[] a) 带参数的方法支持泛型可以返回参数类型的数组,public Object[] toArray() 方法为啥不利用泛型返回List的泛型类型的数组”?这个问题。 那让我们看下源码研究一下吧。另外我将介绍一下通用解决这类问题的方法,方便大家举一反三。 二、研究 无参源码java.util.ArrayList#toArray()        public Object[] toArray() {             return Arrays.copyOf(elementData, size);         } 底层函数java.util.Arrays#copyOf(T[], int)         @SuppressWarnings("unchecked")         public static <T> T[] copyOf(T[] original, int newLength) {             return (T[]) copyOf(original, newLength, original.getClass());         } 的确这里支持泛型。 但是我们看一下ArrayList真正存储对象的变量: transient Object[] elementData; 它的类型为Object数组。 因此从源码来看,返回值必然是Object数组了。 为啥不给转成E[] 这样呢? 一...

SuperScenePack2

图片
一、背景 程序员学到一定程度,更倾向于把技术、工作、生活联系起来,发现一些共性。 利用生活知识去类比来学习技术,并且利用技术知识反向促进生活效率的改进。 本文介绍几个提高工作效率的技巧。 下面举几个栗子。 二、举两个例子 2.1 多线程并发的思维 如果是单线程卡住了,后续任务就无法执行。Java多线程是一个很重要的概念,可以并发执行。 图 2.1 这就像我们写代码的时候如果卡壳了,可能没有及时切换到其他的任务,可能一直卡几分钟,几十分钟甚至几个小时。 其实人脑就像单核CPU,我们通过并发的形式完成更多的任务。 如果在某个地方卡住,如果不是很紧急切换到其他任务上,然后再切换回来搞(搞不定寻求帮助,有时候自己怎么都看不出来,别人一下就get到原因,节省很多时间),可以实现整体效率的最大化。 2.2 优先级队列思维 那么工作上也是这样,很少只有一项任务,可能干着干着新的任务就得插进来。 这有点像优先队列,优先级高的在前面。 注:下图并不是画优先级队列的底层结构图,只是一种方便理解的图示。 图2.2-1 如果新任务优先级更高,那么抓紧切换到新任务上去。 图2.2-2 比如任务a刚要执行完,任务d进来,d的优先级高,插入到b前面。 这里的优先级往往只是一个维度,如重要性,如紧急程度。 但是我们不能只根据紧急程度来决定优先级,有一个经典的四象限法则来指导我们的工作生活。 图2.2-3     四象限法则是时间管理理论的一个重要观念是应有重点地把主要的精力和时间集中地放在处理那些重要但不紧急的工作上,这样可以做到未雨绸缪,防患于未然。在人们的日常工作中,很多时候往往有机会去很好地计划和完成一件事。     但常常却又没有及时地去做,随着时间的推移,造成工作质量的下降。     因此,应把主要的精力有重点地放在重要但不紧急这个“象限”的事务上是必要的。     要把精力主要放在重要但不紧急的事务处理上,需要很好地安排时间。     一个好的方法是建立预约。建立了预约,自己的时间才不会被别人所占据,从而有效...

SuperScenePack

图片
前言 图片不显示这个问题在safari上会出现,不管是PC还是手机端,而其他浏览器是可以正常预览 问题 效果图 image.png safari(桌面、手机)不显示图片,其他浏览器都是正常的。 代码如下 <script> import png_no_message from '@assets/layout/message/no_message.png'; export default {   name: 'NoMessage',   render() {     return (       <div class="no-message">         <img class="no-message__img" src={png_no_message} />         <div class="no-message__desrc">暂时没有任何消息啦~</div>       </div>     );   } }; </script> <style lang="scss" scoped> .no-message {   height: 80vh;   @include flex(column);   &__img {     display: block;     width: 376px;     height: 350px;   }   &__desrc {     font-size: 32px;     color: #302c48;   } } </style>   ...

超实用的IDEA插件推荐

    里巴巴Java代码风格检查插件         名称 :Alibaba Java Coding Guidelines         插件地址:https://plugins.jetbrains.com/plugin/10046-alibaba-java-coding-guidelines         开发中遇到不符合规范的情况,会给出提示。     Codota         插件地址:https://plugins.jetbrains.com/plugin/7638-codota-       官网:https://www.codota.com/         智能代码提示         使用快捷键可以搜索知名开源项目中该类或者方法的使用案例,超赞。     Material Theme UI     插件地址 https://plugins.jetbrains.com/plugin/8006-material-theme-ui     颜值控的福音     Background Image Plus     插件地址:https://plugins.jetbrains.com/plugin/8502-background-image-plus     在IDE里设置漂亮小姐姐当背景图,写代码是不是很有效率?     Sexy Editor 也是背景图插件,支持调节透明度和位置等 https://plugins.jetb...

开发方向校招准备的正确姿势,机会留给有准备的人

一、背景 马上就快到校招的时间了。 网上有很多分享面经的地方,也有一些博文分享作者的面试经历,尤其是大公司的面试经历。 大多数是分享具体的问题,而没有系统的总结出方法论。导致大家只不过是在刷题!仅此而已! 当然刷题没错,面试常见的问题就那么多,而且这些也是未来工作需要掌握的基础。 但是我们更应该掌握怎么准备校招,找到哪些是重点,了解面试面哪些能力。  由于本人是Java工程师(前网易Java开发工程师),推荐的资料部分可能推荐的Java居多,但是通用能力是可以参考的。 注:社招也可以适当参考本文,只不过社招的要求高一些,但是部分面试能力是通用的。 二、诡异的感受 有些同学面试的时候会觉得啥都答上来的,问的问题很简单啊,咋最后没过呢?? 这种情况很大概率是稍微难一点的问题就答不上来,答上来的不全面,没深度,不想问了敷衍一下罢了。 比如问你http的请求方法是啥,你很happy的回答,有GET POST两种,xxxx。绝大多数人都可以回答上来,你的优势在哪里? 可以看这里  https://www.runoob.com/http/http-methods.html 如果你不仅可以回答GET POST,其他的都可以回答出来,甚至提到HTTP1.1新增的是哪些是不是更有优势呢?(不过小心他问你,1.1有的其他特性,需要准备下) 比如问你HTTP响应码有哪些,你脱口而出200,400,500,然后感觉自己好牛的样子,很开心,问到了自己会的问题,so easy!! 其实正确姿势可能是这样,参见https://www.runoob.com/http/http-status-codes.html 回答出2,3,4,5开头的分别啥含义,常见的有哪些,甚至还可以分析哪些场景下会出现这些情况。 比如问你线程池的优点,so easy! 准备到了! 然后问你ExecutorService 是主要的实现类,其中常用的有哪些? so easy,面试官真好,都是会的,然后巴拉巴拉: Executors.newSingleThreadPool(),newFixedThreadPool(),newcachedTheadPool(),newScheduledThreadPool()。 都是干啥的,特点是啥回答完了,好开心的说。 当然这样没啥问题,但是同学你没有超出期待,你和其他同学比,...

几个本地搭建练习项目来学习的小技巧分享

一、背景 在实际开发过程中我们不了解某个类的用法,我们直接写在公司项目里? 在开发过程中我们想对比候选框架的性能,直接写在公司项目里? 很多情况是不适合写在公司项目里的,或者有把握之后再写到公司项目里。 而且我们希望这可以保存起来,未来不断丰富或者可以回头看,肿么办? 二、方法 2.1 创建git私有项目写一些demo 创建一个私有项目,可以把实验性的代码,想研究的类,在这里写单测来研究。 可以添加各种jar包,比如学习mokito, 学习Orika,甚至spring,dubbo都可以创建包或者子模块来demo学习。 还要就是这样可以永久保存,比如写了一个Stream的例子,后面忘了,或者想实验没用过的特性,直接找到之前的StreamTest类,继续写。 2.2 tutoris fork到本地 自己增删 网上有一个涉及java各方面知识的一个开源的项目,可以fork到自己仓库,随意增删修改。 https://github.com/eugenp/tutorials 2.3 如果不熟悉某个类的用法 有时候都懒得去写demo,单纯想知道常见的用法,可以用codota搜索. 常见的不常见的几乎都可以搜到,都是知名开源项目关于这些类的用法,超赞。 https://www.codota.com/code 2.4 开发过程中拉取底层jar包源码,或者平时拉取常用的技术栈源码到本地 有时候有时间想深入的了解”为什么会这样“的时候。 两种思路, 一个是开发调试的时候,进入jar包,IDEA提示你是否下载源码,你选择下载,然后源码里有注释方便你理解,而且可以打断点,观察调用栈,对学习研究有极大的帮助。 比如像研究某个jar包,点进去然后上面提示你”Download Source“ 你点击,下载某个jar包的源码 也可以在这里 也可以直接在maven选项卡里下载 另外一种是平时有时间直接拉取开源项目的源码到本地,运行单元测试专门研究某个类。或者运行其demo调试一下用法。 比如dubbo源码,可以带着某个问题去研究,也可以看某些源码指导来研究。 ---------------------