华为 p30pro 设置网络代理

今天给手机访问公司内网wifi设置代理时踩了个坑。
具体情况是这样的:我需要用手机访问项目对应网站进行测试,为抓包应设置charles代理(即手机在通过wifi访问网站时,首先经由主机(本人的mac)进行代理,之后访问网站,这样由于主机上已经安装了charles根证书,故可以解析网站对应接口传回的响应。

在这里插入图片描述
嗯?需要填域名?域名?DNS?主机的DNS还是wifi路由器的DNS?主机有DNS?一头问号。
(经研究,貌似只有华为较高端机型更新后会出现这个问题,设置代理时需要键入域名,否则无法保存。)
解决方案:域名和下面代理设置时填的”服务器主机名“字段的值相同即可(即用作代理的主机在该网段中的ip地址)。
键入本人mac的ip地址,搞定。

### Java 中指令重排的原因 在计算机体系结构中,为了提高处理器性能,现代 CPU 实现了乱序执行技术。这种技术允许 CPU 对无依赖关系的指令重新排列以优化资源利用率和减少等待时间[^4]。然而,在多线程环境下,这种行为可能导致某些特定条件下程序的行为不符合预期。 --- ### 指令重排的影响 当多个线程共享数据时,如果其中一个线程修改了一个变量而另一个线程读取该变量,则可能出现不一致的情况。这是因为编译器或运行时环境可能会对代码中的语句进行调整以提升效率,而这可能破坏程序员期望的操作顺序[^3]。具体来说: - **可见性问题**:即使一个线程已经更新了某个变量,其他线程也可能看不到最新的值。 - **有序性问题**:对于一些需要严格遵循发生次序的任务而言,指令被重新安排会打破原有的逻辑链条。 例如,在双重校验锁模式下创建单例对象时如果没有采取适当措施防止指令重拍现象的发生就容易造成实例化失败或者返回未完全初始化的对象给调用方[^2]。 --- ### 解决方案 #### 方法一:volatile 关键字 `volatile` 是一种轻量级同步机制,它能够确保标记的变量在每次访问前都从主存中获取最新版本而不是缓存副本,并且禁止对其所修饰字段相关的写入与后续读取之间的任何形式的重排序操作[^1]。 ```java private volatile static Singleton instance; public static Singleton getInstance() { if (instance == null) { // 第一次检查 synchronized (Singleton.class) { if (instance == null) { // 第二次检查 instance = new Singleton(); // 这里涉及三个步骤:分配内存空间 -> 调用构造函数初始化对象 -> 将对象指向刚分配的内存地址 } } } return instance; } ``` 上述例子展示了如何利用 `volatile` 来避免因指令重排而导致的问题。 #### 方法二:synchronized 锁定 虽然加锁开销较大,但它可以有效阻止同一时刻只有一个线程能进入临界区,因此自然也规避掉了由指令重排引起的风险。 #### 方法三:使用原子类(Atomic Classes) Java 提供了一些特殊的工具包如 java.util.concurrent.atomic 下的各种原子里类型,它们内部实现了基于 CAS(Compare And Swap) 的算法来完成高效并发控制而不必担心低层硬件层面可能发生的变化影响到高层应用逻辑。 --- ### 总结 综上所述,理解并妥善处理好 JVM 层面以及底层架构上的特性对于我们编写健壮可靠的软件至关重要。通过合理运用诸如 `volatile`, `synchronized` 或者 Atomic 类型等功能组件可以帮助我们克服由于指令重排所带来的挑战。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值