随笔录--线程间的通信方式

Java 访问修饰符 public、private、protected,以及无修饰符(默认)的区别

官方解析

在 Java 中,访问修饰符指的是控制类、接口、方法、属性等成员的访问范围。Java 提供了四种访问修饰符,分别为 public、private、protected 和默认(无修饰符)。

  • public:可以被任何类或对象访问。

  • private:只能被定义该成员的类访问,其他类无法访问。

  • protected:可以被当前类、子类和同一个包中的类访问。

  • 默认(无修饰符):可以被同一个包中的类访问。

下面简要总结一下各个访问修饰符的特点:

  • public 可以被任何类或对象访问,因此其访问范围最大,但也可能会存在安全问题。

  • private 限制了访问范围,可以有效保护数据的安全,但是可能会增加代码的耦合度。

  • protected 提供了一种在继承中使用的访问控制方式,但是可能会导致模块间的耦合。

  • 默认(无修饰符)访问范围比 protected 更小,只能被同一个包中的类访问,可以减小模块间的耦合。

访问修饰符的选择需要根据具体情况来考虑,不能一概而论。通常情况下,应该尽可能地将成员设置为 private,只在需要的情况下使用 public 或 protected。

需要注意的是,在同一个类中,成员可以直接访问其他成员,无论其访问修饰符是什么。

 

图片

 

题目二

线程间有哪些通信方式?

官方解析

线程间通信是多线程编程中非常重要的一个概念。在多线程编程中,有时候需要让线程之间进行数据交换、协作工作。以下是几种线程间通信的方式:

  • 共享内存:线程之间通过访问同一块共享内存区域来实现数据交换。

  • 消息队列:一个线程向消息队列中放入一条消息,另一个线程从消息队列中取出消息。

  • 管道(Pipe):管道是一种半双工的通信方式,一个进程可以向管道中写入数据,另一个进程可以从管道中读取数据。

  • 信号(Signal):信号是一种异步通信方式,进程收到信号后,会根据信号的类型做出相应的处理。

  • 互斥锁(Mutex):用于同步访问共享资源,防止多个线程同时访问共享资源,产生冲突。

  • 条件变量(Condition Variable):用于线程之间的协调和通信,一个线程可以通过条件变量等待某个条件的出现,另一个线程可以通过条件变量通知正在等待的线程。

以上是常用的几种线程间通信方式,不同的通信方式适用于不同的场景。在实际编程中,需要根据具体情况选择合适的通信方式。

 

共享内存:多个线程共享同一块内存空间,通过对内存的读写操作实现线程间的信息交换。可以使用 synchronized 关键字或 Lock 接口等机制来确保线程安全。

消息传递:多个线程之间通过消息传递实现信息交换。在Java中,可以使用wait()、notify()和notifyAll()等方法来实现线程间消息传递。wait()方法会使当前线程等待,直到其他线程调用notify()或notifyAll()方法唤醒它;notify()方法会随机唤醒等待队列中的一个线程;notifyAll()方法会唤醒等待队列中的所有线程。

信号量:通过信号量机制实现线程间的信息交换。Java中的 Semaphore 类就是一个信号量实现。

管道:管道是一种特殊的流,用于在线程之间传递数据。Java 中的 PipedInputStream 和 PipedOutputStream 类就是管道的实现。

RPC调用:远程过程调用(RPC)是一种跨网络进行的远程调用,可以实现在不同的线程或机器之间进行信息交换。

林风补充:

线程间通信与进程间通信的区别

线程是轻量级的进程,系统进行资源调度的基本单位是进程,但是因为进程上下文切换开销太大,所以有了线程,节省开销。线程本身也是共享进程的内存,上下文切换方便。

安全性,线程间通信的安全性相对较低,需要采用同步机制来保证共享变量的正确性;而进程间通信的安全性相对较高,进程之间相互隔离,不会对对方的内存进行非法操作。

题目三

什么是分布式?为什么需要分布式?

官方解析

分布式是指在多台计算机上协同工作的系统,这些计算机通过网络连接在一起,共同完成一个任务。

分布式系统能够有效地解决单台计算机处理能力不足、系统容易宕机、数据存储容量有限等问题,同时能够提高系统的可靠性、可用性和性能,适用于数据量较大、并发量高、访问频繁的场景。

此外,分布式系统还可以通过横向扩展的方式提高系统的性能和可靠性,同时降低单点故障的风险,提高了系统的可伸缩性,方便进行升级和维护。

在分布式系统中,由于数据和计算任务被分布在多台计算机上,不同计算机之间需要进行通信和协调,因此需要解决分布式一致性、负载均衡、故障恢复、数据共享和安全等问题,同时需要考虑数据的一致性和可靠性。因此,分布式系统的设计和实现比单机系统更加复杂和困难,需要考虑到多个因素的综合影响。

前端

题目一

CSS3 新增了哪些特性?

官方解析

CSS3 新增了很多新的特性,其中一些主要的特性包括:

  1. Flexbox 弹性布局

  2. Grid 网格布局

  3. Animation 动画效果

  4. Transform 变换效果

  5. Transition 过渡效果

  6. Box-sizing 盒模型

  7. Shadow 阴影效果

  8. Text-shadow 文字阴影效果

  9. Gradient 渐变效果

  10. Border-radius 圆角效果

这些特性可以大大增强 CSS 的功能,帮助开发者更方便地实现一些复杂的布局和动画效果。同时,这些特性也使得网页的视觉效果更加丰富和生动。

 

CSS3 是 CSS 的第三个版本,也是最新的 CSS 标准,它包含了 CSS2.1 的所有功能,并且增加了许多丰富的特性:

  1. 替代(IE)盒模型

  2. 选择器:属性选择器、结构伪类选择器、伪元素选择器

  3. 边框与圆角:border-radius、border-image、box-shadow

  4. 文本:text-overflow、word-wrap、word-break、text-shadow

  5. calc():cal() 是 CSS3 新增的函数,用于动态计算属性值。

  6. 滤镜(filter):filter 用于定义元素(一般是)的可视效果(如模糊、饱和度)。

  7. 背景:background-image 、background-size、background-origin、background-clip

  8. 渐变(Gradients):可以实现元素背景中两种或多种颜色之间的渐进过渡效果。

  9. 字体图标:字体图标是一种使用字体文件中的符号来代替图像的技术。与传统的图像图标相比,字体图标具有许多优点,如易于使用、可调整大小、可缩放等。

  10. 过渡(Transition):用于将元素从一种状态平滑过渡到另一种状态,即实现动画效果。只有在某些特定的事件触发时才能过渡,比如鼠标悬停等。

  11. 动画(Animation):通过定义关键帧和时间函数来精确控制动画,可以实现比过渡更加自由和复杂的动画效果,且无需通过事件触发。

  12. 多列布局:多列布局是 CSS3 中一种用于分隔文本和内容的布局方式,它可以将一段文本分成多列,从而使页面更加紧凑和易读。

  13. 弹性盒子(Flex Box):弹性盒子是 CSS3 提供的一种新的布局方式,相比于传统的浮动定位布局更加灵活高效,常用在移动端。

  14. 2D转换:2D 转换是指在二维平面中对元素进行变换,包括平移、缩放、旋转和倾斜,不影响页面布局。

  15. 多媒体查询:CSS3 支持多媒体查询,即根据设备类型来适应不同的屏幕尺寸,从而为用户带来更好的体验。

  16. 3D 转换:3D 转换是指在三维空间中对元素进行变换,包括平移、缩放、旋转、倾斜和透视,不影响页面布局。

总之,CSS3 是一种强大、灵活、易于维护的样式表语言,它包含了许多新的特性和功能,可以帮助开发者更加高效地创建网页。

题目二

如何使用 JavaScript 来判断用户设备类型?比如判断是 PC 端还是移动端访问?

官方解析

可以通过以下两种方式来判断用户设备类型:

一、利用 navigator.userAgent 属性来获取用户代理信息,然后通过正则表达式判断是否为移动设备。示例代码如下:

function isMobile() {
  return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
}

// 使用示例
if (isMobile()) {
  console.log('This is a mobile device.');
} else {
  console.log('This is a desktop device.');
}

这里的正则表达式匹配了一些移动设备的关键词,如果用户代理信息中包含这些关键词,则可以认为是移动设备。

二、利用 window.matchMedia 方法来根据屏幕宽度判断是否为移动设备。示例代码如下:

function isMobile() {
  return window.matchMedia('(max-width: 768px)').matches;
}

// 使用示例
if (isMobile()) {
  console.log('This is a mobile device.');
} else {
  console.log('This is a desktop device.');
}

这里的参数 (max-width: 768px) 表示屏幕宽度最大为 768 像素,如果当前屏幕宽度小于等于 768 像素,则可以认为是移动设备。

 

可以使用一些特定的 API 来判断用户设备类型,以下是一些常用的方法:

  1. navigator.userAgent:该属性返回用户代理头的字符串,可以使用正则表达式来判断是否包含移动设备的标识符,例如 "Mobile"、"Android"、"iPhone" 等。如果包含则说明是移动设备,否则是 PC 端。

  2. window.matchMedia():该 API 可以根据不同的媒体查询条件来判断用户设备类型,例如屏幕宽度、设备方向等。可以使用 media query 字符串来创建一个 MediaQueryList 对象,然后调用 matches 属性来判断是否匹配。

  3. window.innerWidth 和 window.innerHeight:这两个属性返回浏览器窗口的宽度和高度,可以根据窗口大小来判断用户设备类型。通常移动设备的屏幕宽度比较小,因此可以将窗口宽度小于某个值作为判断条件。

  4. 使用第三方库:有一些第三方库可以更准确地判断用户设备类型,例如 isMobile、mobile-detect、detect.js 等。这些库通常基于更全面的用户代理头信息和设备特性进行判断,可以提供更精确的结果。使用这些库需要先引入对应的库文件,然后调用相应的方法进行判断。

  5. 使用特殊标识:在 URL 参数中添加特殊标识或者在 Cookie 中保存设备类型信息,然后通过解析 URL 参数或者读取 Cookie 中的信息来判断用户设备类型。这种方法需要在用户访问时设置对应的标识或者信息,然后在后续请求中使用。

  6. 使用 UA 字符串:每个浏览器都有一个 User-Agent (UA) 字符串,其中包含了浏览器和设备的相关信息。通过解析 UA 字符串,可以判断用户设备类型。但需要注意的是,UA 字符串可以被篡改,因此这种方法并不可靠。

一的回答

用户访问网站的设备不断增多,包括 PC 端、移动端、平板电脑等等,对于 web 开发者而言,如何判断用户访问当前页面的设备,可以帮助我们正确调节页面,为不同设备用户提供优质的体验。使用 JavaScript 来判断用户访问网站的设备类型,尤其是 PC 与移动端设备间的区分,有以下几种方法。

通过浏览器 userAgent 来区分

当网页加载时,浏览器会将设备的相关信息发送给服务器,在 JavaScript 中,我们可以利用navigator.userAgent获取到这些信息,浏览器会将手机的相关信息发送给服务器,通过判断这些信息,可以较准确的判断用户是否使用的是手机浏览器,也可以进一步区分不同的移动端设备。

利用 JavaScript 的屏幕大小

JavaScript 中可以获取到浏览器的屏幕大小,可以通过屏幕的大小,来区分 PC 与移动端设备,一般来说,PC 端的屏幕比较大,而移动端的屏幕则相对较小。

检测固定设备

除了上述两种方法之外,我们还可以通过检测设备固定的参数来进行判断,比如移动端可以检测window.orientation参数,使用改参数可以判断设备是否处于横屏或竖屏模式,从而得出用户设备。

以上三种方式是使用 JavaScript 判断用户访问网站的设备类型,特别是 PC 与移动端的区分,在实际应用中,我们可以将多种判断方式结合使用,让判断更加准确,可以根据设备类型应用不同的 css 样式,也可以加载不同大小的图片等。

题目三

什么是浏览器的同源策略?为什么要有同源策略?

官方解析

同源策略(Same-Origin Policy)是指浏览器安全策略中的一项重要规则,它规定了浏览器只允许当前网页的脚本与来自同一站点(协议、主机、端口号相同)的窗口进行交互,而限制了与不同源(协议、主机、端口号任一不同)的窗口进行交互。这种限制能够有效保障用户的信息安全和隐私。

同源策略限制了跨域请求、Cookie、LocalStorage、IndexedDB 等跨站点资源的访问,防止恶意网站窃取用户数据和攻击。同源策略的存在是 Web 安全的重要保障,是浏览器防范跨站脚本攻击(XSS)、跨站请求伪造(CSRF)等安全威胁的关键措施。

如果需要进行跨域请求或共享数据,可以通过特定的手段(如 JSONP、CORS、代理等)来实现。同时,Web 应用开发中应当严格遵守同源策略的原则,避免将敏感信息暴露在跨域页面中。

 

浏览器同源策略是网景公司出于浏览器安全考虑而制定的策略。同源指的是协议、域名、端口三者均相同,如果三者中存在有不同之处,而称为跨域。跨域请求会被发送到服务器,但是返回的响应会被浏览器拦截。

同源策略又分为三种:

  1. DOM同源策略

  2. XMLHttpRequest请求同源策略

  3. Cookie、LocalStorage存储同源策略

如果不存在同源策略的限制,则会出现XSS、CSRF等Web攻击。比如如果用户通过iframe引入了其他页面,用户在页面中填写了用户名和密码,那么恶意攻击者就可以获取不同源的DOM结构,从而获取用户的信息。又比如用户向网站A发送的请求,网站A向Cookie中添加了用户表示,此时用户访问恶意网站B,执行了恶意脚本,导致网站B向网站A发送Ajax请求并且携带了网站A对应的Cookie,此时网站B就可以从Cookie中解析出用户的信息。

  • 23
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值