写点什么

ARTS 挑战打卡第十二周(200727-200802)

发布于: 2020 年 08 月 25 日
ARTS 挑战打卡第十二周(200727-200802)

Algorthm

https://leetcode.com/problems/construct-binary-search-tree-from-preorder-traversal

使用先序遍历的顺序构建二叉搜索树。

先用第一个元素做根节点,然后递归创建左右子节点。



Review

https://blog.pragmaticengineer.com/the-product-minded-engineer

讲述如何成为一名更有产品思维的工程师,程序员还是不能锁死自己在一个领域,多方面探索新技能,有产品意识的工程师对开发工作和产品讨论需求都有好处。



总结几点:

1、关注业务数据

2、多问为什么,为什么做这个产品,为什么做这个需求?

3、多与非工程师职位的同事交流,开拓思维

4、在技术和产品上做折中,可以是产品配合技术,也可以技术配合产品

5、快速迭代,快速从用户身上获得反馈,改进产品

6、与产品经理维持友好的关系

7、学习所做产品或所在公司的商业模式



Tip

1、Java的类库的属性大多数都是final的,final的作用是什么?

当final用来修饰类时,表示类不可以被继承;

当final用来修饰方法时,表示方法不可以被继承的类修改

当final用来修饰变量时,表示变量不可以被修改。



注:如果是基本数据类型的变量,那么变量在初始化之后不可以被修改,如果是引用类型的变量,那么变量在初始化后不可以再指向另一个对象,但是它指向的对象的内容是可变的。



2、线程安全是什么?怎么解决线程安全问题?

在每个进程的内存空间中都会有一块特殊的公共区域,通常称为堆(内存)。进程内的所有线程都可以访问到该区域,这就是引起线程安全的潜在原因。



线程安全指的是,在堆内存中的数据可以被任何线程访问到,在没有限制的情况下存在被意外修改的风险。即堆内存空间在没有保护机制的情况下,对多线程来说是不安全的地方,因为放进去的数据,可能被其他线程“破坏”。



当多个线程访问某个方法时,不管你通过怎样的调用方式或者说这些线程如何交替的执行,在主程序中不需要去做任何的同步,这个类的结果行为都是我们设想的正确行为,那么我们就可以说这个类是线程安全的。



线程安全的数据-局部变量,因为局部变量是定义在方法内,数据是保存在线程的栈内存中,只属于线程自己,是不共享的,所以其他内存无法访问。

可能线程不安全的数据-类成员变量,因为类成员变量不是定义在方法内,数据被分配到公共的堆内存中,堆在多个线程间是共享的,因此有潜在的安全风险。



解决线程安全的方法有哪些?

1、要让公共区域堆内存中的数据对于每个线程都是安全的,那就每个线程都拷贝它一份,每个线程只处理自己的这一份拷贝而不去影响别的线程,那就是ThreadLocal类。

2、数据只能读取,不能修改。其实就是常量或只读变量,它们对于多线程是安全的,想改也改不了。

3、加锁,锁住数据,不让其他线程访问,而加锁的方式有:悲观锁、乐观锁(CAS)



Share

【面试】如果你这样回答“什么是线程安全”,面试官都会对你刮目相看-https://www.cnblogs.com/lixinjie/p/a-answer-about-thread-safety-in-a-interview.html



分享原因:迄今为止看到最通俗易懂的一篇介绍线程安全的文章。



原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。

如果本文对你有帮助,请点个赞吧,谢谢





发布于: 2020 年 08 月 25 日阅读数: 45
用户头像

公众号【老胡爱分享】 2018.03.13 加入

一个热爱分享,热爱分享的普通人。 追求终身成长,希望用文字的力量服务大众。

评论

发布
暂无评论
ARTS 挑战打卡第十二周(200727-200802)