tantan的博客

Notes, ideas, and observations

Java的ORM框架 vs Python的ORM框架

TODO: 待更新

Spring学习

#IoC容器

#前言

什么垃圾软件, 毁我人生!!

Visio 画图如何添加自定义连接点

在工具栏选中"连接点"

学习Oracle使用

OracleDB

Java Spring 框架学习

Spring框架,它最主要的功能就是管理一堆使App(应用)发挥功能的类,这些作为整个App的基石、主干的类,就叫做bean。

Java 包(Package), Jar和模块(Module)的区别

  • 包 (Package)

    • 是Java源文件的集合, 包含Class/Interface/Annotation的定义

    • 与文件系统中的目录对应

    • 主要目的是防止命名冲突

  • Jar (Java Archive File)

    • 是编译后的Java代码(.class)的压缩包

    • 实际上是一个zip格式文件

    • 对Jar的操作用jar命令, 其语法类似Linux下的tar

      • 创建Jar包: jar cvf test.jar test

      • 解压Jar包: jar xvf test.jar

      • 列举Jar包的内容: jar tvf test.jar

  • 模块 (Module)

    • 是Java语言内置的一种管理组件之间依赖关系的方法, 在Java 9被引入

    • Module 解决的问题:

      • 在Java 9之前, 主要使用package作为封装方式,使用Jar作为模块, 封装方式由 package和访问修饰符 (private, protected, public,包私有) 控制

        • 任何模块都能访问其他模块的public的代码,不同Jar下的同名包可以相互访问包私有的代码。

        • 无法控制非平台开发者对平台内部包的访问,如应用代码可以访问sun.misc、com.sun.security这样和具体平台绑定的包。

        • 没有明确的依赖信息,模块开发者无法设置必须的依赖,模块使用者不清楚该模块必须依赖哪些模块。只能使用外部的工具,如Maven、Gradle、OSGI等。

    • Module 的优势

      • 明确的依赖配置,JPMS会在编译和运行之前检查当前环境是否满足依赖的要求。JPMS会检查版本冲突,即当有两个模块暴露了相同的包名时,系统会抛出异常。JPMS支持传递性依赖。

      • 强大的封装,模块可以明确指定哪些包能暴露给哪些模块,JPMS不允许代码使用反射的方式访问不对外开放的包。

      • 性能优化,JPMS完全清楚哪些模块是需要的,所以不需要的模块不会被JVM载入。

    • Module 的不足:

      • 缺乏对模块的版本的支持
    • 特点:

      ![](https://frezcirno.github.io/static/images/2020-12-04-java-module.jpg)
      

秘书问题

  • 又称相亲问题、止步问题、见好就收问题、苏丹的嫁妆问题、挑剔的求婚者问题等

  • 要聘请一名秘书,有 n 个应聘者。每次面试一人,面试后就要及时决定是否聘他,如果当时决定不聘他,他便不会回来。面试后总能清楚了解应聘者的合适程度,并能和之前的每个人做比较。问什么样的策略,才使最佳人选被选中的概率最大。

  • 答案:

    展开
    • 这个问题的最优解是一个停止规则。在这个规则里,面试官会拒绝头 r - 1 个应聘者 (令他们中的最佳人选为 应聘者 M),然后选出第一个比 M 好的应聘者。可见最优策略包含于这个系列的策略中。 (如果M在所有n个应聘者中也是最好的一个,那么这个策略将选不出任何人选)对于任意的截断值 r,最佳人选被选中的概率是:

      P(r)=i=1nP(applicant i is selectedapplicant i is the best)=i=1nP(applicant i is selectedapplicant i is the best)P(applicant i is the best)=[i=1r10+i=rnP(the best of the first i1 applicantsis in the first r1 applicantsapplicant i is the best)]1n=[i=rnr1i1]1n=r1ni=rn1i1.{\displaystyle {\begin{aligned}P(r)&=\sum _{i=1}^{n}P\left({\text{applicant }}i{\text{ is selected}}\cap {\text{applicant }}i{\text{ is the best}}\right)\\&=\sum _{i=1}^{n}P\left({\text{applicant }}i{\text{ is selected}}|{\text{applicant }}i{\text{ is the best}}\right)\cdot P\left({\text{applicant }}i{\text{ is the best}}\right)\\&=\left[\sum _{i=1}^{r-1}0+\sum _{i=r}^{n}P\left(\left.{\begin{array}{l}{\text{the best of the first }}i-1{\text{ applicants}}\\{\text{is in the first }}r-1{\text{ applicants}}\end{array}}\right|{\text{applicant }}i{\text{ is the best}}\right)\right]\cdot {\frac {1}{n}}\\&=\left[\sum _{i=r}^{n}{\frac {r-1}{i-1}}\right]\cdot {\frac {1}{n}}\quad =\quad {\frac {r-1}{n}}\sum _{i=r}^{n}{\frac {1}{i-1}}.\end{aligned}}}

    • 当n趋近于无穷大时

      P(x)=xx11tdt=xln(x).{\displaystyle P(x)=x\int _{x}^{1}{\frac {1}{t}}\,dt=-x\ln(x).}

    • 求出最优的x值为

      1e\frac {1}{e}

0%