首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

计算机初级选手的成长历程——指针(5)

,将操作对象变成不变的,这个关键字我们前面几乎没有遇到过,它具体有什么作用呢?...现在有朋友可能就有疑问了,局部变量出现这种情况我都能理解,此时它是因为出了自己的作用域就被销毁了嘛,但是你都说了全局变量是跟随整个工程的,你这现在不是自己打自己的脸吗?...但是为什么我们说它const修饰的局部变量只是拥有了常属性呢?...那如果此时const放在*的左边能不能对指针指向的对象进行修改呢?我们继续测试: 可以看到,此时的指针p是可以对指向的对象进行修改的。...; 当指针指向的地址不再使用时,将指针置为空(NULL); 在使用指针前,检查指针的有效性; 既然我们需要再使用指针前检查指针的有效性,那我们应该怎么做呢?

17410

我要狠狠反驳“公司禁止使用Lombok”的观点!

Delombok 工具完成这一过程。...使用过 Lombok 之后,我发现这是一种很流氓的行为。 我的反驳:你装不装Lombok 插件不是你喜不喜欢,不是由你个人意愿决定的,这是工作,公司要求怎么做就要怎么做,这是规定。...Lombok 所以制,我们并不能操控,只有当你需要调试时才发现有一个奇怪的 “小强” 在等着你; 最后,在运行代码之前,所有 JavaBean 中的方法你只能想象他们长什么样子,你并不能看见。...我的反驳:不满意@AllArgsConstructor的做法你可以使用@Builder啊,这个支持你任意顺序任意数量的创建对象,你不了解Lombok的其它用法就说它不好。...如果你确实想让自己的代码更加精炼,同时又兼顾可读性和编码效率,不妨使用主流的 Scala 或 Kotlin 这一基于 JVM 的语言。 我的反驳:破坏了完整性?

63630
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    我要狠狠的反驳“公司禁止使用Lombok”的观点

    Delombok 工具完成这一过程。...使用过 Lombok 之后,我发现这是一种很流氓的行为。 我的反驳:你装不装Lombok 插件不是你喜不喜欢,不是由你个人意愿决定的,这是工作,公司要求怎么做就要怎么做,这是规定。...Lombok 所以制,我们并不能操控,只有当你需要调试时才发现有一个奇怪的 “小强” 在等着你; 最后,在运行代码之前,所有 JavaBean 中的方法你只能想象他们长什么样子,你并不能看见。...我的反驳:不满意@AllArgsConstructor的做法你可以使用@Builder啊,这个支持你任意顺序任意数量的创建对象,你不了解Lombok的其它用法就说它不好。...如果你确实想让自己的代码更加精炼,同时又兼顾可读性和编码效率,不妨使用主流的 Scala 或 Kotlin 这一基于 JVM 的语言。 我的反驳:破坏了完整性?

    79230

    深入AQS源码阅读与强软弱虚4种引用以及ThreadLocal原理与源码

    是不用运行的,如果没有得到这把锁,后面的acquireQueued()才需要运行,那么想一下没有得到这把锁的时候它会运行什么呢?...=x+10,这肯定不是原子操作,因为当你写这句话的时候,你是需要加锁的,要做到线程安全的话是需要加锁的,但是如果通过handle是不需要的,所以这就是为什么会有VarHandle,VarHandle除了可以完成普通属性的原子操作...和get就完全的把他隔离开了,就是我自己线程里面所特有的,其它的线程是没有的,以前我们的理解是都在一个map,然而并不是,所以你得读源码,读源码你就明白了 为什么要用ThreadLocal?...因为有引用指向,所以不会回收,只有没有引用指向的时候才会回收,指向谁?指向你创建的那个对象。...所以你这个时候怎么做到自动回收呢?你可以检测虚引用里的Queue,什么时候Queue检测到DirectByteBuffffer(直接内存)被回收了,这个时候你就去清理堆外内存,堆外内存怎么回收呢?

    24730

    我要狠狠的反驳“公司禁止使用Lombok”的观点

    Delombok 工具完成这一过程。...使用过 Lombok 之后,我发现这是一种很流氓的行为。 我的反驳:你装不装Lombok 插件不是你喜不喜欢,不是由你个人意愿决定的,这是工作,公司要求怎么做就要怎么做,这是规定。...Lombok 所以制,我们并不能操控,只有当你需要调试时才发现有一个奇怪的 “小强” 在等着你; 最后,在运行代码之前,所有 JavaBean 中的方法你只能想象他们长什么样子,你并不能看见。...我的反驳:不满意@AllArgsConstructor的做法你可以使用@Builder啊,这个支持你任意顺序任意数量的创建对象,你不了解Lombok的其它用法就说它不好。...如果你确实想让自己的代码更加精炼,同时又兼顾可读性和编码效率,不妨使用主流的 Scala 或 Kotlin 这一基于 JVM 的语言。 我的反驳:破坏了完整性?

    47970

    一篇文章带你揭 秘现代浏览器原理与方法_浏览器发送请求原理

    4.寻找一个渲染进程来绘制⻚面 在网络进程做完所有的检查后并且能够确定浏览器应该导航到该请求的站点,它就会告诉UI线程所 有的数据都已经被准备好了。...不过如果发生诸如网站被重定向到不同站点的情况,刚刚那个渲染进程就不能被使用了,它会被摒弃,一个新的渲染进程会被启动。...一旦渲染进程完成渲染(load),它会通过IPC告知浏览器进程,然后UI线程就会停止导航栏上的loading 图片 三、导航到不同的站点 上面讲述了一个导航的过程, 那么这时候如果我们想去浏览另一个网...⻚, 浏览器会怎么做呢?...2.如果第二次导航是到不同的站点呢? 会有另外一个渲染进程被启动来完成这次重导航,而当前的渲染进程会继续处理现在⻚面的一些收尾工作,例如unload事件的监听函数执行。

    44720

    用Python支持 7 亿月活用户的应用?Instagram 是这样实现的

    事实上,Instagram 目前已经完成了将运行环境迁移到 Python 3 的工作 - 他们的整套服务已经在 Python 3 上跑了好几个月了。那么他们是怎么做到的呢?...等等,函数文档里面说它是 str 类型。 但随着时间推移,万一这个参数的类型发生变化了呢?如果某位粗心的工程师修改代码的同时忘了更新文档,那就会给函数的使用者带来很大麻烦,最终还不如没有注释呢。...不能影响产品新特性的开发 但是,在 Instagram 的开发环境中,要满足上面这两点来完成迁移到 Python 3.6 这种庞大的工程是非常困难的。...作为开发人员,如果需要在调用每个函数时都要想想: 这里到底是应该编码成二进制,或者是解码成文本呢? 将会是非常大的负担。...同时还开发了很多新的工具,帮助他们进行性能调优 Instagram 带给我们的启示 Instagram 的演讲视频时间不长,但是内容很丰富,在编写此文前,我完全没有想到最终的文章会这么长。

    1.8K71

    如何运用领域驱动设计 - 值对象

    既然值对象是没有ID的一个事物(东西),那么我们来考虑一下什么情况下我们不需要通过ID来辨识一个东西: “在超市购物的时候:我有五块钱,你也有五块钱” 这里会关心我的钱和你的钱是同一张,同一个编码,同一个组合方式...它会考虑该马桶的出厂编码,如果马桶出现故障,它会被返厂维修,并且通过唯一的id进行跟踪。 显然,同样的东西,在不同的语境中居然有着不同的意义。...还是一个问题的思考,也许我在国外的超市购物,我需要将我的人民币转换成为美元。这对我们编码来说它是一个行为动作,因此可能是一个方法。那么我们将这个转换的方法放在哪儿呢?...,我们是返回了一个新的Money对象,而不是在当前对象上进行修改。...这是因为我们的值对象拥有一个很重要的特性,不可变性。 值对象是不可变的:一旦创建好之后,值对象就永远不能变更了。相反,任何变更其值的尝试,其结果都应该是创建带有期望值的整个新实例。

    81330

    8 个 DOM 功能

    如果你用过 jQuery,可能熟悉该库中的类似功能:.one() 方法。...scrollTo() 方法用于在窗口或元素中平滑滚动 平滑滚动总是经常被用到的。当点击本地页面链接并立即跳转到指定位置时(如果你眨眼,甚至可能会错过跳转过程),这会显得很突兀。...但是如果我希望回调函数能够接受参数呢?...但是,如果由于某种原因我想使文本节点分开,但我仍然希望能够将文本作为一个单元抓取,那么 wholeText 就是有用的。因此我可以在相邻的文本节点上执行此操作,而不是调用 normalize()。...这需要你将 event 对象传递给函数,因为在该对象上调用了 preventDefault()方法。 但是你可以用 event 对象做更多事情。

    1.8K20

    ConcurrentDictionary 对决 Dictionary+Locking

    但如果某个资源被创建后未被回收该怎么办? 你可能会说,一个对象被创建后,如果已经对其没有任何引用,将会被垃圾回收掉。但,请再考虑下,如果下面描述的情形发生了会怎样: 使用Emit动态生成代码。...如果有两个线程同时在查询同一个键值,第一个得到字典锁的线程将会完成对象的创建工作,另一个线程会等待这个创建的完成,并在得到字典锁之后获取到已创建的键值结果。 这样挺好的,不是吗? 真不是!...创建类似这种对象几乎是瞬间的事。并且在此之后,你不需要再创建新的对象,仅需更改其中保存的值。所以可以允许创建两次的方式,直到仅有一个实例被使用。...如果我们并不关心是否在并行的创建对象,或者其中的一些已经被丢弃,我们可以加锁,用来检测该数据项是否已经存在,然后释放锁,创建数据项,按后再获取锁,再次检查数据项是否存在,如果不存在,则添加该数据项。...所以,读线程可以读取字典内容而不需要锁,而读到的肯定是旧值和新值中的一个,并没有机会读到一个未完成的值。

    1.6K70

    测试是浪费时间,我的程序肯定没问题

    你需要把之前所有的过程全部重复一遍,把每个值都再输入一遍,看看校验的结果。如果让计算机自动的帮你校验这些是不是会更好些呢? 通过把测试过程自动化,你可以在任何时候对程序进行任何遍次的测试。...你不可能编写出解析器后不去测试它,问题是,你如何测试它?通常,你会创建一个XML样板文件,把它输入解析器里,手工检查解析的结果。...当Bug出现时,巨大的变化发生了。 如果没有自动化测试,你必须手工的检查所有的东西来确保你在修正一个Bug时不会引入其它的错误。...如果这个bug不能重现,问题就可能出自其它地方,如果不能用自动化测试来重现这个bug,你可能在错误的地方修改了这个bug,很可能改坏了你的程序。当你写出测试程序,你必须先运行它确保它会失败。...如果测试没有失败,什么地方可能出了问题,你没能正确的重现它。 当你修改了这个Bug,你也有了针对它的测试程序,你可以立即发现这个bug是否还会出现。 当你这时又发现另外一个bug时该怎么做?

    64250

    简述你对ioc的理解_对剩余价值的理解总结

    它的意思是说,代理AOPBean定义注册信息但是这里并不是实际去代理你的对象,因为对象还没有被创建。只是代理了Bean定义信息,还没有被实例化。...如果说在createBeanInstance这个方法中在创建Bean的时候它会去检测你的依赖关系,会去检测你的构造器。...为什么会抛出异常,因为,走getBean的时候他会去从你的单例缓存池中去拿,因为你这里的Bean还没有被创建好。自然不会被放进缓存中,所以它是在缓存中拿不到B对象的。反过来也是拿不到A对象的。...这就是为什么Spring IOC不能解决构造器循环依赖的原因。因为你还没来的急放入缓存你的对象是不存在的。所以不能创建。同理@Bean标注的循环依赖方法也是不能解决的,跟这个同理。...通过populateBean给属性赋值,我们知道,创建好的对象,并不是一个完整的对象,里面的属性还没有被赋值。所以这个方法就是为创建好的Bean为它的属性赋值。

    51520

    Windows Universal 应用 – Tip Calculator

    这里,我们会设计并完成一个Universal的Tip Calculator应用程序,该应用程序可以部署到Windows Phone手机上或者是Windows设备中。 1....在对应的cs文件中,创建的事件处理函数如下 ?     在后台代码中,我们创建一个Tip类的对象,并且在MainPage的构造函数中创建这个对象的实例: ?    ...LINQ语句检查用户选择的RadioButton;这种方法的优点在于,加入一个新的RadioButton控件,我们不需要增加新的代码去完成这个判断,但如果使用Switch语句就不一样了。    ...首先,当用户输入新的账单时,即在(billAmountTextBox_TextChanged)这个事件被触发时;其次是用户选择不同的小费比例时,即在(RadioButton_Click)事件被触发时。...如,当我点击Bill Amount TextBox控件输入内容时,该控件就应该自动清空上次我输入的内容,而不应该由我自己手动清除。 ?     其次,在输入完毕内容以后,我希望在前面加上美元符。

    94080

    测试是浪费时间,我的程序肯定没问题

    你需要把之前所有的过程全部重复一遍,把每个值都再输入一遍,看看校验的结果。如果让计算机自动的帮你校验这些是不是会更好些呢? 通过把测试过程自动化,你可以在任何时候对程序进行任何遍次的测试。...你不可能编写出解析器后不去测试它,问题是,你如何测试它?通常,你会创建一个XML样板文件,把它输入解析器里,手工检查解析的结果。...当Bug出现时,巨大的变化发生了。 如果没有自动化测试,你必须手工的检查所有的东西来确保你在修正一个Bug时不会引入其它的错误。...如果这个bug不能重现,问题就可能出自其它地方,如果不能用自动化测试来重现这个bug,你可能在错误的地方修改了这个bug,很可能改坏了你的程序。当你写出测试程序,你必须先运行它确保它会失败。...如果测试没有失败,什么地方可能出了问题,你没能正确的重现它。 当你修改了这个Bug,你也有了针对它的测试程序,你可以立即发现这个bug是否还会出现。 当你这时又发现另外一个bug时该怎么做?

    34310

    Sentinel 隔离和降级

    我们所编写的Fallback逻辑啊,自然就生效了啊。 如果启动不了,可以检查一下启动类。 我们去重启一下项目,重启完成啊,我们打开浏览器啊,在这里呢,我们去刷新一下。 看一下触点链路啊。...那这个请求的业务它依赖于服务a和服务b,如果说我们现在用的是线程池隔离。 那么他就会给这个业务所依赖的每个服务都创建一个线程池,你不是依赖于AB吗?...那如果我依赖的服务越多,那我这个扇出是不是也就越高,而扇出越高,那调用的越多,我需要开启的线程也越多,我的消耗是不是也就越大呀?所以呢,它不适用于。高扇出的场景。 好,那这是它的一些缺点和优点了啊。...所以呢,它不能做主动超时啊啊,当然更不用提异步调用了,你就没有独立线程,怎么做异步调用? 当然,这是它的一个缺点啊,那因此呢,它比较适用于啊,高频高删除的这种场景。 为什么呢?因为你不管调用多少服务。...那么这个时候它就会拦截进入该服务的一些请求了。 也就相当于是中断了,但是啊,你不能一直是熔断状态吧,那万一这个服务它又恢复了呢,那因此啊,我们这个熔断的状态啊,它会有一个持续的时间。

    38210

    读spring @Async的源码让我收获了什么?

    而实现了BeanFactoryAware接口,就意味着要重写setBeanFacotory方法,该方法是核心代码: ? 知识点:我们在项目中如果想根据bean的名称获取bean实例该怎么办呢?...该方法先从method上面找@Async注解,如果有则使用方法上定义的执行器名称,如果没有则用该方法所在类上定义的执行器名称,所以要特别注意一下,@Async注解既可以使用在方法上,又可以使用在类上面,...回到上面代码,如果既没有从缓存中获取到syncTaskExecutor对象实例,又没有定义过线程池,则创建一个默认的任务执行器:SimpleAsyncTaskExecutor对象。...并且defaultExecutor对象被定义成了volatile的,为什么要这样定义?...所以,这里使用volatile,防止指令重排。如果有些朋友想进一步了解volatile原理,可以看看《天天在用volatile,你知道它的底层原理吗?》。 那么,为什么说它有意思?

    52250

    2024全网最全面及最新且最为详细的网络安全技巧 七之 XSS漏洞典例分析POC;EXP以及 如何防御和修复(6)———— 作者:LJS

    HTML词法解析细则是一篇冗长的文档,这篇博文并不会覆盖它的所有内容。这篇博文只会覆盖有关文档解码如何结束,以及新token何时被创建这两个有趣的部分。...例如,你不能对协议类型进行任何的编码操作,不然URL解析器会认为它无类型。这就是为什么问题1中的代码不能被执行。因为URL中被编码的“javascript”没有被解码,因此不会被URL解析器识别。...该原则对协议后面的“:”(冒号)同样适用,即问题3也得到解答。然而,你可能会想到:为什么问题2中的脚本被执行了呢?...html->url->javascript 其次,URL编码过程使用UTF-8编码类型来编码每一个字符。如果你尝试着将URL链接做了其他编码类型的编码,URL解析器就可能不会正确识别。...如果是,则将其退回。否则,JS 会检查原型是否具有该属性。如果没有,JS 会检查原型的原型……以此类推,直到原型为null. 它被称为原型链。

    11910

    kubectl 创建 Pod 背后到底发生了什么?

    下面我们将这个过程分解一下。 当收到请求时,kube-apiserver 是如何知道它该怎么做的呢?事实上,在客户端发送调用请求之前就已经产生了一系列非常复杂的流程。...默认情况下保存到 etcd 中的键的格式为 /,你也可以自定义。 资源创建过程中出现的任何错误都会被捕获,最后 storage provider 会执行 get 调用来确认该资源是否被成功创建。...你可能会注意到一个问题:如果 kube-apiserver 不能显示这些资源,那么用户级控制器是如何处理资源的呢? 为了解决这个问题,kube-apiserver 暴露了一个 ?...状态的产生过程非常过程,所以很有必要深入了解一下背后的原理: 首先串行执行一系列 Pod 同步处理器(PodSyncHandlers),每个处理器检查检查 Pod 是否应该运行在该节点上。...最后,Pod 的 Condition 字段由 Pod 内所有容器的状态决定。现在我们的容器还没有被容器运行时创建,所以 PodReady 的状态被设置为 False。

    1.4K41

    Kotlin学习日志(六)控件使用

    ,输入类型限制,比如账号指定是纯数字、还是数字加字母,一般来说是纯数字的,纯数字要限制多少位数,如果是手机号的话需要用正则表达式来验证是否为正规的手机号,总不能你输入个13888888888,我都能让你登录上去吧...,那这个程序员也要开除,其次就是登录的时候与后台的数据库进行查询对比,假如没有这个手机号是不是还要先注册呢?...然后密码当然不能明文显示,也不能明文传输啊,也不能是纯数字或者纯字母,特殊符号什么的,这里又涉及到了密码的安全登录,常见的是三级,纯数字是不行的,这一步你在注册的时候就过不去,然后是最短和最长的密码位数限制...,所以任何功能的设定都没有你实际看上去的那么简单,如果你想的过于简单的话,都不用到客户,测试就能玩死你,你信不信?...,比如手机号,就限制你只能输入数字,并且点击之后弹出数字键盘,而不是默认的文字键盘。

    1.8K30

    太实用了!自己动手写软件——GUI编程

    这几天我有一个想法就是将我之前做测试写的一些协议脚本(如:ssh、FTP、SMTP、MySQL、Oracle等)综合在一起做一个密码破解器,这么多的协议放在一起,每个协议都有自己特殊的参数,如果还是和之前我们的方式一起通过命令行输入的方式未免就太麻烦了...但是如果提供一个软件界面,将不同的协议作为选择项,不同协议需要不同的参数,这样一个相对方便的密码破解软件是不是就好了呢。...出于这样的考虑,今天我们看一下图形用户界面(Graphical User Interface,GUI)编程,看了一下网上python的GUI编码库有很多,但是tkinter是内置库,所以我们还是选择这个内置库作为我们的工具对象了...我们今天就来学习一下tkinter的使用。后面几天我们也将持续更新我们密码破解工具的完成过程,有兴趣的小伙伴可以和菜鸟小白一起每天完成一部分内容,最终自己完成一个软件的编写。...Button内容是一致的,就是Label控件调用的Label函数,它没有回调函数,所以说它只是相当于一个信息提供框。

    4.2K10
    领券