eval函数
type
status
date
slug
summary
tags
category
icon
password
Property
 
JSON是一种行业内的数据交换格式标准,JSON在JS中以JS对象的形式存在。
eval函数的作用是:将字符串当做一段JS代码解释并执行
在JS当中:[]和{}有什么区别?
[] 是数组,{} 是JSON
 
 
系统架构
type
status
date
slug
summary
tags
category
icon
password
Property
 

B/S架构:

Browser / Server(浏览器/服务器的交互形式)
Browser支持哪些语言:HTML CSS JavaScript
写HTML CSS JavaScript代码的这波人职位叫做:WEB前端开发工程师。(Java程序员目前来看也需要会一些前端的东西) 前端页面上的图片需要UI设计师完成。(PS对java程序员来说没有太高的要求。) S是服务器端Server,Server端的语言很多:C C++ Java python.....(我们主要是使用Java语言完成服务器端的开发)
 
B/S架构的系统有什么优点和缺点?
优点:升级方便,只升级服务器端代码即可。维护成本低。 缺点:速度慢、体验不好、界面不炫酷
 
企业内部的解决方案都是采用B/S架构的系统,因为企业内部办公需要的一些系统不需要炫酷,不需要特别好的用户体验,只要能做数据的增删改查即可。并且企业内部更注重维护的成本。
 
B/S架构的系统有哪些代表? 京东 百度 天猫 ....
列表
type
status
date
slug
summary
tags
category
icon
password
Property
 
notion image
notion image
 
🍁 初识stage窗口
type
status
date
slug
summary
tags
category
icon
password
Property
 
 
 
 
 
 
 
 
🦛 StampedLock
type
status
date
slug
summary
tags
category
icon
password
Property
 
ReadWriteLock可以解决多线程同时读,但只有一个线程能写的问题。
如果我们深入分析ReadWriteLock,会发现它有个潜在的问题:如果有线程正在读,写线程需要等待读线程释放锁后才能获取写锁,即读的过程中不允许写,这是一种悲观的读锁。
要进一步提升并发执行效率,Java 8引入了新的读写锁:StampedLock
StampedLockReadWriteLock相比,改进之处在于:读的过程中也允许获取写锁后写入!这样一来,我们读的数据就可能不一致,所以,需要一点额外的代码来判断读的过程中是否有写入,这种读锁是一种乐观锁。
乐观锁的意思就是乐观地估计读的过程中大概率不会有写入,因此被称为乐观锁。反过来,悲观锁则是读的过程中拒绝有写入,也就是写入必须等待。显然乐观锁的并发效率更高,但一旦有小概率的写入导致读取的数据不一致,需要能检测出来,再读一遍就行。
ReadWriteLock相比,写入的加锁是完全一样的,不同的是读取。注意到首先我们通过tryOptimisticRead()获取一个乐观读锁,并返回版本号。接着进行读取,读取完成后,我们通过validate()去验证版本号,如果在读取过程中没有写入,版本号不变,验证成功,我们就可以放心地继续后续操作。如果在读取过程中有写入,版本号会发生变化,验证将失败。在失败的时候,我们再通过获取悲观读锁再次读取。由于写入的概率不高,程序在绝大部分情况下可以通过乐观读锁获取数据,极少数情况下使用悲观读锁获取数据。
可见,StampedLock把读锁细分为乐观读和悲观读,能进一步提升并发效率。但这也是有代价的:一是代码更加复杂,二是StampedLock是不可重入锁,不能在一个线程中反复获取同一个锁。
StampedLock还提供了更复杂的将悲观读锁升级为写锁的功能,它主要使用在if-then-update的场景:即先读,如果读的数据满足条件,就返回,如果读的数据不满足条件,再尝试写。

小结

StampedLock提供了乐观读锁,可取代ReadWriteLock以进一步提升并发性能;
🍃 绘图
type
status
date
slug
summary
tags
category
icon
password
Property
 
 
很多程序如各种小游戏都需要在窗口中绘制各种图形,除此之外,即使在开发JavaEE项目时, 有时候也必须“动态”地向客户 端生成各种图形、图表,比如 图形验证码、统计图等,这都需要利用AWT的绘图功能。

组件绘图原理

之前的很多组件,例如Button、Frame、Checkbox等等,不同的组件,展示出来的图形都不一样,其实这些组件展示出来的图形,其本质就是用AWT的绘图来完成的。
在AWT中,真正提供绘图功能的是Graphics对象,那么Component组件和Graphics对象存在什么关系,才能让Component绘制自身图形呢?在Component类中,提供了下列三个方法来完成组件图形的绘制与刷新:
  • paint(Graphics g):绘制组件的外观;
  • update(Graphics g):内部调用paint方法,刷新组件外观;
  • repaint():调用update方法,刷新组件外观;
notion image
一般情况下,update和paint方法是由AWT系统负责调用,如果程序要希望系统重新绘制组件,可以调用repaint方法完成。
 
控制语句
type
status
date
slug
summary
tags
category
icon
password
Property
 
 
🦛 线程的状态
type
status
date
slug
summary
tags
category
icon
password
Property
 
 
在Java程序中,一个线程对象只能调用一次start()方法启动新线程,并在新线程中执行run()方法。一旦run()方法执行完毕,线程就结束了。因此,Java线程的状态有以下几种:
notion image
  • New:新创建的线程,尚未执行;
  • Runnable:运行中的线程,正在执行run()方法的Java代码;
  • Blocked:运行中的线程,因为某些操作被阻塞而挂起;
  • Waiting:运行中的线程,因为某些操作在等待中;
  • Timed Waiting:运行中的线程,因为执行sleep()方法正在计时等待;
  • Terminated:线程已终止,因为run()方法执行完毕。
当线程启动后,它可以在RunnableBlockedWaitingTimed Waiting这几个状态之间切换,直到最后变成Terminated状态,线程终止。
 
JavaScript
type
status
date
slug
summary
tags
category
icon
password
Property
notion image
JavaScript是运行在浏览器上的脚本语言。简称JS。 JavaScript是网景公司(NetScape)的 布兰登艾奇(JavaScript之父)开发的,最初叫做LiveScript。 LiveScript的出现让浏览器更加的生动了,不再是单纯的静态页面了。页面更具有交互性。 在历史的某个阶段,SUN公司和网景公司他们之间有合作关系,SUN公司把LiveScript的名字修改为JavaScript。
JavaScript这个名字中虽然带有“Java”但是和Java没有任何关系,只是语法上优点类似。他们运行的位置不同,Java运行在JVM当中,JavaScript运行在浏览器的内存当中。
 
JavaScript程序不需要我们程序员手动编译,编写完源代码之后,浏览器直接打开解释执行。 JavaScript的“目标程序”以普通文本形式保存,这种语言都叫做“脚本语言”。
Java的目标程序已.class形式存在,不能使用文本编辑器打开,不是脚本语言
 
网景公司1998年被美国在线收购。网景公司最著名的就是领航者浏览器:Navigator浏览器。
LiveScript的出现,最初的时候是为Navigator浏览器量身定制一门语言,不支持其他浏览器。