├── .github
└── workflows
│ └── ci.yml
├── .idea
├── .gitignore
├── interview-notes.iml
├── misc.xml
├── modules.xml
└── vcs.xml
├── CNAME
├── docs
├── angular
│ └── index.md
├── css
│ └── index.md
├── db
│ ├── cassandra.md
│ ├── couchbase.md
│ ├── dynamoDB.md
│ ├── index.md
│ ├── mongodb.md
│ ├── oracle.md
│ ├── postgreSql.md
│ └── redis.md
├── design-pattern
│ ├── behavioral-pattern.md
│ ├── creational-pattern.md
│ ├── index.md
│ ├── other-pattern.md
│ └── structural-pattern.md
├── devops
│ ├── artifact.md
│ ├── cicd.md
│ ├── cloud
│ │ ├── aws.md
│ │ ├── azure.md
│ │ ├── gcp.md
│ │ ├── openshift.md
│ │ └── pcf.md
│ ├── config.md
│ ├── container.md
│ ├── gitops.md
│ ├── iac.md
│ ├── index.md
│ ├── logging.md
│ ├── orchestration.md
│ ├── scanning.md
│ └── vcs.md
├── ds-algo
│ ├── algorithms.md
│ └── index.md
├── golang
│ └── index.md
├── html
│ └── index.md
├── index.md
├── java
│ ├── collection-framework.md
│ ├── images
│ │ ├── Exceptions.png
│ │ ├── Life-Cycle-Thread.png
│ │ ├── Shallow-Vs-Deep-cloning.png
│ │ ├── hashMap-internal.png
│ │ ├── hashing.png
│ │ └── intermediate and terminal operations.png
│ ├── index.md
│ ├── java-basics.md
│ ├── java17.md
│ ├── java8
│ │ ├── FunctionalInterface.md
│ │ └── java8.md
│ └── multi-threading.md
├── javascript
│ └── index.md
├── microservices
│ ├── index.md
│ └── solid.md
├── misc
│ ├── agile.md
│ ├── production-support.md
│ └── security-scan.md
├── mq
│ ├── activemq.md
│ ├── kafka.md
│ ├── pubsub.md
│ ├── rebbitmq.md
│ ├── redis.md
│ ├── servicebus.md
│ └── sqs.md
├── nodejs
│ ├── eventloop.md
│ ├── express.md
│ ├── index.md
│ ├── module.md
│ └── websocket.md
├── python
│ └── index.md
├── qa
│ ├── cucumber.md
│ ├── index.md
│ ├── jmeter.md
│ ├── microservices
│ │ ├── apigee.md
│ │ ├── jest.md
│ │ ├── karate.md
│ │ ├── mocha-chai.md
│ │ ├── postman.md
│ │ ├── rest-assured.md
│ │ └── testng.md
│ ├── mobile
│ │ ├── appium.md
│ │ └── robot-framework.md
│ └── website
│ │ ├── cypress.md
│ │ ├── protractor.md
│ │ ├── selenium.md
│ │ └── webdriverIO.md
├── react
│ ├── enzyme.md
│ ├── eslint.md
│ ├── index.md
│ ├── jest.md
│ ├── lifecycle.md
│ ├── nextjs.md
│ ├── performance.md
│ ├── react-component.md
│ ├── react-router.md
│ ├── redux-thunk.md
│ ├── redux.md
│ ├── rest-api.md
│ └── testing.md
├── spring
│ ├── Spring-aop.md
│ ├── images
│ │ ├── JpaRepositoryUml.png
│ │ └── spring-mvc-flow.png
│ ├── index.md
│ ├── security
│ │ ├── annotations.md
│ │ ├── filters.md
│ │ ├── images
│ │ │ ├── ExceptionTranslationFilter.png
│ │ │ ├── Figure 2. DelegatingFilterProxy .png
│ │ │ ├── Figure 3. FilterChainProxy .png
│ │ │ ├── Figure 4. SecurityFilterChain .png
│ │ │ ├── Figure 5. Multiple SecurityFilterChain .png
│ │ │ └── Figure1-FilterChain .png
│ │ └── security.md
│ ├── spring-batch.md
│ ├── spring-cloud.md
│ ├── spring-data-jpa.md
│ ├── spring-mvc.md
│ ├── spring-security.md
│ ├── springboot
│ │ ├── spring-boot.md
│ │ └── springboot-actuator.md
│ ├── swagger-docs.md
│ ├── transaction.md
│ └── webFlux.md
├── tags.md
└── typescript
│ └── index.md
├── includes
└── abbreviations.md
├── mkdocs.yml
└── site
├── 404.html
├── angular
├── index.html
└── typescript
│ └── index.html
├── assets
├── images
│ └── favicon.png
├── javascripts
│ ├── bundle.caa56a14.min.js
│ ├── bundle.caa56a14.min.js.map
│ ├── lunr
│ │ ├── min
│ │ │ ├── lunr.ar.min.js
│ │ │ ├── lunr.da.min.js
│ │ │ ├── lunr.de.min.js
│ │ │ ├── lunr.du.min.js
│ │ │ ├── lunr.el.min.js
│ │ │ ├── lunr.es.min.js
│ │ │ ├── lunr.fi.min.js
│ │ │ ├── lunr.fr.min.js
│ │ │ ├── lunr.he.min.js
│ │ │ ├── lunr.hi.min.js
│ │ │ ├── lunr.hu.min.js
│ │ │ ├── lunr.hy.min.js
│ │ │ ├── lunr.it.min.js
│ │ │ ├── lunr.ja.min.js
│ │ │ ├── lunr.jp.min.js
│ │ │ ├── lunr.kn.min.js
│ │ │ ├── lunr.ko.min.js
│ │ │ ├── lunr.multi.min.js
│ │ │ ├── lunr.nl.min.js
│ │ │ ├── lunr.no.min.js
│ │ │ ├── lunr.pt.min.js
│ │ │ ├── lunr.ro.min.js
│ │ │ ├── lunr.ru.min.js
│ │ │ ├── lunr.sa.min.js
│ │ │ ├── lunr.stemmer.support.min.js
│ │ │ ├── lunr.sv.min.js
│ │ │ ├── lunr.ta.min.js
│ │ │ ├── lunr.te.min.js
│ │ │ ├── lunr.th.min.js
│ │ │ ├── lunr.tr.min.js
│ │ │ ├── lunr.vi.min.js
│ │ │ └── lunr.zh.min.js
│ │ ├── tinyseg.js
│ │ └── wordcut.js
│ └── workers
│ │ ├── search.b8dbb3d2.min.js
│ │ └── search.b8dbb3d2.min.js.map
└── stylesheets
│ ├── main.f2e4d321.min.css
│ ├── main.f2e4d321.min.css.map
│ ├── palette.06af60db.min.css
│ └── palette.06af60db.min.css.map
├── db
├── cassandra
│ └── index.html
├── couchbase
│ └── index.html
├── dynamoDB
│ └── index.html
├── index.html
├── mongodb
│ └── index.html
├── oracle
│ └── index.html
├── postgreSql
│ └── index.html
└── redis
│ └── index.html
├── design-pattern
├── behavioral-pattern
│ └── index.html
├── creational-pattern
│ └── index.html
├── index.html
├── other-pattern
│ └── index.html
└── structural-pattern
│ └── index.html
├── devops
├── artifact
│ └── index.html
├── cicd
│ └── index.html
├── cloud
│ ├── aws
│ │ └── index.html
│ ├── azure
│ │ └── index.html
│ ├── gcp
│ │ └── index.html
│ ├── openshift
│ │ └── index.html
│ └── pcf
│ │ └── index.html
├── config
│ └── index.html
├── container
│ └── index.html
├── gitops
│ └── index.html
├── iac
│ └── index.html
├── index.html
├── logging
│ └── index.html
├── orchestration
│ └── index.html
├── scanning
│ └── index.html
└── vcs
│ └── index.html
├── ds-algo
├── algorithms
│ └── index.html
└── index.html
├── golang
└── index.html
├── index.html
├── java
├── collection-framework
│ └── index.html
├── images
│ ├── Exceptions.png
│ ├── Life-Cycle-Thread.png
│ ├── Shallow-Vs-Deep-cloning.png
│ ├── hashMap-internal.png
│ ├── hashing.png
│ └── intermediate and terminal operations.png
├── index.html
├── java-basics
│ └── index.html
├── java17
│ └── index.html
├── java8
│ └── index.html
└── multi-threading
│ └── index.html
├── microservices
├── index.html
└── solid
│ └── index.html
├── misc
├── agile
│ └── index.html
└── security-scan
│ └── index.html
├── mq
├── activemq
│ └── index.html
├── kafka
│ └── index.html
├── pubsub
│ └── index.html
├── rebbitmq
│ └── index.html
├── redis
│ └── index.html
├── servicebus
│ └── index.html
└── sqs
│ └── index.html
├── nodejs
├── express
│ └── index.html
├── index.html
└── websocket
│ └── index.html
├── python
└── index.html
├── qa
├── cucumber
│ └── index.html
├── index.html
├── jmeter
│ └── index.html
├── microservices
│ ├── apigee
│ │ └── index.html
│ ├── jest
│ │ └── index.html
│ ├── karate
│ │ └── index.html
│ ├── mocha-chai
│ │ └── index.html
│ ├── postman
│ │ └── index.html
│ ├── rest-assured
│ │ └── index.html
│ └── testng
│ │ └── index.html
├── mobile
│ ├── appium
│ │ └── index.html
│ └── robot-framework
│ │ └── index.html
└── website
│ ├── cypress
│ └── index.html
│ ├── protractor
│ └── index.html
│ ├── selenium
│ └── index.html
│ └── webdriverIO
│ └── index.html
├── react
├── enzyme
│ └── index.html
├── eslint
│ └── index.html
├── index.html
├── jest
│ └── index.html
├── lifecycle
│ └── index.html
├── performance
│ └── index.html
├── react-router
│ └── index.html
└── redux
│ └── index.html
├── search
└── search_index.json
├── sitemap.xml
├── sitemap.xml.gz
└── spring
├── Spring-aop
└── index.html
├── images
├── JpaRepositoryUml.png
└── spring-mvc-flow.png
├── index.html
├── security
├── images
│ ├── ExceptionTranslationFilter.png
│ ├── Figure 2. DelegatingFilterProxy .png
│ ├── Figure 3. FilterChainProxy .png
│ ├── Figure 4. SecurityFilterChain .png
│ ├── Figure 5. Multiple SecurityFilterChain .png
│ └── Figure1-FilterChain .png
└── security
│ └── index.html
├── spring-batch
└── index.html
├── spring-boot
└── index.html
├── spring-cloud
└── index.html
├── spring-data-jpa
└── index.html
├── spring-mvc
└── index.html
├── spring-security
└── index.html
└── swagger-docs
└── index.html
/.github/workflows/ci.yml:
--------------------------------------------------------------------------------
1 | name: ci
2 | on:
3 | push:
4 | branches:
5 | - master
6 | - main
7 | permissions:
8 | contents: write
9 | jobs:
10 | deploy:
11 | runs-on: ubuntu-latest
12 | steps:
13 | - uses: actions/checkout@v4
14 | - name: Configure Git Credentials
15 | run: |
16 | git config user.name github-actions[bot]
17 | git config user.email 41898282+github-actions[bot]@users.noreply.github.com
18 | - uses: actions/setup-python@v5
19 | with:
20 | python-version: 3.x
21 | - run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV
22 | - uses: actions/cache@v4
23 | with:
24 | key: mkdocs-material-${{ env.cache_id }}
25 | path: .cache
26 | restore-keys: |
27 | mkdocs-material-
28 | - run: pip install mkdocs-material
29 | - run: mkdocs gh-deploy --force
30 |
--------------------------------------------------------------------------------
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 | # Editor-based HTTP Client requests
5 | /httpRequests/
6 | # Datasource local storage ignored files
7 | /dataSources/
8 | /dataSources.local.xml
9 | # Zeppelin ignored files
10 | /ZeppelinRemoteNotebooks/
11 |
--------------------------------------------------------------------------------
/.idea/interview-notes.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/CNAME:
--------------------------------------------------------------------------------
1 | interview-notes.com
--------------------------------------------------------------------------------
/docs/angular/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Angular
3 | hide:
4 | - tags
5 |
6 | tags:
7 | - Angular
8 | - Angular Version History
9 |
10 |
11 | ---
12 |
13 | # Angular
14 |
15 |
16 | ---
17 |
18 | ## Angular
19 |
20 | ----
21 |
22 | ### Angular Version History
23 |
24 | The table below presents the Angular version history, highlighting the release dates, version numbers, and notable changes. Angular has evolved significantly since its initial release, improving its framework with each version to enhance performance, developer experience, and support for modern web development practices. The details for the latest version are included up to April 2023.
25 |
26 | | Version Number | Release Date | Notable Changes |
27 | |----------------| ------------ | --------------- |
28 | | 15 | November 2022| - features like static type annotations, improved error handling, and router updates. |
29 | | 14 | June 2022 | - Standalone Components, Directives, and Pipes introduced, simplifying the Angular module system.
- Typed Forms for improved type safety.
- Extended developer diagnostics. |
30 | | 13 | November 2021| - Removal of View Engine, making Ivy the default rendering engine.
- Improvement in performance and bundle sizes. |
31 | | 12 | May 2021 | - Nullish coalescing support in templates.
- Ivy-based language service for improved tooling. |
32 | | 11 | November 2020| - Faster builds and automatic font inlining for improved performance.
- Updated Hot Module Replacement (HMR) support. |
33 | | 10 | June 2020 | - New date range picker in the Material UI library.
- Warnings for CommonJS imports to encourage the use of ECMAScript modules. |
34 | | 9 | February 2020| - Introduction of Ivy compiler and runtime as default, offering smaller bundle sizes and faster testing.
- Improved internationalization. |
35 | | 8 | May 2019 | - Differential loading for ES5 and ES2015+ builds, optimizing loading times.
- Dynamic imports for lazy routes. |
36 | | 7 | October 2018 | - Performance improvements and CLI prompts.
- Support for TypeScript 3.1, RxJS 6.3, and Node 10. |
37 | | 6 | May 2018 | - Introduction of Angular Elements, allowing Angular components to be used as custom elements.
- Angular Material and CDK stable release.
- CLI workspaces and library support. |
38 | | 5 | November 2017| - Build optimizer for smaller bundles.
- Angular Universal Transfer State API.
- Support for internationalized number, date, and currency pipes. |
39 | | 4 | March 2017 | - No version 3 to avoid confusion with the router package version.
- Improved *ngIf and *ngFor.
- Introduction of Angular Universal. |
40 | | 2 | September 2016| - Complete rewrite from AngularJS, introducing components and TypeScript.
- Modular development structure. |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/docs/db/cassandra.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/db/cassandra.md
--------------------------------------------------------------------------------
/docs/db/couchbase.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/db/couchbase.md
--------------------------------------------------------------------------------
/docs/db/dynamoDB.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/db/dynamoDB.md
--------------------------------------------------------------------------------
/docs/db/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | icon: material/database-outline
3 | ---
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/docs/db/mongodb.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/db/mongodb.md
--------------------------------------------------------------------------------
/docs/db/oracle.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/db/oracle.md
--------------------------------------------------------------------------------
/docs/db/postgreSql.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/db/postgreSql.md
--------------------------------------------------------------------------------
/docs/db/redis.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/db/redis.md
--------------------------------------------------------------------------------
/docs/design-pattern/behavioral-pattern.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/design-pattern/behavioral-pattern.md
--------------------------------------------------------------------------------
/docs/design-pattern/creational-pattern.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/design-pattern/creational-pattern.md
--------------------------------------------------------------------------------
/docs/design-pattern/index.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/design-pattern/index.md
--------------------------------------------------------------------------------
/docs/design-pattern/other-pattern.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/design-pattern/other-pattern.md
--------------------------------------------------------------------------------
/docs/design-pattern/structural-pattern.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/design-pattern/structural-pattern.md
--------------------------------------------------------------------------------
/docs/devops/artifact.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Artifact Repository
3 | hide:
4 | - tags
5 |
6 | tags:
7 | - Nexus Repository
8 | - JFrog Artifactory
9 |
10 | ---
11 |
12 |
13 | # Artifact Repository
14 |
15 |
16 | ---
17 |
18 |
19 |
20 | ## Nexus Repository
21 |
22 |
23 | ---
24 |
25 |
26 | ## JFrog Artifactory
27 |
28 |
29 |
30 | ---
--------------------------------------------------------------------------------
/docs/devops/cicd.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: CI/CD
3 | hide:
4 | - tags
5 |
6 | tags:
7 | - Jenkins
8 | - Travis CI
9 | - CircleCI
10 | - GitLab CI/CD
11 | - Azure DevOps
12 | - TeamCity
13 | - Bamboo
14 | ---
15 |
16 |
17 | # Continuous Integration/Continuous Deployment (CI/CD)
18 |
19 |
20 | ---
21 |
22 | Continuous Integration/Continuous Deployment (CI/CD):
23 |
24 |
25 |
26 | ## Jenkins
27 |
28 | ------------
29 |
30 | ## Bamboo
31 |
32 | ------------
33 |
34 | ## Travis CI
35 |
36 | ------------
37 |
38 | ## CircleCI
39 |
40 | ------------
41 |
42 | ## GitLab CI/CD
43 |
44 | ------------
45 | ## Azure DevOps
46 |
47 | ------------
48 | ## TeamCity
49 |
50 | ------------
51 |
--------------------------------------------------------------------------------
/docs/devops/cloud/aws.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/devops/cloud/aws.md
--------------------------------------------------------------------------------
/docs/devops/cloud/azure.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/devops/cloud/azure.md
--------------------------------------------------------------------------------
/docs/devops/cloud/gcp.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/devops/cloud/gcp.md
--------------------------------------------------------------------------------
/docs/devops/cloud/openshift.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/devops/cloud/openshift.md
--------------------------------------------------------------------------------
/docs/devops/cloud/pcf.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/devops/cloud/pcf.md
--------------------------------------------------------------------------------
/docs/devops/config.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Configuration Management
3 | hide:
4 | - tags
5 |
6 | tags:
7 | - Ansible
8 | - Puppet
9 | - Chef
10 | - Terraform
11 | ---
12 |
13 |
14 | # Configuration Management
15 |
16 |
17 | ---
18 |
19 |
20 | ## Ansible
21 |
22 | ------------
23 |
24 | ## Puppet
25 |
26 | ------------
27 |
28 | ## Terraform
29 |
30 | ------------
31 |
32 | ## Chef
33 |
34 | ------------
35 |
36 |
37 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/docs/devops/container.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Container Registries
3 | hide:
4 | - tags
5 |
6 | tags:
7 | - Docker Hub
8 | - Amazon ECR (Elastic Container Registry)
9 | - Google Container Registry (GCR)
10 | - Azure Container Registry (ACR)
11 |
12 | ---
13 |
14 |
15 | # Container Registries
16 |
17 |
18 | ---
19 |
20 |
21 | ## Docker Hub
22 |
23 |
24 | ---
25 | ## Amazon ECR (Elastic Container Registry)
26 |
27 |
28 | ---
29 | ## Google Container Registry (GCR)
30 |
31 |
32 | ---
33 |
34 | ## Azure Container Registry (ACR)
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/docs/devops/gitops.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: GitOps
3 | hide:
4 | - tags
5 |
6 | tags:
7 | - ArgoCD
8 | - FluxCD
9 |
10 | ---
11 |
12 |
13 | # GitOps
14 |
15 |
16 | ---
17 |
18 |
19 |
20 | ## ArgoCD
21 |
22 |
23 | ---
24 |
25 | ## FluxCD
26 |
27 |
28 | ---
29 |
30 |
31 |
32 | ---
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/docs/devops/index.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/devops/index.md
--------------------------------------------------------------------------------
/docs/devops/orchestration.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Containerization and Orchestration
3 | hide:
4 | - tags
5 | tags:
6 | - Docker
7 | - Kubernetes
8 | - Docker Swarm
9 | - Amazon ECS (Elastic Container Service)
10 | - Google Kubernetes Engine (GKE)
11 | - Azure Kubernetes Service (AKS)
12 |
13 | ---
14 |
15 |
16 | # Containerization and Orchestration
17 |
18 |
19 | ---
20 |
21 |
22 | ---
23 |
24 |
25 | ## Docker
26 |
27 |
28 | ------
29 |
30 |
31 | ## Kubernetes
32 |
33 |
34 |
35 | ------
36 |
37 |
38 | ## Docker Swarm
39 |
40 |
41 | ---------
42 |
43 |
44 | ## Amazon ECS (Elastic Container Service)
45 |
46 |
47 | ---------
48 |
49 |
50 | ## Google Kubernetes Engine (GKE)
51 |
52 |
53 | ---------
54 |
55 |
56 | ## Azure Kubernetes Service (AKS)
57 |
58 |
59 | ---------
60 |
61 |
62 |
63 |
64 | ---
65 |
66 |
67 |
68 |
69 |
70 |
--------------------------------------------------------------------------------
/docs/devops/scanning.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Security Scanning and Compliance
3 | hide:
4 | - tags
5 |
6 | tags:
7 | - SonarQube
8 | - OWASP ZAP (Zed Attack Proxy)
9 | - Checkmarx
10 | - Nessus
11 | - Qualys
12 |
13 | ---
14 |
15 |
16 | # Security Scanning and Compliance
17 |
18 |
19 | ---
20 |
21 |
22 | ## SonarQube
23 |
24 | ------------
25 |
26 | ## Checkmarx
27 |
28 | ------------
29 |
30 | ## Nessus
31 |
32 | ------------
33 |
34 | ## Qualys
35 |
36 | ------------
37 |
38 | ## OWASP ZAP (Zed Attack Proxy)
--------------------------------------------------------------------------------
/docs/devops/vcs.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: VCS
3 | hide:
4 | - tags
5 |
6 | tags:
7 | - Git
8 | - GitHub
9 | - GitLab
10 | - Bitbucket
11 | ---
12 |
13 |
14 | # Version Control Systems (VCS)
15 |
16 |
17 | ---
18 |
19 |
20 |
21 | ## Bitbucket
22 |
23 | ------------
24 |
25 | ## Git
26 |
27 | ------------
28 |
29 | ## GitHub
30 |
31 | ------------
32 | ## GitLab
33 |
34 | ------------
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/docs/ds-algo/algorithms.md:
--------------------------------------------------------------------------------
1 |
2 | # Algorithms
3 |
4 |
5 | ---
6 |
7 | ## Algorithms
--------------------------------------------------------------------------------
/docs/ds-algo/index.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/ds-algo/index.md
--------------------------------------------------------------------------------
/docs/golang/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Golang
3 | hide:
4 | - tags
5 |
6 | tags:
7 | - Golang
8 | - Golang Version History
9 |
10 | ---
11 |
12 |
13 | # Golang
14 |
15 |
16 | ---
17 |
18 | ## Golang
19 |
20 |
21 | ---
22 |
23 | ### Golang Version History
24 |
25 |
26 | | Version | Release Date | Notable Changes |
27 | |---------------|---------------|-----------------|
28 | | 1.18 | March 2022 | - Introduction of Generics.
- Fuzzing integrated into the testing package.
- Workspaces for managing multiple modules. |
29 | | 1.17 | August 2021 | - Changes to the memory model and calling convention on x86-64 platforms to improve performance.
- Pruning of the module graph to reduce dependencies. |
30 | | 1.16 | February 2021 | - Embedding static files and file trees into Go binaries using the `//go:embed` directive.
- `io/fs` package to create file systems. |
31 | | 1.15 | August 2020 | - Improvements to the Go linker, reducing binary sizes.
- Changes to the `time` package to accommodate for historical zoneinfo changes.
- X.509 CommonName deprecation. |
32 | | 1.14 | February 2020 | - Improved defer performance.
- Goroutine asynchronous preemption.
- Modules considered production-ready. |
33 | | 1.13 | September 2019| - Error wrapping.
- Number literals improvements.
- The `go` command now downloads and authenticates modules using the Go module mirror and checksum database by default. |
34 | | 1.12 | February 2019 | - Opt-in to versioned modules as part of Go's transition to using modules for dependency management.
- Significant runtime performance improvements. |
35 | | 1.11 | August 2018 | - Introduction of Go modules for versioned dependency management.
- Experimental WebAssembly support. |
36 | | 1.10 | February 2018 | - Improved caching of build and test results.
- The Go toolchain now defaults to `go build` and `go test` producing cached results. |
37 | | 1.9 | August 2017 | - Type aliases.
- Parallel compilation of functions in a single package. |
38 | | 1.8 | February 2017 | - Introduction of the `context` package.
- Garbage collector improvements. |
39 | | 1.7 | August 2016 | - The `context` package moved into the standard library.
- Compiler and linker optimizations and improvements. |
40 | | 1.6 | February 2016 | - HTTP/2 support in `net/http` package.
- Security enhancements. |
41 | | 1.5 | August 2015 | - The compiler and runtime were rewritten in Go (previously C).
- Garbage collection and scheduler improvements. |
42 | | 1.4 | December 2014 | - Official support for Android development.
- New trace tool for viewing trace of program executions. |
43 | | 1.3 | June 2014 | - Various performance improvements and minor language changes.
- Better support for running Go on Google App Engine. |
44 | | 1.2 | December 2013 | - Minor language changes and improvements.
- Performance improvements in the garbage collector and race detector. |
45 | | 1.1 | May 2013 | - Performance improvements up to 30-40% for some workloads.
- New functionality in the `testing` package. |
46 | | 1.0 | March 2012 | - Initial stable release.
- Establishment of Go as a production-ready language. |
47 |
48 |
--------------------------------------------------------------------------------
/docs/java/images/Exceptions.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/java/images/Exceptions.png
--------------------------------------------------------------------------------
/docs/java/images/Life-Cycle-Thread.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/java/images/Life-Cycle-Thread.png
--------------------------------------------------------------------------------
/docs/java/images/Shallow-Vs-Deep-cloning.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/java/images/Shallow-Vs-Deep-cloning.png
--------------------------------------------------------------------------------
/docs/java/images/hashMap-internal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/java/images/hashMap-internal.png
--------------------------------------------------------------------------------
/docs/java/images/hashing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/java/images/hashing.png
--------------------------------------------------------------------------------
/docs/java/images/intermediate and terminal operations.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/java/images/intermediate and terminal operations.png
--------------------------------------------------------------------------------
/docs/misc/agile.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | # Agile methodology
4 |
5 |
6 | ---
7 | ## Agile methodology
8 |
9 |
10 |
11 | Agile methodology is an iterative and flexible approach to software development that emphasizes collaboration, customer feedback, and the delivery of working software. It promotes adaptability and continuous improvement, making it a popular choice for development teams seeking efficiency and customer-centricity.
12 |
13 |
14 | Agile methodology is a set of principles and practices that guide software development projects. It was introduced as a response to traditional, rigid project management approaches that often led to delayed deliveries, scope changes, and dissatisfaction among stakeholders. Agile methods prioritize customer satisfaction, teamwork, and the ability to respond to change. This article explores the key aspects of Agile methodology and its benefits for students, developers, and organizations.
15 |
16 | ## Key Concepts and Principles
17 |
18 | ### 1. **Iterative Development:**
19 |
20 | - **Description:** Agile projects are divided into small increments, often referred to as "iterations" or "sprints." Each iteration typically lasts 2-4 weeks and results in a potentially shippable product increment.
21 |
22 | - **Key Benefits:**
23 | - Allows for frequent delivery of working software.
24 | - Encourages early and continuous customer feedback.
25 | - Enables flexibility in adapting to changing requirements.
26 |
27 | ### 2. **Collaborative Teams:**
28 |
29 | - **Description:** Agile teams are cross-functional, consisting of members with various skills and roles. Collaboration among team members, stakeholders, and customers is essential.
30 |
31 | - **Key Benefits:**
32 | - Enhances communication and knowledge sharing.
33 | - Promotes a shared understanding of project goals and priorities.
34 | - Encourages collective responsibility for project success.
35 |
36 | ### 3. **Customer-Centric Approach:**
37 |
38 | - **Description:** Agile places a strong emphasis on understanding and meeting customer needs. Customer feedback is actively sought and integrated throughout the development process.
39 |
40 | - **Key Benefits:**
41 | - Results in products that better meet customer expectations.
42 | - Reduces the risk of building features that aren't valuable to users.
43 | - Fosters long-term customer relationships and loyalty.
44 |
45 | ### 4. **Adaptability and Flexibility:**
46 |
47 | - **Description:** Agile methodologies embrace change. They recognize that requirements and priorities can evolve, and they aim to accommodate these changes efficiently.
48 |
49 | - **Key Benefits:**
50 | - Allows for rapid response to market changes and emerging opportunities.
51 | - Reduces the resistance to change often seen in traditional development.
52 |
53 | ### 5. **Continuous Improvement:**
54 |
55 | - **Description:** Agile teams regularly reflect on their processes and seek ways to improve efficiency and effectiveness. This practice is often referred to as "retrospectives."
56 |
57 | - **Key Benefits:**
58 | - Encourages a culture of continuous learning and adaptation.
59 | - Helps teams identify and address bottlenecks and inefficiencies.
60 |
61 | ## Agile Frameworks and Methods
62 |
63 | Several Agile frameworks and methods exist, with Scrum, Kanban, and Extreme Programming (XP) being some of the most widely adopted:
64 |
65 | - **Scrum:** A framework that divides work into fixed-length iterations called sprints, with a focus on time-boxed, collaborative work and frequent feedback.
66 |
67 | - **Kanban:** A visual management method that aims to limit work in progress (WIP) and optimize the flow of work through a process.
68 |
69 | - **Extreme Programming (XP):** A methodology that emphasizes close collaboration between developers and customers, with a focus on continuous integration, testing, and frequent small releases.
70 |
71 | ## Benefits of Agile Methodology
72 |
73 | - **Customer Satisfaction:** Agile's customer-centric approach ensures that the product aligns with customer needs, leading to higher satisfaction.
74 |
75 | - **Faster Delivery:** Iterative development and regular releases enable faster time-to-market for new features and improvements.
76 |
77 | - **Improved Quality:** Continuous testing and review processes contribute to higher software quality.
78 |
79 | - **Enhanced Flexibility:** Agile teams can adapt to changing requirements and market conditions more effectively.
80 |
81 | - **Higher Collaboration:** Collaborative teams are more innovative and produce better solutions.
82 |
83 | - **Reduced Risk:** Frequent testing and feedback reduce the likelihood of major project failures.
84 |
85 |
86 |
87 | Agile methodology has revolutionized the software development industry by promoting adaptability, collaboration, and customer-centricity. Students, developers, and organizations can benefit from Agile's principles and practices, resulting in improved project outcomes, increased customer satisfaction, and a more responsive and efficient development process. Embrace Agile to stay competitive and meet the evolving needs of today's fast-paced software market.
--------------------------------------------------------------------------------
/docs/misc/production-support.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: production support
3 | hide:
4 | - tags
5 | tags:
6 | - production support
7 |
8 | ---
9 |
10 | # Production Support
11 |
12 | ---
13 |
14 | ## Essential Production Support Tools and APIs
15 |
16 | ### 1. Monitoring Tools
17 | - **Purpose**: These tools help monitor the health, performance, and availability of systems and applications in real-time.
18 | - **Examples**:
19 | - Nagios
20 | - Prometheus
21 | - Datadog
22 | - New Relic
23 |
24 | ### 2. Logging Tools
25 | - **Purpose**: Logging tools capture and analyze logs generated by applications and systems, aiding in troubleshooting and debugging.
26 | - **Examples**:
27 | - ELK Stack (Elasticsearch, Logstash, Kibana)
28 | - Splunk
29 | - Graylog
30 | - Fluentd
31 |
32 | ### 3. Incident Management Tools
33 | - **Purpose**: These tools facilitate the management of incidents, including logging, tracking, prioritizing, and resolving issues.
34 | - **Examples**:
35 | - Jira Service Management
36 | - ServiceNow
37 | - Zendesk
38 | - PagerDuty
39 |
40 | ### 4. Configuration Management Tools
41 | - **Purpose**: These tools automate the configuration and provisioning of infrastructure and application environments, ensuring consistency and reliability.
42 | - **Examples**:
43 | - Ansible
44 | - Puppet
45 | - Chef
46 | - Terraform
47 |
48 | ### 5. Version Control Systems (VCS)
49 | - **Purpose**: VCS helps track changes to code and configurations, enabling collaboration among development and operations teams.
50 | - **Examples**:
51 | - Git
52 | - Subversion (SVN)
53 | - Mercurial
54 |
55 | ### 6. API Documentation Tools
56 | - **Purpose**: These tools facilitate the creation, management, and sharing of API documentation, improving developer experience and understanding.
57 | - **Examples**:
58 | - Swagger (OpenAPI)
59 | - Postman
60 | - Apiary
61 | - Slate
62 |
63 | ### 7. Collaboration Tools
64 | - **Purpose**: Collaboration tools enable teams to communicate, share knowledge, and collaborate effectively.
65 | - **Examples**:
66 | - Slack
67 | - Microsoft Teams
68 | - Google Workspace
69 | - Confluence
70 |
71 | ### 8. Security Tools
72 | - **Purpose**: Security tools help identify and mitigate security vulnerabilities, ensuring the integrity and confidentiality of systems and data.
73 | - **Examples**:
74 | - Nessus
75 | - Qualys
76 | - OWASP ZAP
77 | - HashiCorp Vault
78 |
79 | ### 9. Performance Testing Tools
80 | - **Purpose**: These tools assess the performance, scalability, and reliability of systems under load conditions.
81 | - **Examples**:
82 | - Apache JMeter
83 | - LoadRunner
84 | - Gatling
85 | - Locust
86 |
87 | ### 10. Backup and Recovery Tools
88 | - **Purpose**: Backup and recovery tools automate the process of backing up data and restoring systems in case of failures or disasters.
89 | - **Examples**:
90 | - Veeam
91 | - Commvault
92 | - Acronis
93 | - Backup Exec
94 |
95 | These tools and APIs are essential for efficient production support, covering various aspects such as monitoring, incident management, configuration, security, and collaboration. Depending on the specific requirements and technologies in use, organizations may adopt a combination of these tools to streamline their support processes and ensure reliable operations.
96 |
97 |
98 | ---
99 |
100 | ## Monitoring Tools
101 |
102 | - **Overview**: Monitoring tools continuously track the health, performance, and availability of systems, applications, and services. They collect metrics and generate alerts when predefined thresholds are exceeded, allowing teams to proactively identify and resolve issues.
103 | - **Examples**: Nagios, Prometheus, Datadog, New Relic
104 |
105 | ### 1. Logging Tools
106 | - **Overview**: Logging tools capture, aggregate, and analyze log data generated by applications, servers, and network devices. They help troubleshoot issues, track system behavior, and meet compliance requirements by centralizing log management.
107 | - **Examples**: ELK Stack (Elasticsearch, Logstash, Kibana), Splunk, Graylog, Fluentd
108 |
109 | ### 2. Incident Management Tools
110 | - **Overview**: Incident management tools streamline the handling of incidents, from initial reporting to resolution. They provide workflows for logging, tracking, prioritizing, and assigning incidents, facilitating collaboration and ensuring timely resolution.
111 | - **Examples**: Jira Service Management, ServiceNow, Zendesk, PagerDuty
112 |
113 | ### 3. Configuration Management Tools
114 | - **Overview**: Configuration management tools automate the provisioning, configuration, and management of infrastructure and application environments. They enforce consistency, improve scalability, and reduce manual errors by codifying infrastructure as code.
115 | - **Examples**: Ansible, Puppet, Chef, Terraform
116 |
117 | ### 4. Version Control Systems (VCS)
118 | - **Overview**: Version control systems track changes to code and configuration files, enabling collaboration among development teams and providing a history of changes. They facilitate code review, branching, and merging, enhancing code quality and maintainability.
119 | - **Examples**: Git, Subversion (SVN), Mercurial
120 |
121 | ### 5. API Documentation Tools
122 | - **Overview**: API documentation tools facilitate the creation, publishing, and management of documentation for APIs. They help developers understand API endpoints, parameters, and usage examples, improving developer experience and integration.
123 | - **Examples**: Swagger (OpenAPI), Postman, Apiary, Slate
124 |
125 | ### 6. Collaboration Tools
126 | - **Overview**: Collaboration tools enable teams to communicate, share knowledge, and collaborate effectively. They provide features such as messaging, file sharing, task management, and video conferencing, fostering teamwork and productivity.
127 | - **Examples**: Slack, Microsoft Teams, Google Workspace, Confluence
128 |
129 | ### 7. Security Tools
130 | - **Overview**: Security tools help identify, assess, and mitigate security risks and vulnerabilities in systems and applications. They provide capabilities such as vulnerability scanning, penetration testing, threat detection, and access control.
131 | - **Examples**: Nessus, Qualys, OWASP ZAP, HashiCorp Vault
132 |
133 | ### 8. Performance Testing Tools
134 | - **Overview**: Performance testing tools evaluate the performance, scalability, and reliability of systems under various load conditions. They simulate user interactions, measure response times, and identify bottlenecks to optimize system performance.
135 | - **Examples**: Apache JMeter, LoadRunner, Gatling, Locust
136 |
137 | ### 9. Backup and Recovery Tools
138 | - **Overview**: Backup and recovery tools automate the process of backing up data and restoring systems in case of data loss, corruption, or disasters. They ensure data integrity, minimize downtime, and support business continuity.
139 | - **Examples**: Veeam, Commvault, Acronis, Backup Exec
140 |
141 | Each of these tools plays a crucial role in supporting production environments, addressing different aspects such as monitoring, incident management, configuration, security, collaboration, performance testing, and data protection. Organizations often integrate multiple tools to create a comprehensive support infrastructure tailored to their specific needs and requirements.
142 |
143 |
144 |
145 |
146 |
147 |
--------------------------------------------------------------------------------
/docs/mq/activemq.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/mq/activemq.md
--------------------------------------------------------------------------------
/docs/mq/kafka.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Kafka
3 | hide:
4 | - tags
5 |
6 | tags:
7 | - Kafka
8 | - Kafka Version History
9 |
10 | ---
11 |
12 |
13 | # Kafka
14 |
15 |
16 | ---
17 |
18 | ## Kafka Version History
19 |
20 |
21 | | Version | Release Date | Key Features Introduced |
22 | |----------|----------------|-----------------------------------------------------------------------------------------------|
23 | | 0.8.0 | February 2013 | - Initial stable release
- Replication for fault tolerance
- New Producer API |
24 | | 1.0.0 | November 2017 | - Exactly Once Semantics (EOS)
- Performance enhancements
- Kafka Streams maturity |
25 | | 0.10.0.0 | May 2016 | - Introduction of Kafka Streams API for stream processing |
26 | | 1.1.0 | April 2018 | - Introduction of KSQL (now known as ksqlDB) for SQL-like stream processing |
27 | | 2.6.0 | August 2020 | - KIP-500 early access to remove Zookeeper dependency
- Tiered storage for cost efficiency |
28 | | 2.8.0 | April 2021 | - Continued work on KIP-500 for a simpler architecture without Zookeeper |
29 | | 3.0.0 | September 2021 | - |
30 | | 3.0.0 | September 2021 | - |
31 | | 3.1.0 | January 2022 | - |
32 | | 3.2.0 | May 2022 | - |
33 | | 3.3.0 | 28 Sep 2022 | - |
34 | | 3.4.0 | 06 Feb 2023 | - |
35 | | 3.5.0 | 13 Jun 2023 | - |
36 | | 3.6.0 | 03 Oct 2023 | - |
37 |
38 |
39 | ### Improvements and New Features
40 |
41 | ### 1. **Apache Kafka 3.0.0**:
42 |
43 | #### **Major Improvements and New Features**:
44 |
45 | - **KRaft Consensus Mechanism**: Kafka 3.0 introduces improvements to **KRaft**, which is Kafka's built-in consensus mechanism designed to replace Apache ZooKeeper™. While KRaft is not yet recommended for production, enhancements have been made to its metadata and APIs.
46 | - **Exactly-Once Semantics**: Starting with Kafka 3.0, the producer now enables the **strongest delivery guarantees** by default (with `acks=all` and `enable.idempotence=true`). This ensures ordering and durability by default.
47 | - **Partition Reassignment Support**: Kafka Connect task restart enhancements, KStreams improvements in timestamp-based synchronization, and MirrorMaker2’s more flexible configuration options.
48 |
49 | #### **Universal Changes**:
50 |
51 | - **Deprecation of Java 8**: Support for Java 8 is deprecated across all components of the Apache Kafka project in 3.0. Java 8 support is planned to be removed in the next major release (4.0).
52 | - **Deprecation of Scala 2.12**: Support for Scala 2.12 is also deprecated in Kafka 3.0, with plans to remove it in the next major release (4.0).
53 |
54 | #### **KRaft Snapshot**:
55 |
56 | - KRaft controllers and brokers can now generate, replicate, and load snapshots for the metadata topic partition named `__cluster_metadata`. This efficient mechanism stores and replicates cluster metadata information.
57 | - **Revised KRaft Metadata Records**:
58 | - Improvements to metadata record types used when Kafka runs without ZooKeeper.
59 | - **Producer ID Generation in KRaft Mode**:
60 | - The Kafka Controller now fully handles generating producer IDs in both ZK and KRaft modes¹.
61 |
62 | ### 2. **Apache Kafka 3.6.0**:
63 | - **Many New Features and Improvements**:
64 |
65 |
66 |
67 | ---
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
--------------------------------------------------------------------------------
/docs/mq/pubsub.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/mq/pubsub.md
--------------------------------------------------------------------------------
/docs/mq/rebbitmq.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/mq/rebbitmq.md
--------------------------------------------------------------------------------
/docs/mq/redis.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/mq/redis.md
--------------------------------------------------------------------------------
/docs/mq/servicebus.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/mq/servicebus.md
--------------------------------------------------------------------------------
/docs/mq/sqs.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/mq/sqs.md
--------------------------------------------------------------------------------
/docs/nodejs/express.md:
--------------------------------------------------------------------------------
1 | # Express.js
2 |
3 | ---
4 |
5 | ## Express.js
6 |
7 | Express is a popular web application framework for Node.js that simplifies the process of building robust and scalable
8 | web applications. It provides a set of features and middleware to handle routing, HTTP requests, middleware management,
9 | and more, making it an excellent choice for creating web APIs, web applications, and backend services.
10 |
11 | Express is a web application framework for Node.js that serves as a foundational building block for creating web
12 | applications and APIs. It is designed to simplify the development of server-side applications in Node.js by providing a
13 | set of powerful features and tools. Here's a detailed explanation of the use and benefits of the Express framework in
14 | Node.js:
15 |
16 | ### 1. Web Application Development:
17 |
18 | Express is commonly used for building web applications. It simplifies the process of handling HTTP requests and
19 | responses, making it easier to create dynamic and interactive websites. Developers can define routes, templates, and
20 | controllers to structure their web applications efficiently.
21 |
22 | ### 2. RESTful API Development:
23 |
24 | Express is a popular choice for building RESTful APIs. It provides a clean and organized way to define API endpoints and
25 | handle incoming HTTP requests (GET, POST, PUT, DELETE, etc.). With middleware support, you can easily implement
26 | authentication, validation, and other common API functionalities.
27 |
28 | ### 3. Routing:
29 |
30 | Express offers a robust routing system that allows developers to define how the application responds to different HTTP
31 | requests and URL patterns. You can create routes for various parts of your application, making it easy to handle
32 | different types of requests and actions.
33 |
34 | ```javascript
35 | const express = require('express');
36 | const app = express();
37 |
38 | app.get('/', (req, res) => {
39 | res.send('Hello, World!');
40 | });
41 |
42 | app.get('/about', (req, res) => {
43 | res.send('About Us');
44 | });
45 |
46 | // More routes can be added here
47 | ```
48 |
49 | ### 4. Middleware:
50 |
51 | Middleware functions in Express allow you to modify incoming requests and outgoing responses in a modular way. This
52 | enables you to add functionalities such as authentication, logging, error handling, and data parsing at specific points
53 | in the request-response cycle.
54 |
55 | ```javascript
56 | app.use(express.json()); // Parse JSON data from requests
57 | app.use(express.urlencoded({extended: true})); // Parse URL-encoded data
58 | app.use(middlewareFunction); // Custom middleware
59 | ```
60 |
61 | ### 5. Template Engines:
62 |
63 | Express can be integrated with various template engines like EJS, Handlebars, Pug (formerly Jade), and more. Template
64 | engines facilitate the dynamic generation of HTML pages and views, making it easier to build server-rendered web
65 | applications.
66 |
67 | ### 6. Database Integration:
68 |
69 | Express can be used with various databases and ORMs (Object-Relational Mapping libraries) like MongoDB, Mongoose,
70 | PostgreSQL, Sequelize, and others. This makes it versatile for building applications that require database interactions.
71 |
72 | ### 7. Scalability:
73 |
74 | Express is designed to be lightweight and unopinionated, allowing developers to choose the components and libraries that
75 | best suit their needs. This flexibility makes it well-suited for both small-scale projects and large-scale,
76 | high-performance applications.
77 |
78 | ### 8. Community and Ecosystem:
79 |
80 | Express has a vast and active community of developers, which results in a rich ecosystem of middleware, extensions, and
81 | plugins. This makes it easy to find solutions and resources for common development challenges.
82 |
83 | ### 9. Security:
84 |
85 | While Express provides the building blocks for web applications, developers are responsible for implementing security
86 | measures. Express itself does not enforce security, but it offers middleware options and best practices to help secure
87 | applications against common threats.
88 |
89 | ### 10. Error Handling:
90 |
91 | Express provides built-in error handling mechanisms and middleware for handling errors gracefully. You can define
92 | error-handling middleware to centralize error processing and ensure that errors do not crash your application.
93 |
94 | ```javascript
95 | app.use((err, req, res, next) => {
96 | // Custom error handling logic
97 | console.error(err);
98 | res.status(500).send('Internal Server Error');
99 | });
100 | ```
101 |
102 | ### 11. Session Management:
103 |
104 | Express can be used with various session management solutions, such as Express Sessions or third-party middleware
105 | like `express-session`. This enables you to manage user sessions and authentication in your web applications.
106 |
107 | ### 12. WebSocket Support:
108 |
109 | While Express primarily deals with HTTP requests and responses, it can be extended to support WebSockets through
110 | libraries like `socket.io`. This allows real-time communication between the server and clients, making it suitable for
111 | applications that require instant updates and notifications.
112 |
113 | ### 13. Extensible and Customizable:
114 |
115 | Express is highly extensible, allowing you to add custom middleware, routers, and functionality to meet the specific
116 | requirements of your application. You can create modular and organized code structures tailored to your project's needs.
117 |
118 | ### 14. Testing and Debugging:
119 |
120 | Express applications are relatively easy to test using testing frameworks like Mocha, Chai, or Jest. You can write unit
121 | tests and integration tests to ensure the reliability and correctness of your application.
122 |
123 | ### 15. Proxy and API Gateway:
124 |
125 | Express can be used as a proxy or API gateway to route and manage incoming requests to various backend services. This is
126 | particularly useful when building microservices architectures or handling multiple APIs.
127 |
128 | ### 16. WebSocket Support:
129 |
130 | While Express primarily deals with HTTP requests and responses, it can be extended to support WebSockets through
131 | libraries like `socket.io`. This allows real-time communication between the server and clients, making it suitable for
132 | applications that require instant updates and notifications.
133 |
134 | ### 17. Community and Documentation:
135 |
136 | Express has a large and active community of developers, which means you can easily find tutorials, documentation, and
137 | solutions to common problems. The official Express documentation is comprehensive and regularly updated.
138 |
139 | ### 18. Middleware Ecosystem:
140 |
141 | Express boasts a vast middleware ecosystem, offering a wide range of pre-built middleware components to enhance your
142 | application's functionality. Whether you need authentication, compression, logging, or CORS handling, there's likely a
143 | middleware package available to streamline the process.
144 |
145 | ### 19. Compatibility with Frontend Frameworks:
146 |
147 | Express can be easily integrated with popular frontend frameworks and libraries like React, Angular, and Vue.js. This
148 | allows you to build full-stack applications, where Express serves as the backend API while your frontend framework
149 | handles the user interface.
150 |
151 | ### 20. RESTful Architecture:
152 |
153 | Express's flexibility and routing system make it well-suited for implementing RESTful architectures. You can define
154 | clean and structured APIs with clear endpoints, making it easier to follow best practices for RESTful API design.
155 |
156 | ### 21. Hosting and Deployment:
157 |
158 | Deploying Express applications is straightforward. You can host your applications on various platforms, including cloud
159 | services like AWS, Heroku, or Azure, or deploy them to your own servers. Express applications are highly portable and
160 | can be run on different hosting environments.
161 |
162 | ### 22. Single-Page Applications (SPAs):
163 |
164 | Express can serve as the backend for single-page applications (SPAs). By providing RESTful APIs and handling routing on
165 | the server, you can create SPAs that deliver a seamless user experience with client-side navigation while benefiting
166 | from server-side rendering for SEO and initial page load speed.
167 |
168 | ### 23. Community-Driven Development:
169 |
170 | With a vibrant community, Express is continuously evolving. Developers frequently contribute to the framework, which
171 | means you can benefit from updates, bug fixes, and new features. It also ensures that Express remains relevant and
172 | up-to-date with modern web development practices.
173 |
174 | ### 24. Proxy and Reverse Proxy:
175 |
176 | Express can be configured to act as a proxy or reverse proxy server. This is useful when you need to route incoming
177 | requests to different backend servers or services based on specific criteria, such as URL paths or headers.
178 |
179 | In summary, Express is a versatile and widely adopted framework for Node.js that simplifies web application and API
180 | development. Its flexibility, extensive middleware ecosystem, and ease of use make it an excellent choice for developers
181 | looking to create efficient and robust Node.js applications. Whether you're building a simple web app, a RESTful API, or
182 | a full-stack application, Express provides the tools and features needed to streamline development and deliver
183 | high-performance solutions.
184 |
185 | ---
186 |
187 |
188 |
189 | ---
190 |
191 |
192 |
193 |
194 | ---
195 |
196 |
197 | ---
198 |
199 |
200 |
--------------------------------------------------------------------------------
/docs/nodejs/websocket.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/nodejs/websocket.md
--------------------------------------------------------------------------------
/docs/python/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Python
3 | hide:
4 | - tags
5 |
6 | tags:
7 | - Python
8 | - Python Version History
9 |
10 | ---
11 |
12 |
13 | # Python
14 |
15 |
16 | ---
17 |
18 | ## Python
19 |
20 |
21 | ---
22 |
23 |
24 |
25 | ### Python Version History
26 |
27 |
28 |
29 | | Version | Release Date | Notable Changes |
30 | |---------|--------------|-----------------|
31 | | 3.10 | October 2021 | - Structural Pattern Matching (`match`/`case`).
- Precise types.
- Parenthesized context managers.
- Performance improvements. |
32 | | 3.9 | October 2020 | - Dictionary merge (`\|\|`) and update (`\|=`) operators.
- New parser based on PEG.
- Time zone support in the standard library. |
33 | | 3.8 | October 2019 | - Assignment expressions (Walrus Operator `:=`).
- Positional-only parameters (`/`).
- F-strings support for self-documenting expressions and debugging. |
34 | | 3.7 | June 2018 | - Data Classes.
- AsyncIO enhancements.
- Built-in `breakpoint()`.
- Ordered dictionaries by default. |
35 | | 3.6 | December 2016| - Formatted string literals (F-strings).
- Underscores in numeric literals.
- Variable annotations.
- Asynchronous generators and comprehensions. |
36 | | 3.5 | September 2015| - AsyncIO (`async`/`await`) becomes part of the language.
- Matrix multiplication operator (`@`).
- Type hints (PEP 484). |
37 | | 3.4 | March 2014 | - Enumerations (`enum`).
- `pathlib` module.
- Asynchronous I/O (`asyncio`), provisional API.
- Pip bundled with Python. |
38 | | 3.3 | September 2012| - `yield from` for generator delegation.
- `u` string prefix reintroduced.
- `venv` for creating virtual environments. |
39 | | 3.2 | February 2011| - Stable ABI (Application Binary Interface).
- Concurrent futures library.
- `argparse` module for command-line parsing. |
40 | | 3.1 | June 2009 | - An ordered dictionary type.
- `unittest2` features. |
41 | | 3.0 | December 2008| - Syntax changes, making it not backward compatible with Python 2.x.
- `print` function.
- New I/O library.
- Removal of old-style classes. |
42 | | 2.7 | July 2010 | - Last major version in the 2.x series.
- Backported features from Python 3.x.
- `argparse` module.
- Improved modules and Unicode support. |
43 | | 2.6 | October 2008 | - Transition version to help in migrating to 3.x.
- `str.format()` method.
- `multiprocessing` module. |
44 | | 2.5 | September 2006| - Conditional expressions.
- Absolute and relative imports.
- The `with` statement. |
45 | | 2.4 | November 2004| - Decorators for functions and methods.
- Generator expressions.
- `set` and `frozenset` types. |
46 | | 2.3 | July 2003 | - `enumerate()` function.
- `datetime` module.
- `sum()` function. |
47 | | 2.2 | December 2001| - Introduced new-style classes.
- Iterators and generators.
- The `super()` function. |
48 | | 2.1 | April 2001 | - Nested scopes.
- Dynamic module attributes. |
49 | | 2.0 | October 2000 | - List comprehensions.
- Garbage collection of cycles.
- Unicode support. |
50 | | 1.6 | September 2000| - Minor improvements and bug fixes. |
51 | | 1.5 | December 1997| - `lambda`, `map()`, `filter()`, and `reduce()`.
- Keyword arguments. |
52 | | 1.4 | October 1996 | - Keyword-only arguments.
- Built-in support for complex numbers. |
53 | | 1.3 | October 1995 | - Various small improvements and module additions. |
54 | | 1.2 | April 1995 | - First appearance of the `class` statement.
- New modules and functionality. |
55 | | 1.1 | February 1994| - Introduced modules system. |
56 | | 1.0 | January 1994 | - Initial public release. |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
--------------------------------------------------------------------------------
/docs/qa/cucumber.md:
--------------------------------------------------------------------------------
1 | # Cucumber
2 |
3 | ---
4 |
5 |
6 | ## Cucumber
7 |
8 | Cucumber is primarily used for Behavior-Driven Development (BDD) and is well-suited for automating functional and acceptance tests. It fits into the testing process by providing a structured and collaborative approach to defining, executing, and documenting test cases.
9 |
10 | ---
11 |
12 |
13 | ---
14 |
15 |
16 |
17 | ---
18 |
19 |
20 |
21 | ---
22 |
23 |
24 |
25 | ---
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/docs/qa/index.md:
--------------------------------------------------------------------------------
1 |
2 | # Quality Assurance
3 |
4 | ---
5 |
6 | Quality Assurance (QA)
7 |
8 |
9 | ---
10 |
11 |
12 |
13 |
14 | ---
15 |
16 |
17 | ---
18 |
--------------------------------------------------------------------------------
/docs/qa/jmeter.md:
--------------------------------------------------------------------------------
1 | # JMeter
2 |
3 | ---
4 |
5 |
6 | ## JMeter
7 |
8 |
9 | Apache JMeter is primarily known for its performance testing capabilities, but it can also be used for functional API testing. It's an open-source tool that supports a wide range of protocols.
10 |
11 | ---
12 |
13 |
14 | ---
15 |
16 |
17 |
18 | ---
19 |
20 |
21 |
22 | ---
23 |
24 |
25 |
26 | ---
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/docs/qa/microservices/apigee.md:
--------------------------------------------------------------------------------
1 | # Apigee
2 |
3 | ---
4 |
5 |
6 | ## Apigee
7 |
8 |
9 |
10 | ---
11 |
12 |
13 | ---
14 |
15 |
16 |
17 | ---
18 |
19 |
20 |
21 | ---
22 |
23 |
24 |
25 | ---
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/docs/qa/microservices/jest.md:
--------------------------------------------------------------------------------
1 | # Jest
2 |
3 | ---
4 |
5 |
6 | ## Jest
7 |
8 |
9 |
10 | ---
11 |
12 |
13 | ---
14 |
15 |
16 |
17 | ---
18 |
19 |
20 |
21 | ---
22 |
23 |
24 |
25 | ---
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/docs/qa/microservices/karate.md:
--------------------------------------------------------------------------------
1 | # Karate
2 |
3 | ---
4 |
5 |
6 | ## Karate
7 |
8 |
9 |
10 | ---
11 |
12 |
13 | ---
14 |
15 |
16 |
17 | ---
18 |
19 |
20 |
21 | ---
22 |
23 |
24 |
25 | ---
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/docs/qa/microservices/mocha-chai.md:
--------------------------------------------------------------------------------
1 | # Mocha/Chai
2 |
3 | ---
4 |
5 |
6 | ## Mocha/Chai
7 |
8 | Mocha is a flexible JavaScript test framework, and Chai is an assertion library that integrates seamlessly with Mocha. Together, they provide a powerful combination for testing JavaScript applications, including both front-end and back-end code.
9 |
10 | BDD and TDD: Mocha supports both Behavior-Driven Development (BDD) and Test-Driven Development (TDD) testing styles, allowing you to choose the most suitable approach for your project.
11 |
12 | Customization: Mocha is highly customizable, allowing you to use different assertion libraries (like Chai) and reporter plugins to tailor your test setup.
13 |
14 | Back-End Testing: Mocha is often used for testing server-side code, making it a versatile choice for full-stack JavaScript applications.
15 |
16 | ---
17 |
18 |
19 | ---
20 |
21 |
22 |
23 | ---
24 |
25 |
26 |
27 | ---
28 |
29 |
30 |
31 | ---
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/docs/qa/microservices/postman.md:
--------------------------------------------------------------------------------
1 | # Postman
2 |
3 | ---
4 |
5 |
6 | ## Postman
7 |
8 |
9 |
10 | ---
11 |
12 |
13 | ---
14 |
15 |
16 |
17 | ---
18 |
19 |
20 |
21 | ---
22 |
23 |
24 |
25 | ---
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/docs/qa/microservices/rest-assured.md:
--------------------------------------------------------------------------------
1 | # RestAssured
2 |
3 | ---
4 |
5 |
6 | ## RestAssured
7 |
8 |
9 |
10 | ---
11 |
12 |
13 | ---
14 |
15 |
16 |
17 | ---
18 |
19 |
20 |
21 | ---
22 |
23 |
24 |
25 | ---
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/docs/qa/microservices/testng.md:
--------------------------------------------------------------------------------
1 | # estNG
2 |
3 | ---
4 |
5 |
6 | ## JUnit and TestNG
7 |
8 | These are widely used testing frameworks for Java applications, covering unit, integration, and end-to-end testing. They are commonly used in conjunction with tools like Selenium for web testing.
9 |
10 | ---
11 |
12 |
13 | ---
14 |
15 |
16 |
17 | ---
18 |
19 |
20 |
21 | ---
22 |
23 |
24 |
25 | ---
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/docs/qa/mobile/appium.md:
--------------------------------------------------------------------------------
1 | # Appium
2 |
3 | ---
4 |
5 |
6 | ## Appium
7 |
8 |
9 |
10 | ---
11 |
12 |
13 | ---
14 |
15 |
16 |
17 | ---
18 |
19 |
20 |
21 | ---
22 |
23 |
24 |
25 | ---
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/docs/qa/mobile/robot-framework.md:
--------------------------------------------------------------------------------
1 | # Robot Framework:
2 |
3 | ---
4 |
5 |
6 | ## Robot Framework:
7 |
8 |
9 |
10 | ---
11 |
12 |
13 | ---
14 |
15 |
16 |
17 | ---
18 |
19 |
20 |
21 | ---
22 |
23 |
24 |
25 | ---
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/docs/qa/website/cypress.md:
--------------------------------------------------------------------------------
1 | # Cypress
2 |
3 | ---
4 |
5 |
6 | ## Cypress
7 |
8 |
9 |
10 | ---
11 |
12 |
13 | ---
14 |
15 |
16 |
17 | ---
18 |
19 |
20 |
21 | ---
22 |
23 |
24 |
25 | ---
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/docs/qa/website/protractor.md:
--------------------------------------------------------------------------------
1 | # Protractor
2 |
3 | ---
4 |
5 |
6 | ## Protractor
7 |
8 |
9 | An end-to-end test framework for Angular and AngularJS applications.
10 |
11 | ---
12 |
13 |
14 | ---
15 |
16 |
17 |
18 | ---
19 |
20 |
21 |
22 | ---
23 |
24 |
25 |
26 | ---
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/docs/qa/website/selenium.md:
--------------------------------------------------------------------------------
1 | # Selenium
2 |
3 | ---
4 |
5 |
6 | ## Selenium
7 |
8 |
9 | Widely used for web application testing, it supports multiple programming languages and browsers.
10 |
11 | ---
12 |
13 |
14 | ---
15 |
16 |
17 |
18 | ---
19 |
20 |
21 |
22 | ---
23 |
24 |
25 |
26 | ---
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/docs/qa/website/webdriverIO.md:
--------------------------------------------------------------------------------
1 | # WebdriverIO
2 |
3 | ---
4 |
5 |
6 | ## WebdriverIO
7 |
8 | A Node.js-based automation framework for web and mobile app testing.
9 |
10 | ---
11 |
12 |
13 | ---
14 |
15 |
16 |
17 | ---
18 |
19 |
20 |
21 | ---
22 |
23 |
24 |
25 | ---
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/docs/react/enzyme.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Enzyme
3 | hide:
4 | - tags
5 |
6 | tags:
7 | - Enzyme
8 |
9 |
10 | ---
11 |
12 |
13 |
14 | # Enzyme
15 |
16 |
17 | ---
18 |
19 | ## Enzyme
20 |
21 | Enzyme is a JavaScript testing utility for React that provides a set of convenient and flexible tools for testing React components. It is often used in conjunction with testing frameworks like Jest or Mocha to simplify the process of writing unit and integration tests for React applications.
22 |
23 | Enzyme offers the following features and benefits:
24 |
25 | 1. **Component Rendering:** Enzyme allows you to render React components in different ways, such as shallow rendering, full rendering, or static rendering. Shallow rendering focuses on the component under test without rendering its child components.
26 |
27 | 2. **DOM Inspection:** You can inspect the output of your rendered components, query the DOM elements, and assert their properties, state, and behavior.
28 |
29 | 3. **Component Manipulation:** Enzyme provides methods to simulate user interactions (e.g., clicks, input changes) on components and observe how they respond.
30 |
31 | 4. **Snapshot Testing:** Enzyme can be used to create and update snapshots of rendered components. This is particularly useful for regression testing to ensure that your components' output remains consistent over time.
32 |
33 | 5. **Component Traversal:** You can traverse and manipulate the component tree to find specific components or elements, making it easy to interact with nested components and test their behavior.
34 |
35 | 6. **Assertions and Matchers:** Enzyme works well with popular testing libraries like Jest and provides a wide range of matchers and assertions to validate component behavior and output.
36 |
37 | 7. **Support for Different React Versions:** Enzyme has adaptors for different versions of React (e.g., Enzyme for React 16 or Enzyme for React 17), making it versatile for testing React applications across various versions.
38 |
39 | 8. **Community and Ecosystem:** Enzyme has a large and active community, and it's widely used in the React testing ecosystem. This means you can find plenty of resources, documentation, and community support for your testing needs.
40 |
41 | Here's an example of how you might use Enzyme to test a simple React component:
42 |
43 | ```javascript
44 | import React from 'react';
45 | import { shallow } from 'enzyme';
46 | import MyComponent from './MyComponent';
47 |
48 | describe('MyComponent', () => {
49 | it('renders correctly', () => {
50 | const wrapper = shallow();
51 | expect(wrapper).toMatchSnapshot(); // Create or update a snapshot
52 | });
53 |
54 | it('handles click events', () => {
55 | const onClickMock = jest.fn();
56 | const wrapper = shallow();
57 |
58 | wrapper.find('button').simulate('click');
59 |
60 | expect(onClickMock).toHaveBeenCalled(); // Ensure the click handler was called
61 | });
62 | });
63 | ```
64 |
65 | In this example, Enzyme's `shallow` rendering is used to render the `MyComponent` without deeply rendering its child components. The tests check if the component renders correctly and if it correctly handles a click event.
66 |
67 | Enzyme provides a valuable toolset for writing tests that help ensure your React components work as expected. It's a popular choice for React developers when it comes to unit and integration testing in React applications.
68 |
69 | ---
70 |
71 | ## Rendering methods
72 |
73 | There are three primary "rendering" methods provided by Enzyme for rendering React components:
74 |
75 | 1. **Shallow Rendering (`shallow`):** Shallow rendering is used to render only the component being tested and not its child components. It is useful for testing the isolated behavior of the component.
76 |
77 | ```javascript
78 | import { shallow } from 'enzyme';
79 | const wrapper = shallow();
80 | ```
81 |
82 | 2. **Full Rendering (`mount`):** Full rendering renders the entire component tree, including all child components. This allows you to test the complete lifecycle and behavior of the component, but it can be slower and may not be suitable for all scenarios.
83 |
84 | ```javascript
85 | import { mount } from 'enzyme';
86 | const wrapper = mount();
87 | ```
88 |
89 | 3. **Static Rendering (`render`):** Static rendering is used for testing components that render to static HTML and do not have interactivity. It can be used for snapshot testing or when you need to test the component's HTML output.
90 |
91 | ```javascript
92 | import { render } from 'enzyme';
93 | const wrapper = render();
94 | ```
95 |
96 | In addition to these rendering methods, Enzyme provides a set of methods for interacting with and inspecting the rendered components. Some commonly used Enzyme methods include:
97 |
98 | - `find(selector)`: Finds elements in the rendered component that match the provided CSS selector or component type.
99 | - `simulate(eventType, eventArgs)`: Simulates user interactions like clicks, input changes, and key presses on elements.
100 | - `props()`: Accesses the props passed to the component.
101 | - `state()`: Accesses the component's state.
102 | - `text()`: Retrieves the text content of the selected element.
103 | - `hasClass(className)`: Checks if the selected element has the specified CSS class.
104 |
105 | Here's an example of using Enzyme to test a component's behavior:
106 |
107 | ```javascript
108 | import React from 'react';
109 | import { shallow } from 'enzyme';
110 | import MyComponent from './MyComponent';
111 |
112 | describe('MyComponent', () => {
113 | it('renders a button', () => {
114 | const wrapper = shallow();
115 | expect(wrapper.find('button')).toHaveLength(1);
116 | });
117 |
118 | it('handles click events', () => {
119 | const onClickMock = jest.fn();
120 | const wrapper = shallow();
121 |
122 | wrapper.find('button').simulate('click');
123 |
124 | expect(onClickMock).toHaveBeenCalled();
125 | });
126 | });
127 | ```
128 |
129 | In this example, we're using Enzyme's `shallow` rendering to test the rendering of a button and its click event handling.
130 |
131 | Enzyme's powerful set of utilities simplifies the testing of React components by providing various methods for component manipulation, assertion, and inspection. It plays a crucial role in ensuring the correctness and reliability of React applications through unit and integration tests.
132 |
--------------------------------------------------------------------------------
/docs/react/eslint.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: ESLint
3 | hide:
4 | - tags
5 |
6 | tags:
7 | - ESLint
8 | - static code analysis
9 |
10 |
11 | ---
12 |
13 |
14 |
15 | # ESLint
16 |
17 |
18 | ---
19 |
20 | ## ESLint
21 |
22 | ESLint is a popular open-source static code analysis tool that is used for identifying and fixing problems in JavaScript code. It is highly configurable and can be integrated into various development environments and build processes. ESLint helps developers maintain a consistent and error-free codebase by enforcing coding standards, catching potential bugs, and promoting best practices.
23 |
24 | Key features and functionalities of ESLint include:
25 |
26 | 1. **Linting Rules:** ESLint uses a set of configurable rules that define coding standards and style guidelines. These rules can be customized to match your team's preferences and project requirements.
27 |
28 | 2. **Static Code Analysis:** ESLint statically analyzes JavaScript code without executing it. It scans code files to detect potential issues, such as syntax errors, variable scope problems, unused variables, and more.
29 |
30 | 3. **Customizable Configuration:** ESLint configurations, often defined in a `.eslintrc` file, allow you to specify which rules to enable or disable, set up environments (e.g., Node.js, browser), and configure parser options.
31 |
32 | 4. **Plugin System:** ESLint supports a plugin system that enables the integration of additional rules and extensions beyond the core set. This allows you to enforce rules specific to frameworks like React, Vue.js, or specific coding standards like Airbnb's style guide.
33 |
34 | 5. **Extensibility:** You can create custom ESLint rules to enforce project-specific conventions or best practices not covered by existing rules. This feature is particularly useful for maintaining consistency within a development team.
35 |
36 | 6. **Integration with Editors and IDEs:** ESLint integrates with popular code editors and integrated development environments (IDEs) such as Visual Studio Code, Sublime Text, Atom, and WebStorm. It provides real-time feedback and suggestions as you write code.
37 |
38 | 7. **Automated Code Fixes:** ESLint can automatically fix certain issues in your code, such as formatting inconsistencies and some simple code improvements, using the `--fix` command-line option.
39 |
40 | 8. **CI/CD Integration:** ESLint can be integrated into your continuous integration (CI) and continuous deployment (CD) pipelines to ensure that code quality is maintained throughout the development process.
41 |
42 | 9. **Community and Ecosystem:** ESLint has a large and active community, and it is widely adopted in the JavaScript ecosystem. You can find numerous ESLint plugins, configurations, and resources to enhance your linting setup.
43 |
44 | Here's an example of a simple ESLint configuration file:
45 |
46 | ```json
47 | {
48 | "env": {
49 | "browser": true,
50 | "node": true,
51 | "es6": true
52 | },
53 | "extends": "eslint:recommended",
54 | "rules": {
55 | "indent": ["error", 2],
56 | "quotes": ["error", "single"],
57 | "semi": ["error", "always"]
58 | }
59 | }
60 | ```
61 |
62 | In this configuration, ESLint is set to lint JavaScript code for both browser and Node.js environments, extends the recommended ESLint rules, and defines custom rules for code indentation, quotes, and semicolons.
63 |
64 | By using ESLint in your development workflow, you can catch coding errors and maintain code quality consistently, which ultimately leads to more maintainable and reliable JavaScript applications.
65 |
66 | Continuing on the topic of ESLint, here are some additional details and best practices associated with using ESLint in your JavaScript development workflow:
67 |
68 | **10. npm and ESLint Integration:**
69 |
70 | - ESLint can be installed as a development dependency in your project using npm or yarn:
71 |
72 | ```shell
73 | npm install eslint --save-dev
74 | # or
75 | yarn add eslint --dev
76 | ```
77 |
78 | - After installation, you can initialize ESLint configurations and settings using the following command:
79 |
80 | ```shell
81 | npx eslint --init
82 | ```
83 |
84 | **11. Editor Integration:**
85 |
86 | - Most modern code editors and IDEs have ESLint integrations available as extensions or plugins. These integrations provide real-time feedback and automatically apply ESLint rules as you write code.
87 |
88 | - For Visual Studio Code, you can install the "ESLint" extension from the Visual Studio Code Marketplace.
89 |
90 | **12. Popular ESLint Configurations:**
91 |
92 | - Many popular coding standards and style guides have ESLint configurations that you can use as a starting point for your projects. Some well-known ones include Airbnb, Google, and StandardJS.
93 |
94 | - You can extend these configurations in your `.eslintrc` file, making it easier to adopt consistent coding standards.
95 |
96 | **13. Custom Rules and Plugins:**
97 |
98 | - If you have specific coding conventions or practices unique to your project, consider creating custom ESLint rules or using third-party plugins to enforce them.
99 |
100 | - You can publish custom rules as npm packages to share them with the community or keep them private for your project's use.
101 |
102 | **14. ESLint in CI/CD Pipelines:**
103 |
104 | - Integrating ESLint into your CI/CD pipeline ensures that code quality checks are performed automatically during the build process. This helps catch and prevent issues before they reach production.
105 |
106 | **15. Continuous Improvement:**
107 |
108 | - ESLint is a powerful tool for maintaining code quality, but it's essential to regularly review and update your ESLint configurations and rules as your project evolves and your team's coding standards change.
109 |
110 | **16. Automate ESLint Fixes:**
111 |
112 | - ESLint's `--fix` option can automatically correct many code issues, such as code formatting inconsistencies. Integrating ESLint fixes into your development workflow can save time and maintain code consistency.
113 |
114 | - You can run ESLint with the `--fix` flag to apply fixes:
115 |
116 | ```shell
117 | npx eslint --fix src/
118 | ```
119 |
120 | **17. Shareable ESLint Configs:**
121 |
122 | - Shareable ESLint configurations are reusable sets of ESLint rules and settings that can be shared across projects or within your organization.
123 |
124 | - You can create and publish your own shareable ESLint config or use existing ones from the npm registry.
125 |
126 |
--------------------------------------------------------------------------------
/docs/react/nextjs.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Next.js
3 | hide:
4 | - tags
5 |
6 | tags:
7 | - Next.js
8 |
9 |
10 | ---
11 |
12 |
13 |
14 | # Next.js
15 |
16 |
17 | ---
18 |
19 | ## Next.js
20 |
21 |
--------------------------------------------------------------------------------
/docs/spring/images/JpaRepositoryUml.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/spring/images/JpaRepositoryUml.png
--------------------------------------------------------------------------------
/docs/spring/images/spring-mvc-flow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/spring/images/spring-mvc-flow.png
--------------------------------------------------------------------------------
/docs/spring/security/filters.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Spring Security Filters
3 |
4 | hide:
5 | - tags
6 | tags:
7 | - Spring Security Filters
8 |
9 |
10 |
11 | ---
12 |
13 | # Spring Security Filters
14 |
15 | ---
16 |
17 |
18 |
19 | ## Spring Security Filters
20 |
21 |
22 |
23 | Spring Security provides a robust security framework for Java applications, particularly for web applications. It uses a series of filters to enforce security measures. These filters are arranged in a chain and each has a specific responsibility in the authentication and authorization process. Below is an overview of some of the key filters used in Spring Security, which are executed in the order they are listed when a request is made to the application.
24 |
25 | ### Authentication Filters
26 |
27 | #### UsernamePasswordAuthenticationFilter
28 |
29 | - **Purpose**: Processes an authentication form submission. It intercepts POST requests containing a username and password.
30 | - **Typical Use**: In form login scenarios where users submit their credentials.
31 |
32 | #### BasicAuthenticationFilter
33 |
34 | - **Purpose**: Processes HTTP Basic authentication headers. Extracts and processes the base64 encoded username and password present in the HTTP header.
35 | - **Typical Use**: In REST APIs and simple authentication scenarios where credentials are provided in request headers.
36 |
37 | ### Authorization Filters
38 |
39 | #### ExceptionTranslationFilter
40 |
41 | - **Purpose**: Handles any Spring Security exceptions. It differentiates between authentication (i.e., authentication failures) and authorization (i.e., access denied) exceptions.
42 | - **Typical Use**: Across the board for translating Spring Security exceptions into HTTP responses.
43 |
44 | #### FilterSecurityInterceptor
45 |
46 | - **Purpose**: Performs access control checks. It consults the configured `AccessDecisionManager` to make authorization decisions.
47 | - **Typical Use**: At the end of the filter chain to enforce authorization before allowing access to a protected resource.
48 |
49 | ### Other Notable Filters
50 |
51 | #### CsrfFilter
52 |
53 | - **Purpose**: Applies Cross-Site Request Forgery (CSRF) protection. It requires a valid CSRF token to be present in requests that could potentially modify state.
54 | - **Typical Use**: In web applications to prevent CSRF attacks.
55 |
56 | #### LogoutFilter
57 |
58 | - **Purpose**: Handles the logout process. It intercepts requests to the logout URL and performs the necessary cleanup.
59 | - **Typical Use**: In applications to provide users the ability to log out securely.
60 |
61 | #### RememberMeAuthenticationFilter
62 |
63 | - **Purpose**: Processes remember-me authentication. It allows users to remain authenticated between sessions without having to log in each time.
64 | - **Typical Use**: In applications where users opt for a "remember me" functionality for convenience.
65 |
66 | ### Session Management Filters
67 |
68 | #### SessionManagementFilter
69 |
70 | - **Purpose**: Manages session-related security concerns. It handles session creation strategies and detects session fixation attacks.
71 | - **Typical Use**: In applications to enforce session security policies.
72 |
73 | #### ConcurrentSessionFilter
74 |
75 | - **Purpose**: Controls concurrent session management. It ensures users do not exceed the maximum number of sessions they are allowed to have active.
76 | - **Typical Use**: In applications that need to restrict the number of concurrent sessions per user.
77 |
78 |
79 |
80 | ### Additional Spring Security Filters
81 |
82 | Moving beyond the core filters, Spring Security's architecture is flexible, allowing for the addition or customization of filters to meet specific security requirements. Here are more filters involved in the Spring Security filter chain, which play significant roles in securing applications:
83 |
84 | #### AnonymousAuthenticationFilter
85 |
86 | - **Purpose**: Creates an `AnonymousAuthenticationToken` for requests that do not have any other type of authentication. This allows the security framework to handle anonymous users.
87 | - **Typical Use**: In applications to represent requests without credentials as a specific anonymous user, often for read-only operations or unrestricted paths.
88 |
89 | #### SecurityContextHolderAwareRequestFilter
90 |
91 | - **Purpose**: Wraps the incoming `HttpServletRequest` to provide additional security features. For example, it can make the `HttpServletRequest.isUserInRole()` method aware of Spring Security's `SecurityContext`.
92 | - **Typical Use**: In applications requiring HttpServletRequest methods to be aware of the Spring Security context, enhancing integration between the web layer and security.
93 |
94 | #### OAuth2AuthorizationRequestRedirectFilter
95 |
96 | - **Purpose**: Initiates the OAuth2 login process by redirecting to the OAuth2 authorization server.
97 | - **Typical Use**: In OAuth2/OIDC login flows, where the application acts as an OAuth2 client.
98 |
99 | #### OAuth2LoginAuthenticationFilter
100 |
101 | - **Purpose**: Handles the return from the OAuth2 authorization server, processing the authorization code or user consent.
102 | - **Typical Use**: In OAuth2/OIDC login flows to authenticate the user once the OAuth2 provider has granted access.
103 |
104 | ### Custom Filter Integration
105 |
106 | Spring Security also allows for the integration of custom filters into the security filter chain. This capability is crucial for addressing security needs specific to your application that are not covered by the default filters.
107 |
108 | #### Custom Filter Implementation
109 |
110 | - **Purpose**: To fulfill application-specific security requirements not met by the built-in filters.
111 | - **Typical Use**: When you need to perform additional security checks, logging, or preprocessing of requests/responses.
112 |
113 | ### Configuring the Filter Chain
114 |
115 | The arrangement and configuration of the filter chain are crucial. Filters should be ordered to ensure that security mechanisms like authentication and authorization are applied correctly and efficiently. Spring Security provides a DSL (Domain Specific Language) within its Java configuration model to customize the filter chain easily.
116 |
117 | #### SecurityFilterChain Configuration
118 |
119 | - **Task**: Define the order and inclusion of security filters.
120 | - **Approach**: Use the `HttpSecurity` configuration object to specify custom filter positions, exclude or include specific filters, and configure security settings like session management, CSRF protection, and CORS.
121 |
122 | ### Advanced Security Considerations
123 |
124 | When working with Spring Security and its extensive list of filters, it's also important to consider how these filters interact with other aspects of your application's security posture. Advanced security considerations often involve combining multiple filters, understanding the security context they operate within, and how they can be extended or customized for enhanced security measures.
125 |
126 | ### Integration with WebSecurityConfigurerAdapter
127 |
128 | - **Purpose**: Provides a way to configure the global security of the application, including which URL patterns should be secured.
129 | - **Typical Use**: To specify security settings that apply across the entire application, such as ignoring certain request patterns from the security filter chain or specifying custom security filters.
130 |
131 | ### Method Security
132 |
133 | - **Beyond Filters**: Spring Security isn't limited to HTTP and URL-based security. It also provides method-level security, allowing you to secure individual methods using annotations like `@PreAuthorize`, `@PostAuthorize`, `@Secured`, etc.
134 | - **Typical Use**: When you need to secure services or components at the method level, providing a finer-grained security control beyond URL patterns.
135 |
136 | ### Security Context Propagation
137 |
138 | - **Challenges**: In complex applications, especially those involving asynchronous processing or microservices, propagating the security context across threads or services becomes crucial.
139 | - **Solutions**: Spring Security offers mechanisms to propagate the security context across asynchronous operations and even across microservices using techniques like JWT tokens or Spring Cloud Security.
140 |
141 | ### Dynamic Security Rules
142 |
143 | - **Customization**: There might be scenarios where security rules need to be dynamic, based on runtime data or user-specific conditions.
144 | - **Implementation**: This can be achieved by implementing custom `AccessDecisionVoter` or `AccessDecisionManager` beans, or by using SpEL (Spring Expression Language) within security annotations for complex security conditions.
145 |
146 | ### Dealing with New Security Threats
147 |
148 | - **Adaptability**: Security is an ever-evolving field, with new threats emerging regularly. Spring Security's modular and customizable nature allows it to adapt to new security requirements.
149 | - **Community and Updates**: Leveraging the active Spring community and keeping Spring Security dependencies up to date are key strategies for addressing new security vulnerabilities as they are discovered.
150 |
151 | ### Testing Security Configurations
152 |
153 | - **Importance**: Testing your security configuration is as crucial as implementing it. Spring Security Test provides support for testing with mock users, testing method security, and ensuring that URL-based security is working as expected.
154 | - **Typical Use**: To automate testing of security configurations, ensuring that changes in the application do not inadvertently introduce security gaps.
155 |
156 |
157 | ---
158 |
159 |
160 |
161 |
--------------------------------------------------------------------------------
/docs/spring/security/images/ExceptionTranslationFilter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/spring/security/images/ExceptionTranslationFilter.png
--------------------------------------------------------------------------------
/docs/spring/security/images/Figure 2. DelegatingFilterProxy .png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/spring/security/images/Figure 2. DelegatingFilterProxy .png
--------------------------------------------------------------------------------
/docs/spring/security/images/Figure 3. FilterChainProxy .png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/spring/security/images/Figure 3. FilterChainProxy .png
--------------------------------------------------------------------------------
/docs/spring/security/images/Figure 4. SecurityFilterChain .png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/spring/security/images/Figure 4. SecurityFilterChain .png
--------------------------------------------------------------------------------
/docs/spring/security/images/Figure 5. Multiple SecurityFilterChain .png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/spring/security/images/Figure 5. Multiple SecurityFilterChain .png
--------------------------------------------------------------------------------
/docs/spring/security/images/Figure1-FilterChain .png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/docs/spring/security/images/Figure1-FilterChain .png
--------------------------------------------------------------------------------
/docs/spring/spring-batch.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: default
3 | title: Spring Batch
4 | parent: Spring
5 | resource: true
6 | desc: "Spring Batch interview questions and answers."
7 | categories: [Spring Batch]
8 | ---
9 |
10 | # Spring Batch
11 | {: .no_toc }
12 |
13 |
14 |
15 | Table of contents
16 |
17 | {: .text-delta }
18 | 1. TOC
19 | {:toc}
20 |
21 |
22 | ---
23 |
24 | ## Introduction to Spring Batch
25 |
26 | Spring Batch provides reusable functions that are essential in processing large volumes of records, including logging/tracing, transaction management, job processing statistics, job restart, skip, and resource management. It also provides more advanced technical services and features that will enable extremely high-volume and high performance batch jobs through optimization and partitioning techniques. Simple as well as complex, high-volume batch jobs can leverage the framework in a highly scalable manner to process significant volumes of information.
27 |
28 | ### Features
29 | - Transaction management
30 | - Chunk based processing
31 | - Declarative I/O
32 | - Start/Stop/Restart
33 | - Retry/Skip
34 | - Web based administration interface (Spring Cloud Data Flow)
35 |
36 |
37 | ### spring batch components
38 |
39 | Spring Batch is a framework for batch processing in the Spring framework. It provides reusable functions for processing large volumes of data in batch jobs. The main components of Spring Batch include:
40 |
41 | 1. Job: A job is a batch process that is made up of one or more steps.
42 |
43 | 2. Step: A step is a single unit of work that is executed as part of a job. It can be as simple as reading data from a file and writing it to a database, or as complex as performing multiple tasks in parallel.
44 |
45 | 3. ItemReader: An ItemReader reads data from a source and provides it to the ItemProcessor.
46 |
47 | 4. ItemProcessor: An ItemProcessor processes the data read by the ItemReader and returns the processed data.
48 |
49 | 5. ItemWriter: An ItemWriter writes the processed data to a destination.
50 |
51 | 6. JobRepository: A JobRepository is responsible for maintaining the state of a job and its steps.
52 |
53 | 7. JobLauncher: A JobLauncher is used to launch a job.
54 |
55 | 8. JobExplorer: A JobExplorer allows you to access information about past execution of a job.
56 |
57 | 9. JobRegistry: A JobRegistry is used to register jobs with the batch infrastructure.
58 |
59 | 10. JobParameters: JobParameters are used to pass data to a job at runtime.
60 |
61 | These are the main components of Spring Batch, there are many other components that can be used to customize and extend the functionality of the framework.
62 |
63 | It provides reusable functions that are essential in processing large volumes of records, including logging/tracing, transaction management, job processing statistics, job restart, skip, and resource management.
64 |
65 | The architecture of Spring Batch consists of three main components:
66 |
67 | **Job:** A job represents a batch process that is executed. It is composed of one or more steps, and each step contains a reader, a processor, and a writer.
68 |
69 | **Step:** A step is a domain object that represents an independent, sequential phase of a job and contains a reader, a processor, and a writer.
70 |
71 | **Item:** An item represents a single record that is read, processed, and written. Spring Batch provides support for reading and writing items in various formats, including XML, CSV, and database.
72 |
73 | In addition to these components, Spring Batch also provides a JobRepository, which is responsible for maintaining the state of the job and its execution status, and a JobLauncher, which is responsible for starting and stopping the job.
74 |
75 | Spring Batch also provides a number of built-in components, such as readers, processors, and writers for handling common data formats and tasks, as well as an extensible API for building custom components.
76 |
77 |
78 | ### Example of how to use Spring Batch
79 |
80 | Here's an example of how to use Spring Batch with Spring Boot to read data from a CSV file, process it, and then write it to a database:
81 |
82 | 1. First, create a Spring Boot application with the Spring Batch and Spring Data dependencies.
83 |
84 | 2. Create a batch configuration class that sets up the batch job and the necessary steps.
85 |
86 |
87 |
88 | ```java
89 |
90 | import org.springframework.beans.factory.annotation.Autowired;
91 | import org.springframework.context.annotation.Bean;
92 | import org.springframework.context.annotation.Configuration;
93 | import org.springframework.core.io.ClassPathResource;
94 |
95 | @Configuration
96 | public class BatchConfig {
97 | @Autowired
98 | private JobBuilderFactory jobBuilderFactory;
99 |
100 | @Autowired
101 | private StepBuilderFactory stepBuilderFactory;
102 |
103 | @Bean
104 | public Job readCSVFileJob() {
105 | return jobBuilderFactory
106 | .get("readCSVFileJob")
107 | .start(step1())
108 | .build();
109 | }
110 |
111 | @Bean
112 | public Step step1() {
113 | return stepBuilderFactory
114 | .get("step1")
115 | .chunk(5)
116 | .reader(reader())
117 | .processor(processor())
118 | .writer(writer())
119 | .build();
120 | }
121 |
122 |
123 |
124 | @Bean
125 | public PersonItemProcessor processor() {
126 | return new PersonItemProcessor();
127 | }
128 |
129 | @Bean
130 | public JdbcBatchItemWriter writer() {
131 | JdbcBatchItemWriter writer = new JdbcBatchItemWriter<>();
132 | writer.setDataSource(dataSource);
133 | writer.setSql("INSERT INTO people (first_name, last_name) VALUES (:firstName, :lastName)");
134 | writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<>());
135 | return writer;
136 | }
137 |
138 |
139 |
140 | }
141 | ```
142 |
143 | 3. Create a class that represents the data you're reading from the CSV file and a class that handles the processing of the data.
144 |
145 | ```java
146 | public class Person {
147 | private String firstName;
148 | private String lastName;
149 | // getters and setters
150 | }
151 |
152 | public class PersonItemProcessor implements ItemProcessor {
153 | @Override
154 | public Person process(final Person person) throws Exception {
155 | final String firstName = person.getFirstName().toUpperCase();
156 | final String lastName = person.getLastName().toUpperCase();
157 |
158 | final Person transformedPerson = new Person(firstName, lastName);
159 | return transformedPerson;
160 | }
161 | }
162 |
163 |
164 | ```
165 |
166 | 4. Finally, run the job by creating a `CommandLineRunner` that calls the `jobLauncher.run()` method and passing in the job name as a parameter.
167 |
168 |
169 | ```java
170 |
171 | @SpringBootApplication
172 | public class Application implements CommandLineRunner {
173 | @Autowired
174 | JobLauncher jobLauncher;
175 | @Autowired
176 | Job job;
177 | public static void main(String[] args) {
178 | SpringApplication.run(Application.class, args);
179 | }
180 | @Override
181 | public void run(String... args) throws Exception {
182 | JobExecution execution = jobLauncher.run(job, new JobParameters());
183 | System.out.println("Job Exit Status : "+ execution.getStatus());
184 | }
185 | }
186 |
187 |
188 | ```
189 |
190 | This is a basic example of how Spring Batch and Spring Boot can be used to perform batch processing. I
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
--------------------------------------------------------------------------------
/docs/spring/spring-cloud.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: default
3 | title: Spring Cloud
4 | parent: Spring
5 | resource: true
6 | desc: "Spring Cloud interview questions and answers."
7 | categories: [Spring Cloud]
8 | ---
9 |
10 | # Spring Cloud
11 | {: .no_toc }
12 |
13 |
14 |
15 | Table of contents
16 |
17 | {: .text-delta }
18 | 1. TOC
19 | {:toc}
20 |
21 |
22 | ---
23 |
24 | ## Introducing Spring Cloud
25 |
26 |
27 | ## Spring Cloud
28 |
29 | Spring team has integrated number of battle-tested open source projects from companies like Pivotal, Netflix into a Spring project known as Spring Cloud. Spring Cloud provides libraries & tools to quickly build some of the common design patterns of distributed system, including the following:
30 |
31 | **Spring Cloud Patterns and Libraries**
32 |
33 |
34 | | Category | Pattern Name | Spring Cloud Library |
35 | | ---------------------- | ------------------------------------------------ | --------------------------------------------- |
36 | | Development Patterns | Distributed/versioned configuration management | Spring Cloud Config Server |
37 | | | Core Microservices Patterns | Spring Boot |
38 | | | Asynchronous/Distributed Messaging | Spring Cloud Stream (AMQP and Kafka) |
39 | | | Inter-Service Communication | RestTemplate and Spring Cloud Feign |
40 | | Routing Patterns | Service Registration & Discovery | Spring Cloud Netflix Eureka & Consul |
41 | | | Service Routing/ API Gateway Pattern | Spring Cloud Netflix Zuul |
42 | | Resiliency Patterns | Client side load balancing | Spring Cloud Netflix Ribbon |
43 | | | Circuit Breaker & Fallback Pattern | Spring Cloud Netflix Hystrix |
44 | | | Bulkhead pattern | Spring Cloud / Spring Cloud Netflix Hystrix |
45 | | Logging Patterns | Log Correlation | Spring Cloud Sleuth |
46 | | | Microservice Tracing | Spring Cloud Sleuth/Zipkin |
47 | | Security Patterns | Authorization and Authentication | Spring Cloud Security OAuth2 |
48 | | | Credentials Management | Spring Cloud Security OAuth2/ JWT |
49 | | | Distributed Sessions | Spring Cloud OAuth2 and Redis |
50 |
51 | Spring Cloud makes it really easy to develop, deploy and operate JVM applications for the Cloud.
52 |
53 | Different release trains in Spring Cloud at the time of writing this handbook are (newest to oldest) - Finchley, Edgware, Dalston and Camden. Spring Cloud is always used in conjunction with Spring Boot.
54 |
55 | A bare minimum `build.gradle` for any Spring Cloud project will look like:
56 |
57 | **build.gradle**
58 |
59 | ```properties
60 | buildscript {
61 | ext {
62 | springBootVersion = '1.5.12.RELEASE'
63 | }
64 | repositories {
65 | mavenCentral()
66 | }
67 | dependencies {
68 | classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
69 | }
70 | }
71 | apply plugin: 'java'
72 | apply plugin: 'spring-boot'
73 | dependencyManagement {
74 | imports {
75 | mavenBom ':spring-cloud-dependencies:Edgware.SR3'
76 | }
77 | }
78 | dependencies {
79 | compile ':spring-cloud-starter-config'
80 | compile ':spring-cloud-starter-eureka'
81 | }
82 |
83 | ```
84 |
85 | - Edgware.SR3 is the spring-cloud train version.
86 | - Spring cloud dependencies (eureka client and config client)
87 |
88 | And a minimal version of `spring-cloud` Application:
89 |
90 | ```java
91 | @SpringBootApplication
92 | @EnableDiscoveryClient
93 | public class Application {
94 | public static void main(String[] args) {
95 | SpringApplication.run(Application.class, args);
96 | }
97 | }
98 |
99 | ```
100 |
101 | - Enables spring-boot in your application.
102 | - Enables discovery-client: a spring-cloud feature in your microservice that helps you discover other services in a given environment.
103 |
104 |
105 |
106 | ---
107 |
108 | ## Reference Links
109 | - [Spring Cloud](http://projects.spring.io/spring-cloud/)
--------------------------------------------------------------------------------
/docs/spring/spring-security.md:
--------------------------------------------------------------------------------
1 |
2 | Spring Security
3 |
4 | ---
5 |
6 | ## Introducing Spring Security
7 |
8 | Spring Security is essentially just a bunch of servlet filters that enable Java applications to include authentication and authorization functionality. It is one of the most powerful, and highly customizable access-control frameworks (security framework) that provide authentication, authorization, and other security features for Java EE (Enterprise edition) based enterprise applications. The real power of Spring Security lies in its ability to be extended to meet custom needs. Its main responsibility is to authenticate and authorize incoming requests for accessing any resource, including rest API endpoints, MVC (Model-View-Controller) URLs, static resources, etc.
9 |
10 |
11 | ### Features of Spring Security
12 |
13 | Some essential features of Spring Security include:
14 |
15 | - Supports authentication and authorization in a flexible and comprehensive manner.
16 | - Detection and prevention of attacks including session fixation, clickjacking, cross-site request forgery, etc.
17 | - Integrate with Servlet API.
18 | - Offers optional integration with Spring Web MVC (Model-View-Controller).
19 | - Java Authentication and Authorization Service (JAAS) is used for authentication purposes.
20 | - Allows Single Sign-On so that users can access multiple applications with just one account (username and password).
21 |
22 | ### Authentication and Authorization
23 |
24 | #### Authentication:
25 | This refers to the process of verifying the identity of the user, using the credentials provided when accessing certain restricted resources. Two steps are involved in authenticating a user, namely identification and verification. An example is logging into a website with a username and a password. This is like answering the question Who are you?
26 | #### Authorization:
27 | It is the ability to determine a user's authority to perform an action or to view data, assuming they have successfully logged in. This ensures that users can only access the parts of a resource that they are authorized to access. It could be thought of as an answer to the question Can a user do/read this?
28 |
29 |
30 | ---
31 |
32 | ## Authentication Types
33 |
34 | ### Basic authentication
35 |
36 | RESTful web services can be authenticated in many ways, but the most basic one is basic authentication. For basic authentication, we send a username and password using the HTTP [Authorization] header to enable us to access the resource. Usernames and passwords are encoded using base64 encoding (not encryption) in Basic Authentication. The encoding is not secure since it can be easily decoded.
37 |
38 | Syntax:
39 |
40 |
41 | ```log
42 | Value = username:password
43 | Encoded Value = base64(Value)
44 | Authorization Value = Basic
45 | //Example: Authorization: Basic VGVzdFVzZXI6dGVzdDEyMw==
46 | //Decode it'll give back the original username:password UserName:user123
47 | ```
48 |
49 | ### digest authentication
50 |
51 | RESTful web services can be authenticated in many ways, but advanced authentication methods include digest authentication. It applies a hash function to username, password, HTTP method, and URI in order to send credentials in encrypted form. It generates more complex cryptographic results by using the hashing technique which is not easy to decode.
52 |
53 | Syntax:
54 |
55 | ```log
56 | Hash1=MD5(username:realm:password)
57 | Hash2=MD5(method:digestURI)
58 | response=MD5(Hash1:nonce:nonceCount:cnonce:qop:Hash2)
59 | //Example, this got generated by running this example
60 | Authorization: Digest username="TestAdmin", realm="admin-digest-realm", nonce="MTYwMDEwMTUyMDM4OToxM2M1Y2I4MGFjMjk4OGI1ODQzZjc3NDUzOGFlMjZjYw==", uri="/admin/hello?name=User", response="2f080edbec53be2bdf3853d477e4a543", qop=auth, nc=00000002, cnonce="11ecd9bf947dbcf4"
61 | ```
62 |
63 |
64 | ---
65 |
66 | ## Spring Security Modules
67 |
68 | In Spring Security, the Security module comprises separate jar files based on its functionality. The primary use is to allow the user to integrate according to the requirements. To include minimal spring security for your Maven project, include below dependencies in your pom.xml.
69 |
70 | **Core – spring-security-core.jar**
71 | - This module contains core authentication and access-control related classes, basic provisioning APIs. This is mandatory for providing spring security to any J2EE based enterprise application. This module supports non-web applications, too.
72 |
73 | **Web – spring-security-web.jar**
74 | –This module contains filters and web-based authentication, like access control for URLs in a Servlet environment. This module is responsible to provide security to your Spring MVC or any other web application.
75 |
76 | **Config- spring-security-config.jar**
77 | –This module used to use the Spring Security XML name-space. It also supports.
78 |
79 | **LDAP**
80 | – Modules supporting the LDAP authentication. We may need this if you want to have LDAP authentication for our application.
81 |
82 | **OAuth 2.0 Core**
83 | – Provides support for the OAuth 2.0 authorization.
84 |
85 | **OAuth 2.0 Client**
86 | – Spring Security’s client support for OAuth 2.0 Authorization Framework and OpenID Connect Core 1.0.
87 |
88 | **Secure:**
89 |
90 | Spring has provided a separate module for securing the application. Spring Security is a Java SE/Java EE security framework to provide Authentication, Authorization, SSO and other Security features for Web Applications or Enterprise Applications. Spring Security supports the various types of security such as :
91 |
92 | 1. Authentication and Authorization.
93 | 2. BASIC,Digest and Form-Based Authentication.
94 | 3. LDAP Authentication.
95 | 4. OpenID Authentication.
96 | 5. SSO (Single Sign-On) Implementation.
97 | 6. Cross-Site Request Forgery (CSRF) Implementation.
98 | 7. `Remember-Me` Feature through HTTP Cookies.
99 | 8. Implementation of ACLs.
100 | 9. `Channel Security` that means automatically switching between HTTP and HTTPS.
101 | 10. JAAS (Java Authentication and Authorization Service).
102 | 11. Flow Authorization using Spring WebFlow Framework.
103 | 12. WS-Security using Spring Web Services.
104 |
105 |
106 |
107 |
108 |
109 |
110 |
--------------------------------------------------------------------------------
/docs/spring/swagger-docs.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: default
3 | title: Swagger
4 | parent: Spring
5 | resource: true
6 | desc: "Swagger interview questions and answers."
7 | categories: [Swagger]
8 | ---
9 |
10 | # Swagger
11 | {: .no_toc }
12 |
13 |
14 |
15 | Table of contents
16 |
17 | {: .text-delta }
18 | 1. TOC
19 | {:toc}
20 |
21 |
22 | ---
23 |
24 | Swagger is a very good open source tool for documenting REST based APIs provided by microservices. It provides very easy to use interactive documentation.
25 |
26 | By the use of swagger annotation on REST endpoint, api documentation can be autogenerated and exposed over the web interface. Internal and external team can use web interface, to see the list of APIs and their inputs & error codes. They can even invoke the endpoints directly from web interface to get the results.
27 |
28 | Swagger UI is a very powerful tool for your microservices consumers to help them understand set of endpoints provided by a given microservice.
29 |
30 | ## Integrate Swagger into your microservices
31 |
32 | Integrating swagger into Spring Boot based application should be straight forward. You need to add swagger dependencies into `build.gradle`, provide swagger configuration and finally make some tweaks into WebMvcConfig to allow swagger-ui into your project.
33 |
34 | **build.gradle - add swagger dependencies.**
35 | ```xml
36 | dependencies {
37 | compile('org.springframework.cloud:spring-cloud-starter-config')
38 | // https://mvnrepository.com/artifact/io.springfox/springfox-swagger2
39 | compile group: 'io.springfox', name: 'springfox-swagger2', version: '2.8.0'
40 | compile group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.8.0'
41 | ```
42 |
43 | **Second step is to define swagger configuration:**
44 | SwaggerConfig.java.
45 | ```java
46 | import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
47 | import org.springframework.context.annotation.*;
48 | import springfox.documentation.builders.*;
49 | import springfox.documentation.service.*;
50 |
51 | @Configuration
52 | @EnableSwagger2
53 | @EnableAutoConfiguration
54 | public class SwaggerConfig {
55 | @Bean
56 | public Docket productApi() {
57 | return new Docket(DocumentationType.SWAGGER_2)
58 | .groupName("Product Service")
59 | .apiInfo(apiInfo())
60 | .select()
61 | .apis(RequestHandlerSelectors.basePackage("hello"))
62 | .paths(PathSelectors.any())
63 | .build();
64 | }
65 | private ApiInfo apiInfo() {
66 | return new ApiInfoBuilder()
67 | .title("Product Service with Swagger")
68 | .description("Spring REST Sample with Swagger")
69 | .termsOfServiceUrl("http://www-03.ibm.com/software/sla/sladb.nsf/sla/bm?Open")
70 | .contact(new Contact("Munish Chandel", "","munish.chandel@outlook.com"))
71 | .license("Apache License Version 2.0")
72 | .licenseUrl("https://github.com/IBM-Bluemix/news-aggregator/blob/master/LICENSE")
73 | .version("1.0")
74 | .build();
75 | }
76 | }
77 |
78 | ```
79 | **Lastly, add the below WebMvcConfig to enable swagger UI**
80 |
81 | ```java
82 | import org.slf4j.Logger;
83 | import org.slf4j.LoggerFactory;
84 | import org.springframework.context.annotation.Configuration;
85 | import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
86 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
87 |
88 | @Configuration
89 | public class WebMvcConfig extends WebMvcConfigurerAdapter {
90 | private static final Logger logger = LoggerFactory.getLogger(WebMvcConfig.class);
91 | @Override
92 | public void addResourceHandlers(ResourceHandlerRegistry registry) {
93 | super.addResourceHandlers(registry);
94 | registry.addResourceHandler("swagger-ui.html")
95 | .addResourceLocations("classpath:/META-INF/resources/");
96 | /*registry.addResourceHandler("/webjars/**")
97 | .addResourceLocations("classpath:/META-INF/resources/webjars/");*/
98 | }
99 | }
100 |
101 | ```
102 | Now swagger is configured for use in your application.
103 |
104 |
105 |
106 | ## Swagger annotations
107 |
108 | Then the resource class can have annotations such as:
109 |
110 | - `@Api`: To mark a resource as a Swagger resource
111 | - `@ApiOperation`: Describes an operation or typically an HTTP method against a specific path
112 | - `@ApiResponse`: To describe the response of a method
113 | - `@ApiParam`: Additional metadata for operational parameters of a method
114 |
115 | ## Maven plugin
116 |
117 | A Maven plugin can be used to generate the swagger.yaml file based on the metadata placed on the code:
118 | ```xml
119 |
120 | ...
121 |
122 | com.github.kongchen
123 | swagger-maven-plugin
124 | 3.1.5
125 |
126 |
127 |
128 | false
129 | org.jee8ng.users.boundary
130 | http
131 | localhost:8081
132 | /${project.build.finalName}/resources
133 |
134 |
135 | Users API
136 | v1
137 | Users rest endpoints
138 |
139 | yaml
140 | ${basedir}/src/main/webapp
141 |
142 |
143 |
144 |
145 |
146 |
147 | compile
148 |
149 | generate
150 |
151 |
152 |
153 |
154 | ...
155 |
156 | ```
157 |
158 | The swaggerDirectory is where the `swagger.yaml` file gets generated. This way, it's possible to use a combination of plugins and annotations to create the Swagger Spec format with the desired output, such as JSON, configured here. The plugin and API details can be explored further on the Swagger website and on the GitHub pages of the plugin.
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
--------------------------------------------------------------------------------
/docs/spring/webFlux.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Spring WebFlux
3 |
4 | hide:
5 | - tags
6 | tags:
7 | - Spring WebFlux
8 |
9 |
10 |
11 | ---
12 |
13 | # Spring WebFlux
14 |
15 | ---
16 |
17 |
18 |
19 | ## Spring WebFlux
20 |
21 |
22 |
23 | ### Introduction to Spring WebFlux
24 |
25 | Spring WebFlux is part of the Spring Framework 5 and provides support for building reactive applications on the web. It's designed to work in non-blocking environments and supports back pressure, which is a way to manage and control the flow of data in asynchronous and event-driven applications. This makes it well-suited for scenarios where you need to handle a large number of concurrent connections with minimal resources.
26 |
27 | ### Core Concepts of Spring WebFlux
28 |
29 | #### Reactive Programming
30 |
31 | - **Definition**: A programming paradigm oriented around data flows and the propagation of change. It emphasizes asynchronous data processing and non-blocking I/O operations.
32 | - **Usage**: Ideal for applications that deal with streams of data that can be emitted and consumed at different rates.
33 |
34 | #### Reactor Core
35 |
36 | - **Foundation**: Spring WebFlux uses Project Reactor as its foundational reactive library. Reactor Core provides two main types: `Flux` and `Mono`, for representing asynchronous sequences of 0-N and 0-1 values, respectively.
37 | - **Purpose**: Enables efficient handling of asynchronous streams of data with non-blocking back pressure.
38 |
39 | ### Developing with Spring WebFlux
40 |
41 | #### Annotated Controllers
42 |
43 | - Similar to Spring MVC, but methods can return `Mono` or `Flux` types to support asynchronous and non-blocking operations.
44 | - Example:
45 | ```java
46 | @RestController
47 | public class MyReactiveController {
48 | @GetMapping("/data")
49 | public Flux fetchData() {
50 | return Flux.just("Data 1", "Data 2", "Data 3"); // Asynchronous data stream
51 | }
52 | }
53 | ```
54 |
55 | #### Functional Endpoints
56 |
57 | - Spring WebFlux supports a more functional style of defining routes and handlers, separate from the annotation-based approach.
58 | - Example:
59 | ```java
60 | public RouterFunction routes(MyHandler handler) {
61 | return route(GET("/functional"), handler::handle);
62 | }
63 | ```
64 |
65 | ### Reactive Data Access
66 |
67 | - **Spring Data Reactive Repositories**: Extensions of the Spring Data project to support reactive data access for NoSQL databases like MongoDB, Cassandra, Redis, and others.
68 | - **R2DBC**: For relational databases, Spring supports R2DBC (Reactive Relational Database Connectivity), enabling non-blocking database access.
69 |
70 | ### WebFlux vs. MVC
71 |
72 | - **Thread Model**: MVC uses a servlet-based model which can lead to more thread usage under heavy loads, whereas WebFlux is non-blocking and more efficient in handling concurrent connections with fewer threads.
73 | - **Use Cases**: WebFlux is ideal for event-driven, streaming, and highly interactive applications. MVC is suitable for traditional web applications with a focus on CRUD operations and form submissions.
74 |
75 | ### Testing Spring WebFlux Applications
76 |
77 | - **WebTestClient**: A non-blocking client to test web endpoints, providing a fluent API for making Web requests and asserting responses.
78 | - Example:
79 | ```java
80 | @Autowired
81 | private WebTestClient webTestClient;
82 |
83 | @Test
84 | public void testFetchData() {
85 | webTestClient.get().uri("/data")
86 | .exchange()
87 | .expectStatus().isOk()
88 | .expectBodyList(String.class).hasSize(3);
89 | }
90 | ```
91 |
92 |
93 | ### Advanced Features of Spring WebFlux
94 |
95 | Spring WebFlux not only simplifies the development of reactive applications but also offers advanced features to handle complex scenarios. Let's explore some of these features to understand how WebFlux supports sophisticated web application development.
96 |
97 | ### Back Pressure
98 |
99 | - **Concept**: A mechanism that allows the consumer of data to control the flow of data coming from the producer. It prevents overwhelming the consumer with too much data at once.
100 | - **Implementation**: In Spring WebFlux, back pressure is seamlessly handled by Reactor's `Flux` and `Mono` types, allowing developers to build applications that can efficiently manage data streams even under high load.
101 |
102 | ### Error Handling
103 |
104 | - **Reactive Error Handling**: Handling errors in a reactive stream is different from traditional imperative programming. Errors are treated as events in the data stream.
105 | - **Operators**: Reactor provides operators like `onErrorReturn`, `onErrorResume`, and `doOnError` for composing the error handling within the reactive chains.
106 |
107 | ### WebSockets
108 |
109 | - **Support for WebSockets**: Spring WebFlux includes support for WebSockets, enabling two-way communication between client and server. This is particularly useful for applications requiring real-time data exchange, such as chat applications or live updates.
110 | - **Implementation**: Developers can define WebSocket handlers and manage WebSocket sessions, sending and receiving messages reactively.
111 |
112 | ### Server-Sent Events (SSE)
113 |
114 | - **About SSE**: Server-Sent Events allow the server to push real-time updates to the client over HTTP. This is simpler to implement than WebSockets and is used for unidirectional data flow (server to client).
115 | - **Usage in WebFlux**: SSE is naturally supported in Spring WebFlux by returning a `Flux` from a controller method and indicating the content type as `text/event-stream`.
116 |
117 | ### Security
118 |
119 | - **Reactive Security**: Spring Security provides support for securing WebFlux applications. This includes authentication, authorization, and CSRF protection adapted for the non-blocking nature of reactive applications.
120 | - **Configuration**: Developers can configure security policies similarly to traditional Spring Security, but with a reactive twist to accommodate the asynchronous processing model.
121 |
122 | ### Reactive APIs Integration
123 |
124 | - **Integration with External Services**: Spring WebFlux can be used to consume external reactive APIs, leveraging its non-blocking nature to improve efficiency and scalability.
125 | - **WebClient**: The `WebClient` is a non-blocking, reactive client for performing HTTP requests, offering a more powerful alternative to the traditional `RestTemplate`.
126 |
127 | ### Global Error Handling
128 |
129 | - **Global Error Handling**: Handling errors globally in a reactive stack can be challenging due to the asynchronous nature of the execution model. Spring WebFlux provides mechanisms to define global error handling strategies to capture and manage exceptions across the entire application.
130 |
131 | ### Reactive Streams Context
132 |
133 | - **Context Propagation**: In reactive programming, passing data across different parts of the reactive chain (e.g., security context, transactional data) can be complex. Spring WebFlux offers context propagation features to make this easier, allowing you to maintain state across asynchronous computations.
134 |
135 |
136 |
137 | Spring WebFlux represents a significant advancement in building reactive applications with Spring. Its comprehensive feature set addresses the challenges of asynchronous and non-blocking programming, providing developers with the tools to create efficient, scalable, and real-time web applications. By leveraging the reactive programming model, Spring WebFlux enables applications to handle a large number of concurrent connections with minimal resources, making it an excellent choice for high-performance web applications. Whether you're new to reactive programming or looking to enhance existing applications with reactive capabilities, Spring WebFlux offers a robust foundation for building and scaling modern web applications.
138 |
139 |
140 |
--------------------------------------------------------------------------------
/docs/tags.md:
--------------------------------------------------------------------------------
1 | # Tags
2 |
3 | Following is a list of relevant tags:
4 |
5 |
--------------------------------------------------------------------------------
/includes/abbreviations.md:
--------------------------------------------------------------------------------
1 | *[HTML]: Hyper Text Markup Language
2 | *[W3C]: World Wide Web Consortium
3 | *[JDK]: Java Development kit
4 |
5 |
6 |
--------------------------------------------------------------------------------
/mkdocs.yml:
--------------------------------------------------------------------------------
1 | site_name: Interview Notes
2 | site_url: https://interview-notes.com/
3 | extra:
4 | generator: false
5 |
6 | # Plugins
7 | plugins:
8 | - tags:
9 | tags_file: tags.md
10 | - search
11 |
12 | theme:
13 | name: material
14 | palette:
15 | primary: indigo
16 | # logo: assets/logo4.png
17 | # favicon: assets/logo.png
18 | features:
19 | - search.highlight
20 | - search.suggest
21 | - navigation.path
22 | - navigation.top
23 | - content.code.copy
24 | - navigation.tabs
25 | - navigation.tabs.sticky
26 | - navigation.path
27 | - navigation.indexes
28 | - palette:
29 | - media: "(prefers-color-scheme)"
30 | toggle:
31 | icon: material/link
32 | name: Switch to light mode
33 | - media: "(prefers-color-scheme: light)"
34 | scheme: default
35 | primary: indigo
36 | accent: indigo
37 | toggle:
38 | icon: material/toggle-switch
39 | name: Switch to dark mode
40 | - media: "(prefers-color-scheme: dark)"
41 | scheme: slate
42 | primary: black
43 | accent: indigo
44 | toggle:
45 | icon: material/toggle-switch-off
46 | name: Switch to system preference
47 | watch:
48 | - includes
49 |
50 | # Extensions
51 | markdown_extensions:
52 | - tables
53 | - abbr
54 | - admonition
55 | - attr_list
56 | - def_list
57 | - footnotes
58 | - md_in_html
59 | - pymdownx.snippets:
60 | auto_append:
61 | - includes/abbreviations.md
62 | - toc:
63 | permalink: true
64 | - pymdownx.arithmatex:
65 | generic: true
66 | - pymdownx.betterem:
67 | smart_enable: all
68 | - pymdownx.caret
69 | - pymdownx.details
70 | - pymdownx.emoji:
71 | emoji_generator: !!python/name:material.extensions.emoji.to_svg
72 | emoji_index: !!python/name:material.extensions.emoji.twemoji
73 | - pymdownx.highlight:
74 | anchor_linenums: true
75 | line_spans: __span
76 | pygments_lang_class: true
77 | - pymdownx.inlinehilite
78 | - pymdownx.keys
79 | - pymdownx.magiclink:
80 | normalize_issue_symbols: true
81 | repo_url_shorthand: true
82 | user: squidfunk
83 | repo: mkdocs-material
84 | - pymdownx.mark
85 | - pymdownx.smartsymbols
86 | - pymdownx.snippets:
87 | auto_append:
88 | - includes/mkdocs.md
89 | - pymdownx.superfences:
90 | custom_fences:
91 | - name: mermaid
92 | class: mermaid
93 | format: !!python/name:pymdownx.superfences.fence_code_format
94 | - pymdownx.tabbed:
95 | alternate_style: true
96 | combine_header_slug: true
97 | slugify: !!python/object/apply:pymdownx.slugs.slugify
98 | kwds:
99 | case: lower
100 | - pymdownx.tasklist:
101 | custom_checkbox: true
102 | - pymdownx.tilde
103 |
104 |
105 | # Page tree
106 | nav:
107 | - Home: index.md
108 | - 'Languages' :
109 | - 'Java':
110 | - java/index.md
111 | - 'Java 8': 'java/java8/java8.md'
112 | - 'Functional Interface': 'java/java8/FunctionalInterface.md'
113 | - 'Java 17': 'java/java17.md'
114 | - 'Node.js':
115 | - 'Node.js': 'nodejs/index.md'
116 | - 'Module': 'nodejs/module.md'
117 | - 'Event Loop': 'nodejs/eventloop.md'
118 | - 'Express.js': 'nodejs/express.md'
119 | - 'Python':
120 | - 'Python': 'python/index.md'
121 | - 'Golang':
122 | - 'Golang': 'golang/index.md'
123 | - Web Development:
124 | - 'Spring':
125 | - 'Spring': 'spring/index.md'
126 | - 'Spring Security': 'spring/security/security.md'
127 | - 'Spring Annotations': 'spring/security/annotations.md'
128 | - 'Spring Security Filters ': 'spring/security/filters.md'
129 | - 'Spring Boot': 'spring/springboot/spring-boot.md'
130 | - 'Spring Boot Actuator': 'spring/springboot/springboot-actuator.md'
131 | - 'Spring MVC': 'spring/spring-mvc.md'
132 | - 'Spring Transaction': 'spring/transaction.md'
133 | - 'Spring WebFlux': 'spring/webFlux.md'
134 | - 'Microservices':
135 | - 'Microservices': 'microservices/index.md'
136 | - 'SOLID': 'microservices/solid.md'
137 | - 'Angular':
138 | - 'Angular': 'angular/index.md'
139 | - 'Javascript':
140 | - 'Javascript': 'javascript/index.md'
141 | - 'TypeScript':
142 | - 'TypeScript': 'typescript/index.md'
143 | - 'React':
144 | - 'React': 'react/index.md'
145 | - 'Lifecycle Methods': 'react/lifecycle.md'
146 | - 'React Component': 'react/react-component.md'
147 | - 'Jest': 'react/jest.md'
148 | - 'Enzyme': 'react/enzyme.md'
149 | - 'ESLint': 'react/eslint.md'
150 | - 'Performance': 'react/performance.md'
151 | - 'React Router': 'react/react-router.md'
152 | - 'Redux': 'react/redux.md'
153 | - 'Redux Thunk': 'react/redux-thunk.md'
154 | - 'Rest API': 'react/rest-api.md'
155 | - 'Testing': 'react/testing.md'
156 | - 'Testing': 'react/nextjs.md'
157 | - 'HTML':
158 | - 'HTML': 'html/index.md'
159 | - 'CSS':
160 | - 'CSS': 'css/index.md'
161 | - 'MQ':
162 | - 'Apache Kafka': 'mq/kafka.md'
163 | - 'RabbitMQ': 'mq/rebbitmq.md'
164 | - 'Apache ActiveMQ': 'mq/activemq.md'
165 | - 'Amazon SQS (Simple Queue Service)': 'mq/sqs.md'
166 | - 'Microsoft Azure sqs.md': 'mq/servicebus.md'
167 | - 'Google Cloud Pub/Sub': 'mq/pubsub.md'
168 | - 'Redis Pub/Sub': 'mq/redis.md'
169 | - 'DevOps':
170 | - 'devops/index.md'
171 | - 'AWS': 'devops/cloud/aws.md'
172 | - 'Azure': 'devops/cloud/azure.md'
173 | - 'GCP': 'devops/cloud/gcp.md'
174 | - 'OpenShift': 'devops/cloud/openshift.md'
175 | - 'VCS': 'devops/vcs.md'
176 | - 'CI/CD': 'devops/cicd.md'
177 | - 'Configuration Management': 'devops/config.md'
178 | - 'Containerization and Orchestration': 'devops/orchestration.md'
179 | - 'Infrastructure as Code (IaC)': 'devops/iac.md'
180 | - 'Monitoring and Logging': 'devops/logging.md'
181 | - 'Container Registries': 'devops/container.md'
182 | - 'Security Scanning and Compliance': 'devops/scanning.md'
183 | - 'Artifact Repository': 'devops/artifact.md'
184 | - 'GitOps': 'devops/gitops.md'
185 | - 'Database':
186 | - 'Database': 'db/index.md'
187 | - 'Cassandra': 'db/cassandra.md'
188 | - 'Couchbase': 'db/couchbase.md'
189 | - 'DynamoDB': 'db/dynamoDB.md'
190 | - 'MongoDB': 'db/mongodb.md'
191 | - 'Oracle': 'db/oracle.md'
192 | - 'PostgreSql': 'db/postgreSql.md'
193 | - 'Redis': 'db/redis.md'
194 | - 'Design Pattern':
195 | - 'Design Pattern': 'design-pattern/index.md'
196 | - 'Behavioral Pattern': 'design-pattern/behavioral-pattern.md'
197 | - 'Creational Pattern': 'design-pattern/creational-pattern.md'
198 | - 'Structural Pattern': 'design-pattern/structural-pattern.md'
199 | - 'Other Pattern': 'design-pattern/other-pattern.md'
200 | - 'Algorithms':
201 | - 'Data Structures': 'ds-algo/index.md'
202 | - 'Algorithms': 'ds-algo/algorithms.md'
203 | - 'QA':
204 | - 'Quality Assurance': 'qa/index.md'
205 | - 'Cucumber': 'qa/cucumber.md'
206 | - 'Selenium': 'qa/website/selenium.md'
207 | - 'Protractor': 'qa/website/protractor.md'
208 | - 'Cypress': 'qa/website/cypress.md'
209 | - 'WebdriverIO': 'qa/website/webdriverIO.md'
210 | - 'Apigee': 'qa/microservices/apigee.md'
211 | - 'Cucumber': 'qa/microservices/apigee.md'
212 | - 'jest': 'qa/microservices/jest.md'
213 | - 'Mocha/Chai': 'qa/microservices/mocha-chai.md'
214 | - 'karate': 'qa/microservices/karate.md'
215 | - 'postman': 'qa/microservices/postman.md'
216 | - 'Rest Assured': 'qa/microservices/rest-assured.md'
217 | - 'TestNG': 'qa/microservices/testng.md'
218 | - 'Appium': 'qa/mobile/appium.md'
219 | - 'Robot Framework': 'qa/mobile/robot-framework.md'
220 | - 'JMeter': 'qa/jmeter.md'
221 | - 'Misc':
222 | - 'Agile methodology': 'misc/agile.md'
223 | - 'Security Scan Tools': 'misc/security-scan.md'
224 | - 'Production Support Tools': 'misc/production-support.md'
225 |
226 | - Tags: 'tags.md'
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
--------------------------------------------------------------------------------
/site/assets/images/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/site/assets/images/favicon.png
--------------------------------------------------------------------------------
/site/assets/javascripts/lunr/min/lunr.da.min.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Lunr languages, `Danish` language
3 | * https://github.com/MihaiValentin/lunr-languages
4 | *
5 | * Copyright 2014, Mihai Valentin
6 | * http://www.mozilla.org/MPL/
7 | */
8 | /*!
9 | * based on
10 | * Snowball JavaScript Library v0.3
11 | * http://code.google.com/p/urim/
12 | * http://snowball.tartarus.org/
13 | *
14 | * Copyright 2010, Oleg Mazko
15 | * http://www.mozilla.org/MPL/
16 | */
17 |
18 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.da=function(){this.pipeline.reset(),this.pipeline.add(e.da.trimmer,e.da.stopWordFilter,e.da.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.da.stemmer))},e.da.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.da.trimmer=e.trimmerSupport.generateTrimmer(e.da.wordCharacters),e.Pipeline.registerFunction(e.da.trimmer,"trimmer-da"),e.da.stemmer=function(){var r=e.stemmerSupport.Among,i=e.stemmerSupport.SnowballProgram,n=new function(){function e(){var e,r=f.cursor+3;if(d=f.limit,0<=r&&r<=f.limit){for(a=r;;){if(e=f.cursor,f.in_grouping(w,97,248)){f.cursor=e;break}if(f.cursor=e,e>=f.limit)return;f.cursor++}for(;!f.out_grouping(w,97,248);){if(f.cursor>=f.limit)return;f.cursor++}d=f.cursor,d=d&&(r=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,e=f.find_among_b(c,32),f.limit_backward=r,e))switch(f.bra=f.cursor,e){case 1:f.slice_del();break;case 2:f.in_grouping_b(p,97,229)&&f.slice_del()}}function t(){var e,r=f.limit-f.cursor;f.cursor>=d&&(e=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,f.find_among_b(l,4)?(f.bra=f.cursor,f.limit_backward=e,f.cursor=f.limit-r,f.cursor>f.limit_backward&&(f.cursor--,f.bra=f.cursor,f.slice_del())):f.limit_backward=e)}function s(){var e,r,i,n=f.limit-f.cursor;if(f.ket=f.cursor,f.eq_s_b(2,"st")&&(f.bra=f.cursor,f.eq_s_b(2,"ig")&&f.slice_del()),f.cursor=f.limit-n,f.cursor>=d&&(r=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,e=f.find_among_b(m,5),f.limit_backward=r,e))switch(f.bra=f.cursor,e){case 1:f.slice_del(),i=f.limit-f.cursor,t(),f.cursor=f.limit-i;break;case 2:f.slice_from("løs")}}function o(){var e;f.cursor>=d&&(e=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,f.out_grouping_b(w,97,248)?(f.bra=f.cursor,u=f.slice_to(u),f.limit_backward=e,f.eq_v_b(u)&&f.slice_del()):f.limit_backward=e)}var a,d,u,c=[new r("hed",-1,1),new r("ethed",0,1),new r("ered",-1,1),new r("e",-1,1),new r("erede",3,1),new r("ende",3,1),new r("erende",5,1),new r("ene",3,1),new r("erne",3,1),new r("ere",3,1),new r("en",-1,1),new r("heden",10,1),new r("eren",10,1),new r("er",-1,1),new r("heder",13,1),new r("erer",13,1),new r("s",-1,2),new r("heds",16,1),new r("es",16,1),new r("endes",18,1),new r("erendes",19,1),new r("enes",18,1),new r("ernes",18,1),new r("eres",18,1),new r("ens",16,1),new r("hedens",24,1),new r("erens",24,1),new r("ers",16,1),new r("ets",16,1),new r("erets",28,1),new r("et",-1,1),new r("eret",30,1)],l=[new r("gd",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1)],m=[new r("ig",-1,1),new r("lig",0,1),new r("elig",1,1),new r("els",-1,1),new r("løst",-1,2)],w=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],p=[239,254,42,3,0,0,0,0,0,0,0,0,0,0,0,0,16],f=new i;this.setCurrent=function(e){f.setCurrent(e)},this.getCurrent=function(){return f.getCurrent()},this.stem=function(){var r=f.cursor;return e(),f.limit_backward=r,f.cursor=f.limit,n(),f.cursor=f.limit,t(),f.cursor=f.limit,s(),f.cursor=f.limit,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.da.stemmer,"stemmer-da"),e.da.stopWordFilter=e.generateStopWordFilter("ad af alle alt anden at blev blive bliver da de dem den denne der deres det dette dig din disse dog du efter eller en end er et for fra ham han hans har havde have hende hendes her hos hun hvad hvis hvor i ikke ind jeg jer jo kunne man mange med meget men mig min mine mit mod ned noget nogle nu når og også om op os over på selv sig sin sine sit skal skulle som sådan thi til ud under var vi vil ville vor være været".split(" ")),e.Pipeline.registerFunction(e.da.stopWordFilter,"stopWordFilter-da")}});
--------------------------------------------------------------------------------
/site/assets/javascripts/lunr/min/lunr.de.min.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Lunr languages, `German` language
3 | * https://github.com/MihaiValentin/lunr-languages
4 | *
5 | * Copyright 2014, Mihai Valentin
6 | * http://www.mozilla.org/MPL/
7 | */
8 | /*!
9 | * based on
10 | * Snowball JavaScript Library v0.3
11 | * http://code.google.com/p/urim/
12 | * http://snowball.tartarus.org/
13 | *
14 | * Copyright 2010, Oleg Mazko
15 | * http://www.mozilla.org/MPL/
16 | */
17 |
18 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.de=function(){this.pipeline.reset(),this.pipeline.add(e.de.trimmer,e.de.stopWordFilter,e.de.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.de.stemmer))},e.de.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.de.trimmer=e.trimmerSupport.generateTrimmer(e.de.wordCharacters),e.Pipeline.registerFunction(e.de.trimmer,"trimmer-de"),e.de.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,i=new function(){function e(e,r,n){return!(!v.eq_s(1,e)||(v.ket=v.cursor,!v.in_grouping(p,97,252)))&&(v.slice_from(r),v.cursor=n,!0)}function i(){for(var r,n,i,s,t=v.cursor;;)if(r=v.cursor,v.bra=r,v.eq_s(1,"ß"))v.ket=v.cursor,v.slice_from("ss");else{if(r>=v.limit)break;v.cursor=r+1}for(v.cursor=t;;)for(n=v.cursor;;){if(i=v.cursor,v.in_grouping(p,97,252)){if(s=v.cursor,v.bra=s,e("u","U",i))break;if(v.cursor=s,e("y","Y",i))break}if(i>=v.limit)return void(v.cursor=n);v.cursor=i+1}}function s(){for(;!v.in_grouping(p,97,252);){if(v.cursor>=v.limit)return!0;v.cursor++}for(;!v.out_grouping(p,97,252);){if(v.cursor>=v.limit)return!0;v.cursor++}return!1}function t(){m=v.limit,l=m;var e=v.cursor+3;0<=e&&e<=v.limit&&(d=e,s()||(m=v.cursor,m=v.limit)return;v.cursor++}}}function c(){return m<=v.cursor}function u(){return l<=v.cursor}function a(){var e,r,n,i,s=v.limit-v.cursor;if(v.ket=v.cursor,(e=v.find_among_b(w,7))&&(v.bra=v.cursor,c()))switch(e){case 1:v.slice_del();break;case 2:v.slice_del(),v.ket=v.cursor,v.eq_s_b(1,"s")&&(v.bra=v.cursor,v.eq_s_b(3,"nis")&&v.slice_del());break;case 3:v.in_grouping_b(g,98,116)&&v.slice_del()}if(v.cursor=v.limit-s,v.ket=v.cursor,(e=v.find_among_b(f,4))&&(v.bra=v.cursor,c()))switch(e){case 1:v.slice_del();break;case 2:if(v.in_grouping_b(k,98,116)){var t=v.cursor-3;v.limit_backward<=t&&t<=v.limit&&(v.cursor=t,v.slice_del())}}if(v.cursor=v.limit-s,v.ket=v.cursor,(e=v.find_among_b(_,8))&&(v.bra=v.cursor,u()))switch(e){case 1:v.slice_del(),v.ket=v.cursor,v.eq_s_b(2,"ig")&&(v.bra=v.cursor,r=v.limit-v.cursor,v.eq_s_b(1,"e")||(v.cursor=v.limit-r,u()&&v.slice_del()));break;case 2:n=v.limit-v.cursor,v.eq_s_b(1,"e")||(v.cursor=v.limit-n,v.slice_del());break;case 3:if(v.slice_del(),v.ket=v.cursor,i=v.limit-v.cursor,!v.eq_s_b(2,"er")&&(v.cursor=v.limit-i,!v.eq_s_b(2,"en")))break;v.bra=v.cursor,c()&&v.slice_del();break;case 4:v.slice_del(),v.ket=v.cursor,e=v.find_among_b(b,2),e&&(v.bra=v.cursor,u()&&1==e&&v.slice_del())}}var d,l,m,h=[new r("",-1,6),new r("U",0,2),new r("Y",0,1),new r("ä",0,3),new r("ö",0,4),new r("ü",0,5)],w=[new r("e",-1,2),new r("em",-1,1),new r("en",-1,2),new r("ern",-1,1),new r("er",-1,1),new r("s",-1,3),new r("es",5,2)],f=[new r("en",-1,1),new r("er",-1,1),new r("st",-1,2),new r("est",2,1)],b=[new r("ig",-1,1),new r("lich",-1,1)],_=[new r("end",-1,1),new r("ig",-1,2),new r("ung",-1,1),new r("lich",-1,3),new r("isch",-1,2),new r("ik",-1,2),new r("heit",-1,3),new r("keit",-1,4)],p=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32,8],g=[117,30,5],k=[117,30,4],v=new n;this.setCurrent=function(e){v.setCurrent(e)},this.getCurrent=function(){return v.getCurrent()},this.stem=function(){var e=v.cursor;return i(),v.cursor=e,t(),v.limit_backward=e,v.cursor=v.limit,a(),v.cursor=v.limit_backward,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.de.stemmer,"stemmer-de"),e.de.stopWordFilter=e.generateStopWordFilter("aber alle allem allen aller alles als also am an ander andere anderem anderen anderer anderes anderm andern anderr anders auch auf aus bei bin bis bist da damit dann das dasselbe dazu daß dein deine deinem deinen deiner deines dem demselben den denn denselben der derer derselbe derselben des desselben dessen dich die dies diese dieselbe dieselben diesem diesen dieser dieses dir doch dort du durch ein eine einem einen einer eines einig einige einigem einigen einiger einiges einmal er es etwas euch euer eure eurem euren eurer eures für gegen gewesen hab habe haben hat hatte hatten hier hin hinter ich ihm ihn ihnen ihr ihre ihrem ihren ihrer ihres im in indem ins ist jede jedem jeden jeder jedes jene jenem jenen jener jenes jetzt kann kein keine keinem keinen keiner keines können könnte machen man manche manchem manchen mancher manches mein meine meinem meinen meiner meines mich mir mit muss musste nach nicht nichts noch nun nur ob oder ohne sehr sein seine seinem seinen seiner seines selbst sich sie sind so solche solchem solchen solcher solches soll sollte sondern sonst um und uns unse unsem unsen unser unses unter viel vom von vor war waren warst was weg weil weiter welche welchem welchen welcher welches wenn werde werden wie wieder will wir wird wirst wo wollen wollte während würde würden zu zum zur zwar zwischen über".split(" ")),e.Pipeline.registerFunction(e.de.stopWordFilter,"stopWordFilter-de")}});
--------------------------------------------------------------------------------
/site/assets/javascripts/lunr/min/lunr.du.min.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Lunr languages, `Dutch` language
3 | * https://github.com/MihaiValentin/lunr-languages
4 | *
5 | * Copyright 2014, Mihai Valentin
6 | * http://www.mozilla.org/MPL/
7 | */
8 | /*!
9 | * based on
10 | * Snowball JavaScript Library v0.3
11 | * http://code.google.com/p/urim/
12 | * http://snowball.tartarus.org/
13 | *
14 | * Copyright 2010, Oleg Mazko
15 | * http://www.mozilla.org/MPL/
16 | */
17 |
18 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");console.warn('[Lunr Languages] Please use the "nl" instead of the "du". The "nl" code is the standard code for Dutch language, and "du" will be removed in the next major versions.'),e.du=function(){this.pipeline.reset(),this.pipeline.add(e.du.trimmer,e.du.stopWordFilter,e.du.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.du.stemmer))},e.du.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.du.trimmer=e.trimmerSupport.generateTrimmer(e.du.wordCharacters),e.Pipeline.registerFunction(e.du.trimmer,"trimmer-du"),e.du.stemmer=function(){var r=e.stemmerSupport.Among,i=e.stemmerSupport.SnowballProgram,n=new function(){function e(){for(var e,r,i,o=C.cursor;;){if(C.bra=C.cursor,e=C.find_among(b,11))switch(C.ket=C.cursor,e){case 1:C.slice_from("a");continue;case 2:C.slice_from("e");continue;case 3:C.slice_from("i");continue;case 4:C.slice_from("o");continue;case 5:C.slice_from("u");continue;case 6:if(C.cursor>=C.limit)break;C.cursor++;continue}break}for(C.cursor=o,C.bra=o,C.eq_s(1,"y")?(C.ket=C.cursor,C.slice_from("Y")):C.cursor=o;;)if(r=C.cursor,C.in_grouping(q,97,232)){if(i=C.cursor,C.bra=i,C.eq_s(1,"i"))C.ket=C.cursor,C.in_grouping(q,97,232)&&(C.slice_from("I"),C.cursor=r);else if(C.cursor=i,C.eq_s(1,"y"))C.ket=C.cursor,C.slice_from("Y"),C.cursor=r;else if(n(r))break}else if(n(r))break}function n(e){return C.cursor=e,e>=C.limit||(C.cursor++,!1)}function o(){_=C.limit,f=_,t()||(_=C.cursor,_<3&&(_=3),t()||(f=C.cursor))}function t(){for(;!C.in_grouping(q,97,232);){if(C.cursor>=C.limit)return!0;C.cursor++}for(;!C.out_grouping(q,97,232);){if(C.cursor>=C.limit)return!0;C.cursor++}return!1}function s(){for(var e;;)if(C.bra=C.cursor,e=C.find_among(p,3))switch(C.ket=C.cursor,e){case 1:C.slice_from("y");break;case 2:C.slice_from("i");break;case 3:if(C.cursor>=C.limit)return;C.cursor++}}function u(){return _<=C.cursor}function c(){return f<=C.cursor}function a(){var e=C.limit-C.cursor;C.find_among_b(g,3)&&(C.cursor=C.limit-e,C.ket=C.cursor,C.cursor>C.limit_backward&&(C.cursor--,C.bra=C.cursor,C.slice_del()))}function l(){var e;w=!1,C.ket=C.cursor,C.eq_s_b(1,"e")&&(C.bra=C.cursor,u()&&(e=C.limit-C.cursor,C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-e,C.slice_del(),w=!0,a())))}function m(){var e;u()&&(e=C.limit-C.cursor,C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-e,C.eq_s_b(3,"gem")||(C.cursor=C.limit-e,C.slice_del(),a())))}function d(){var e,r,i,n,o,t,s=C.limit-C.cursor;if(C.ket=C.cursor,e=C.find_among_b(h,5))switch(C.bra=C.cursor,e){case 1:u()&&C.slice_from("heid");break;case 2:m();break;case 3:u()&&C.out_grouping_b(z,97,232)&&C.slice_del()}if(C.cursor=C.limit-s,l(),C.cursor=C.limit-s,C.ket=C.cursor,C.eq_s_b(4,"heid")&&(C.bra=C.cursor,c()&&(r=C.limit-C.cursor,C.eq_s_b(1,"c")||(C.cursor=C.limit-r,C.slice_del(),C.ket=C.cursor,C.eq_s_b(2,"en")&&(C.bra=C.cursor,m())))),C.cursor=C.limit-s,C.ket=C.cursor,e=C.find_among_b(k,6))switch(C.bra=C.cursor,e){case 1:if(c()){if(C.slice_del(),i=C.limit-C.cursor,C.ket=C.cursor,C.eq_s_b(2,"ig")&&(C.bra=C.cursor,c()&&(n=C.limit-C.cursor,!C.eq_s_b(1,"e")))){C.cursor=C.limit-n,C.slice_del();break}C.cursor=C.limit-i,a()}break;case 2:c()&&(o=C.limit-C.cursor,C.eq_s_b(1,"e")||(C.cursor=C.limit-o,C.slice_del()));break;case 3:c()&&(C.slice_del(),l());break;case 4:c()&&C.slice_del();break;case 5:c()&&w&&C.slice_del()}C.cursor=C.limit-s,C.out_grouping_b(j,73,232)&&(t=C.limit-C.cursor,C.find_among_b(v,4)&&C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-t,C.ket=C.cursor,C.cursor>C.limit_backward&&(C.cursor--,C.bra=C.cursor,C.slice_del())))}var f,_,w,b=[new r("",-1,6),new r("á",0,1),new r("ä",0,1),new r("é",0,2),new r("ë",0,2),new r("í",0,3),new r("ï",0,3),new r("ó",0,4),new r("ö",0,4),new r("ú",0,5),new r("ü",0,5)],p=[new r("",-1,3),new r("I",0,2),new r("Y",0,1)],g=[new r("dd",-1,-1),new r("kk",-1,-1),new r("tt",-1,-1)],h=[new r("ene",-1,2),new r("se",-1,3),new r("en",-1,2),new r("heden",2,1),new r("s",-1,3)],k=[new r("end",-1,1),new r("ig",-1,2),new r("ing",-1,1),new r("lijk",-1,3),new r("baar",-1,4),new r("bar",-1,5)],v=[new r("aa",-1,-1),new r("ee",-1,-1),new r("oo",-1,-1),new r("uu",-1,-1)],q=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],j=[1,0,0,17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],z=[17,67,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],C=new i;this.setCurrent=function(e){C.setCurrent(e)},this.getCurrent=function(){return C.getCurrent()},this.stem=function(){var r=C.cursor;return e(),C.cursor=r,o(),C.limit_backward=r,C.cursor=C.limit,d(),C.cursor=C.limit_backward,s(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.du.stemmer,"stemmer-du"),e.du.stopWordFilter=e.generateStopWordFilter(" aan al alles als altijd andere ben bij daar dan dat de der deze die dit doch doen door dus een eens en er ge geen geweest haar had heb hebben heeft hem het hier hij hoe hun iemand iets ik in is ja je kan kon kunnen maar me meer men met mij mijn moet na naar niet niets nog nu of om omdat onder ons ook op over reeds te tegen toch toen tot u uit uw van veel voor want waren was wat werd wezen wie wil worden wordt zal ze zelf zich zij zijn zo zonder zou".split(" ")),e.Pipeline.registerFunction(e.du.stopWordFilter,"stopWordFilter-du")}});
--------------------------------------------------------------------------------
/site/assets/javascripts/lunr/min/lunr.fi.min.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Lunr languages, `Finnish` language
3 | * https://github.com/MihaiValentin/lunr-languages
4 | *
5 | * Copyright 2014, Mihai Valentin
6 | * http://www.mozilla.org/MPL/
7 | */
8 | /*!
9 | * based on
10 | * Snowball JavaScript Library v0.3
11 | * http://code.google.com/p/urim/
12 | * http://snowball.tartarus.org/
13 | *
14 | * Copyright 2010, Oleg Mazko
15 | * http://www.mozilla.org/MPL/
16 | */
17 |
18 | !function(i,e){"function"==typeof define&&define.amd?define(e):"object"==typeof exports?module.exports=e():e()(i.lunr)}(this,function(){return function(i){if(void 0===i)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===i.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");i.fi=function(){this.pipeline.reset(),this.pipeline.add(i.fi.trimmer,i.fi.stopWordFilter,i.fi.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(i.fi.stemmer))},i.fi.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",i.fi.trimmer=i.trimmerSupport.generateTrimmer(i.fi.wordCharacters),i.Pipeline.registerFunction(i.fi.trimmer,"trimmer-fi"),i.fi.stemmer=function(){var e=i.stemmerSupport.Among,r=i.stemmerSupport.SnowballProgram,n=new function(){function i(){f=A.limit,d=f,n()||(f=A.cursor,n()||(d=A.cursor))}function n(){for(var i;;){if(i=A.cursor,A.in_grouping(W,97,246))break;if(A.cursor=i,i>=A.limit)return!0;A.cursor++}for(A.cursor=i;!A.out_grouping(W,97,246);){if(A.cursor>=A.limit)return!0;A.cursor++}return!1}function t(){return d<=A.cursor}function s(){var i,e;if(A.cursor>=f)if(e=A.limit_backward,A.limit_backward=f,A.ket=A.cursor,i=A.find_among_b(h,10)){switch(A.bra=A.cursor,A.limit_backward=e,i){case 1:if(!A.in_grouping_b(x,97,246))return;break;case 2:if(!t())return}A.slice_del()}else A.limit_backward=e}function o(){var i,e,r;if(A.cursor>=f)if(e=A.limit_backward,A.limit_backward=f,A.ket=A.cursor,i=A.find_among_b(v,9))switch(A.bra=A.cursor,A.limit_backward=e,i){case 1:r=A.limit-A.cursor,A.eq_s_b(1,"k")||(A.cursor=A.limit-r,A.slice_del());break;case 2:A.slice_del(),A.ket=A.cursor,A.eq_s_b(3,"kse")&&(A.bra=A.cursor,A.slice_from("ksi"));break;case 3:A.slice_del();break;case 4:A.find_among_b(p,6)&&A.slice_del();break;case 5:A.find_among_b(g,6)&&A.slice_del();break;case 6:A.find_among_b(j,2)&&A.slice_del()}else A.limit_backward=e}function l(){return A.find_among_b(q,7)}function a(){return A.eq_s_b(1,"i")&&A.in_grouping_b(L,97,246)}function u(){var i,e,r;if(A.cursor>=f)if(e=A.limit_backward,A.limit_backward=f,A.ket=A.cursor,i=A.find_among_b(C,30)){switch(A.bra=A.cursor,A.limit_backward=e,i){case 1:if(!A.eq_s_b(1,"a"))return;break;case 2:case 9:if(!A.eq_s_b(1,"e"))return;break;case 3:if(!A.eq_s_b(1,"i"))return;break;case 4:if(!A.eq_s_b(1,"o"))return;break;case 5:if(!A.eq_s_b(1,"ä"))return;break;case 6:if(!A.eq_s_b(1,"ö"))return;break;case 7:if(r=A.limit-A.cursor,!l()&&(A.cursor=A.limit-r,!A.eq_s_b(2,"ie"))){A.cursor=A.limit-r;break}if(A.cursor=A.limit-r,A.cursor<=A.limit_backward){A.cursor=A.limit-r;break}A.cursor--,A.bra=A.cursor;break;case 8:if(!A.in_grouping_b(W,97,246)||!A.out_grouping_b(W,97,246))return}A.slice_del(),k=!0}else A.limit_backward=e}function c(){var i,e,r;if(A.cursor>=d)if(e=A.limit_backward,A.limit_backward=d,A.ket=A.cursor,i=A.find_among_b(P,14)){if(A.bra=A.cursor,A.limit_backward=e,1==i){if(r=A.limit-A.cursor,A.eq_s_b(2,"po"))return;A.cursor=A.limit-r}A.slice_del()}else A.limit_backward=e}function m(){var i;A.cursor>=f&&(i=A.limit_backward,A.limit_backward=f,A.ket=A.cursor,A.find_among_b(F,2)?(A.bra=A.cursor,A.limit_backward=i,A.slice_del()):A.limit_backward=i)}function w(){var i,e,r,n,t,s;if(A.cursor>=f){if(e=A.limit_backward,A.limit_backward=f,A.ket=A.cursor,A.eq_s_b(1,"t")&&(A.bra=A.cursor,r=A.limit-A.cursor,A.in_grouping_b(W,97,246)&&(A.cursor=A.limit-r,A.slice_del(),A.limit_backward=e,n=A.limit-A.cursor,A.cursor>=d&&(A.cursor=d,t=A.limit_backward,A.limit_backward=A.cursor,A.cursor=A.limit-n,A.ket=A.cursor,i=A.find_among_b(S,2))))){if(A.bra=A.cursor,A.limit_backward=t,1==i){if(s=A.limit-A.cursor,A.eq_s_b(2,"po"))return;A.cursor=A.limit-s}return void A.slice_del()}A.limit_backward=e}}function _(){var i,e,r,n;if(A.cursor>=f){for(i=A.limit_backward,A.limit_backward=f,e=A.limit-A.cursor,l()&&(A.cursor=A.limit-e,A.ket=A.cursor,A.cursor>A.limit_backward&&(A.cursor--,A.bra=A.cursor,A.slice_del())),A.cursor=A.limit-e,A.ket=A.cursor,A.in_grouping_b(y,97,228)&&(A.bra=A.cursor,A.out_grouping_b(W,97,246)&&A.slice_del()),A.cursor=A.limit-e,A.ket=A.cursor,A.eq_s_b(1,"j")&&(A.bra=A.cursor,r=A.limit-A.cursor,A.eq_s_b(1,"o")?A.slice_del():(A.cursor=A.limit-r,A.eq_s_b(1,"u")&&A.slice_del())),A.cursor=A.limit-e,A.ket=A.cursor,A.eq_s_b(1,"o")&&(A.bra=A.cursor,A.eq_s_b(1,"j")&&A.slice_del()),A.cursor=A.limit-e,A.limit_backward=i;;){if(n=A.limit-A.cursor,A.out_grouping_b(W,97,246)){A.cursor=A.limit-n;break}if(A.cursor=A.limit-n,A.cursor<=A.limit_backward)return;A.cursor--}A.ket=A.cursor,A.cursor>A.limit_backward&&(A.cursor--,A.bra=A.cursor,b=A.slice_to(),A.eq_v_b(b)&&A.slice_del())}}var k,b,d,f,h=[new e("pa",-1,1),new e("sti",-1,2),new e("kaan",-1,1),new e("han",-1,1),new e("kin",-1,1),new e("hän",-1,1),new e("kään",-1,1),new e("ko",-1,1),new e("pä",-1,1),new e("kö",-1,1)],p=[new e("lla",-1,-1),new e("na",-1,-1),new e("ssa",-1,-1),new e("ta",-1,-1),new e("lta",3,-1),new e("sta",3,-1)],g=[new e("llä",-1,-1),new e("nä",-1,-1),new e("ssä",-1,-1),new e("tä",-1,-1),new e("ltä",3,-1),new e("stä",3,-1)],j=[new e("lle",-1,-1),new e("ine",-1,-1)],v=[new e("nsa",-1,3),new e("mme",-1,3),new e("nne",-1,3),new e("ni",-1,2),new e("si",-1,1),new e("an",-1,4),new e("en",-1,6),new e("än",-1,5),new e("nsä",-1,3)],q=[new e("aa",-1,-1),new e("ee",-1,-1),new e("ii",-1,-1),new e("oo",-1,-1),new e("uu",-1,-1),new e("ää",-1,-1),new e("öö",-1,-1)],C=[new e("a",-1,8),new e("lla",0,-1),new e("na",0,-1),new e("ssa",0,-1),new e("ta",0,-1),new e("lta",4,-1),new e("sta",4,-1),new e("tta",4,9),new e("lle",-1,-1),new e("ine",-1,-1),new e("ksi",-1,-1),new e("n",-1,7),new e("han",11,1),new e("den",11,-1,a),new e("seen",11,-1,l),new e("hen",11,2),new e("tten",11,-1,a),new e("hin",11,3),new e("siin",11,-1,a),new e("hon",11,4),new e("hän",11,5),new e("hön",11,6),new e("ä",-1,8),new e("llä",22,-1),new e("nä",22,-1),new e("ssä",22,-1),new e("tä",22,-1),new e("ltä",26,-1),new e("stä",26,-1),new e("ttä",26,9)],P=[new e("eja",-1,-1),new e("mma",-1,1),new e("imma",1,-1),new e("mpa",-1,1),new e("impa",3,-1),new e("mmi",-1,1),new e("immi",5,-1),new e("mpi",-1,1),new e("impi",7,-1),new e("ejä",-1,-1),new e("mmä",-1,1),new e("immä",10,-1),new e("mpä",-1,1),new e("impä",12,-1)],F=[new e("i",-1,-1),new e("j",-1,-1)],S=[new e("mma",-1,1),new e("imma",0,-1)],y=[17,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8],W=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32],L=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32],x=[17,97,24,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32],A=new r;this.setCurrent=function(i){A.setCurrent(i)},this.getCurrent=function(){return A.getCurrent()},this.stem=function(){var e=A.cursor;return i(),k=!1,A.limit_backward=e,A.cursor=A.limit,s(),A.cursor=A.limit,o(),A.cursor=A.limit,u(),A.cursor=A.limit,c(),A.cursor=A.limit,k?(m(),A.cursor=A.limit):(A.cursor=A.limit,w(),A.cursor=A.limit),_(),!0}};return function(i){return"function"==typeof i.update?i.update(function(i){return n.setCurrent(i),n.stem(),n.getCurrent()}):(n.setCurrent(i),n.stem(),n.getCurrent())}}(),i.Pipeline.registerFunction(i.fi.stemmer,"stemmer-fi"),i.fi.stopWordFilter=i.generateStopWordFilter("ei eivät emme en et ette että he heidän heidät heihin heille heillä heiltä heissä heistä heitä hän häneen hänelle hänellä häneltä hänen hänessä hänestä hänet häntä itse ja johon joiden joihin joiksi joilla joille joilta joina joissa joista joita joka joksi jolla jolle jolta jona jonka jos jossa josta jota jotka kanssa keiden keihin keiksi keille keillä keiltä keinä keissä keistä keitä keneen keneksi kenelle kenellä keneltä kenen kenenä kenessä kenestä kenet ketkä ketkä ketä koska kuin kuka kun me meidän meidät meihin meille meillä meiltä meissä meistä meitä mihin miksi mikä mille millä miltä minkä minkä minua minulla minulle minulta minun minussa minusta minut minuun minä minä missä mistä mitkä mitä mukaan mutta ne niiden niihin niiksi niille niillä niiltä niin niin niinä niissä niistä niitä noiden noihin noiksi noilla noille noilta noin noina noissa noista noita nuo nyt näiden näihin näiksi näille näillä näiltä näinä näissä näistä näitä nämä ole olemme olen olet olette oli olimme olin olisi olisimme olisin olisit olisitte olisivat olit olitte olivat olla olleet ollut on ovat poikki se sekä sen siihen siinä siitä siksi sille sillä sillä siltä sinua sinulla sinulle sinulta sinun sinussa sinusta sinut sinuun sinä sinä sitä tai te teidän teidät teihin teille teillä teiltä teissä teistä teitä tuo tuohon tuoksi tuolla tuolle tuolta tuon tuona tuossa tuosta tuota tähän täksi tälle tällä tältä tämä tämän tänä tässä tästä tätä vaan vai vaikka yli".split(" ")),i.Pipeline.registerFunction(i.fi.stopWordFilter,"stopWordFilter-fi")}});
--------------------------------------------------------------------------------
/site/assets/javascripts/lunr/min/lunr.he.min.js:
--------------------------------------------------------------------------------
1 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.he=function(){this.pipeline.reset(),this.pipeline.add(e.he.trimmer,e.he.stopWordFilter,e.he.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.he.stemmer))},e.he.wordCharacters="֑-״א-תa-zA-Za-zA-Z0-90-9",e.he.trimmer=e.trimmerSupport.generateTrimmer(e.he.wordCharacters),e.Pipeline.registerFunction(e.he.trimmer,"trimmer-he"),e.he.stemmer=function(){var e=this;return e.result=!1,e.preRemoved=!1,e.sufRemoved=!1,e.pre={pre1:"ה ו י ת",pre2:"ב כ ל מ ש כש",pre3:"הב הכ הל המ הש בש לכ",pre4:"וב וכ ול ומ וש",pre5:"מה שה כל",pre6:"מב מכ מל ממ מש",pre7:"בה בו בי בת כה כו כי כת לה לו לי לת",pre8:"ובה ובו ובי ובת וכה וכו וכי וכת ולה ולו ולי ולת"},e.suf={suf1:"ך כ ם ן נ",suf2:"ים ות וך וכ ום ון ונ הם הן יכ יך ינ ים",suf3:"תי תך תכ תם תן תנ",suf4:"ותי ותך ותכ ותם ותן ותנ",suf5:"נו כם כן הם הן",suf6:"ונו וכם וכן והם והן",suf7:"תכם תכן תנו תהם תהן",suf8:"הוא היא הם הן אני אתה את אנו אתם אתן",suf9:"ני נו כי כו כם כן תי תך תכ תם תן",suf10:"י ך כ ם ן נ ת"},e.patterns=JSON.parse('{"hebrewPatterns": [{"pt1": [{"c": "ה", "l": 0}]}, {"pt2": [{"c": "ו", "l": 0}]}, {"pt3": [{"c": "י", "l": 0}]}, {"pt4": [{"c": "ת", "l": 0}]}, {"pt5": [{"c": "מ", "l": 0}]}, {"pt6": [{"c": "ל", "l": 0}]}, {"pt7": [{"c": "ב", "l": 0}]}, {"pt8": [{"c": "כ", "l": 0}]}, {"pt9": [{"c": "ש", "l": 0}]}, {"pt10": [{"c": "כש", "l": 0}]}, {"pt11": [{"c": "בה", "l": 0}]}, {"pt12": [{"c": "וב", "l": 0}]}, {"pt13": [{"c": "וכ", "l": 0}]}, {"pt14": [{"c": "ול", "l": 0}]}, {"pt15": [{"c": "ומ", "l": 0}]}, {"pt16": [{"c": "וש", "l": 0}]}, {"pt17": [{"c": "הב", "l": 0}]}, {"pt18": [{"c": "הכ", "l": 0}]}, {"pt19": [{"c": "הל", "l": 0}]}, {"pt20": [{"c": "המ", "l": 0}]}, {"pt21": [{"c": "הש", "l": 0}]}, {"pt22": [{"c": "מה", "l": 0}]}, {"pt23": [{"c": "שה", "l": 0}]}, {"pt24": [{"c": "כל", "l": 0}]}]}'),e.execArray=["cleanWord","removeDiacritics","removeStopWords","normalizeHebrewCharacters"],e.stem=function(){var r=0;for(e.result=!1,e.preRemoved=!1,e.sufRemoved=!1;r=0)return!0},e.normalizeHebrewCharacters=function(){return e.word=e.word.replace("ך","כ"),e.word=e.word.replace("ם","מ"),e.word=e.word.replace("ן","נ"),e.word=e.word.replace("ף","פ"),e.word=e.word.replace("ץ","צ"),!1},function(r){return"function"==typeof r.update?r.update(function(r){return e.setCurrent(r),e.stem(),e.getCurrent()}):(e.setCurrent(r),e.stem(),e.getCurrent())}}(),e.Pipeline.registerFunction(e.he.stemmer,"stemmer-he"),e.he.stopWordFilter=e.generateStopWordFilter("אבל או אולי אותו אותי אותך אותם אותן אותנו אז אחר אחרות אחרי אחריכן אחרים אחרת אי איזה איך אין איפה אל אלה אלו אם אנחנו אני אף אפשר את אתה אתכם אתכן אתם אתן באיזה באיזו בגלל בין בלבד בעבור בעזרת בכל בכן בלי במידה במקום שבו ברוב בשביל בשעה ש בתוך גם דרך הוא היא היה היי היכן היתה היתי הם הן הנה הסיבה שבגללה הרי ואילו ואת זאת זה זות יהיה יוכל יוכלו יותר מדי יכול יכולה יכולות יכולים יכל יכלה יכלו יש כאן כאשר כולם כולן כזה כי כיצד כך כל כלל כמו כן כפי כש לא לאו לאיזותך לאן לבין לה להיות להם להן לו לזה לזות לי לך לכם לכן למה למעלה למעלה מ למטה למטה מ למעט למקום שבו למרות לנו לעבר לעיכן לפיכך לפני מאד מאחורי מאיזו סיבה מאין מאיפה מבלי מבעד מדוע מה מהיכן מול מחוץ מי מידע מכאן מכל מכן מלבד מן מנין מסוגל מעט מעטים מעל מצד מקום בו מתחת מתי נגד נגר נו עד עז על עלי עליו עליה עליהם עליך עלינו עם עצמה עצמהם עצמהן עצמו עצמי עצמם עצמן עצמנו פה רק שוב של שלה שלהם שלהן שלו שלי שלך שלכה שלכם שלכן שלנו שם תהיה תחת".split(" ")),e.Pipeline.registerFunction(e.he.stopWordFilter,"stopWordFilter-he")}});
--------------------------------------------------------------------------------
/site/assets/javascripts/lunr/min/lunr.hi.min.js:
--------------------------------------------------------------------------------
1 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.hi=function(){this.pipeline.reset(),this.pipeline.add(e.hi.trimmer,e.hi.stopWordFilter,e.hi.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.hi.stemmer))},e.hi.wordCharacters="ऀ-ःऄ-एऐ-टठ-यर-िी-ॏॐ-य़ॠ-९॰-ॿa-zA-Za-zA-Z0-90-9",e.hi.trimmer=e.trimmerSupport.generateTrimmer(e.hi.wordCharacters),e.Pipeline.registerFunction(e.hi.trimmer,"trimmer-hi"),e.hi.stopWordFilter=e.generateStopWordFilter("अत अपना अपनी अपने अभी अंदर आदि आप इत्यादि इन इनका इन्हीं इन्हें इन्हों इस इसका इसकी इसके इसमें इसी इसे उन उनका उनकी उनके उनको उन्हीं उन्हें उन्हों उस उसके उसी उसे एक एवं एस ऐसे और कई कर करता करते करना करने करें कहते कहा का काफ़ी कि कितना किन्हें किन्हों किया किर किस किसी किसे की कुछ कुल के को कोई कौन कौनसा गया घर जब जहाँ जा जितना जिन जिन्हें जिन्हों जिस जिसे जीधर जैसा जैसे जो तक तब तरह तिन तिन्हें तिन्हों तिस तिसे तो था थी थे दबारा दिया दुसरा दूसरे दो द्वारा न नके नहीं ना निहायत नीचे ने पर पहले पूरा पे फिर बनी बही बहुत बाद बाला बिलकुल भी भीतर मगर मानो मे में यदि यह यहाँ यही या यिह ये रखें रहा रहे ऱ्वासा लिए लिये लेकिन व वग़ैरह वर्ग वह वहाँ वहीं वाले वुह वे वो सकता सकते सबसे सभी साथ साबुत साभ सारा से सो संग ही हुआ हुई हुए है हैं हो होता होती होते होना होने".split(" ")),e.hi.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var r=e.wordcut;r.init(),e.hi.tokenizer=function(i){if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(r){return isLunr2?new e.Token(r.toLowerCase()):r.toLowerCase()});var t=i.toString().toLowerCase().replace(/^\s+/,"");return r.cut(t).split("|")},e.Pipeline.registerFunction(e.hi.stemmer,"stemmer-hi"),e.Pipeline.registerFunction(e.hi.stopWordFilter,"stopWordFilter-hi")}});
--------------------------------------------------------------------------------
/site/assets/javascripts/lunr/min/lunr.hu.min.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Lunr languages, `Hungarian` language
3 | * https://github.com/MihaiValentin/lunr-languages
4 | *
5 | * Copyright 2014, Mihai Valentin
6 | * http://www.mozilla.org/MPL/
7 | */
8 | /*!
9 | * based on
10 | * Snowball JavaScript Library v0.3
11 | * http://code.google.com/p/urim/
12 | * http://snowball.tartarus.org/
13 | *
14 | * Copyright 2010, Oleg Mazko
15 | * http://www.mozilla.org/MPL/
16 | */
17 |
18 | !function(e,n){"function"==typeof define&&define.amd?define(n):"object"==typeof exports?module.exports=n():n()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.hu=function(){this.pipeline.reset(),this.pipeline.add(e.hu.trimmer,e.hu.stopWordFilter,e.hu.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.hu.stemmer))},e.hu.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.hu.trimmer=e.trimmerSupport.generateTrimmer(e.hu.wordCharacters),e.Pipeline.registerFunction(e.hu.trimmer,"trimmer-hu"),e.hu.stemmer=function(){var n=e.stemmerSupport.Among,r=e.stemmerSupport.SnowballProgram,i=new function(){function e(){var e,n=L.cursor;if(d=L.limit,L.in_grouping(W,97,252))for(;;){if(e=L.cursor,L.out_grouping(W,97,252))return L.cursor=e,L.find_among(g,8)||(L.cursor=e,e=L.limit)return void(d=e);L.cursor++}if(L.cursor=n,L.out_grouping(W,97,252)){for(;!L.in_grouping(W,97,252);){if(L.cursor>=L.limit)return;L.cursor++}d=L.cursor}}function i(){return d<=L.cursor}function a(){var e;if(L.ket=L.cursor,(e=L.find_among_b(h,2))&&(L.bra=L.cursor,i()))switch(e){case 1:L.slice_from("a");break;case 2:L.slice_from("e")}}function t(){var e=L.limit-L.cursor;return!!L.find_among_b(p,23)&&(L.cursor=L.limit-e,!0)}function s(){if(L.cursor>L.limit_backward){L.cursor--,L.ket=L.cursor;var e=L.cursor-1;L.limit_backward<=e&&e<=L.limit&&(L.cursor=e,L.bra=e,L.slice_del())}}function c(){var e;if(L.ket=L.cursor,(e=L.find_among_b(_,2))&&(L.bra=L.cursor,i())){if((1==e||2==e)&&!t())return;L.slice_del(),s()}}function o(){L.ket=L.cursor,L.find_among_b(v,44)&&(L.bra=L.cursor,i()&&(L.slice_del(),a()))}function w(){var e;if(L.ket=L.cursor,(e=L.find_among_b(z,3))&&(L.bra=L.cursor,i()))switch(e){case 1:L.slice_from("e");break;case 2:case 3:L.slice_from("a")}}function l(){var e;if(L.ket=L.cursor,(e=L.find_among_b(y,6))&&(L.bra=L.cursor,i()))switch(e){case 1:case 2:L.slice_del();break;case 3:L.slice_from("a");break;case 4:L.slice_from("e")}}function u(){var e;if(L.ket=L.cursor,(e=L.find_among_b(j,2))&&(L.bra=L.cursor,i())){if((1==e||2==e)&&!t())return;L.slice_del(),s()}}function m(){var e;if(L.ket=L.cursor,(e=L.find_among_b(C,7))&&(L.bra=L.cursor,i()))switch(e){case 1:L.slice_from("a");break;case 2:L.slice_from("e");break;case 3:case 4:case 5:case 6:case 7:L.slice_del()}}function k(){var e;if(L.ket=L.cursor,(e=L.find_among_b(P,12))&&(L.bra=L.cursor,i()))switch(e){case 1:case 4:case 7:case 9:L.slice_del();break;case 2:case 5:case 8:L.slice_from("e");break;case 3:case 6:L.slice_from("a")}}function f(){var e;if(L.ket=L.cursor,(e=L.find_among_b(F,31))&&(L.bra=L.cursor,i()))switch(e){case 1:case 4:case 7:case 8:case 9:case 12:case 13:case 16:case 17:case 18:L.slice_del();break;case 2:case 5:case 10:case 14:case 19:L.slice_from("a");break;case 3:case 6:case 11:case 15:case 20:L.slice_from("e")}}function b(){var e;if(L.ket=L.cursor,(e=L.find_among_b(S,42))&&(L.bra=L.cursor,i()))switch(e){case 1:case 4:case 5:case 6:case 9:case 10:case 11:case 14:case 15:case 16:case 17:case 20:case 21:case 24:case 25:case 26:case 29:L.slice_del();break;case 2:case 7:case 12:case 18:case 22:case 27:L.slice_from("a");break;case 3:case 8:case 13:case 19:case 23:case 28:L.slice_from("e")}}var d,g=[new n("cs",-1,-1),new n("dzs",-1,-1),new n("gy",-1,-1),new n("ly",-1,-1),new n("ny",-1,-1),new n("sz",-1,-1),new n("ty",-1,-1),new n("zs",-1,-1)],h=[new n("á",-1,1),new n("é",-1,2)],p=[new n("bb",-1,-1),new n("cc",-1,-1),new n("dd",-1,-1),new n("ff",-1,-1),new n("gg",-1,-1),new n("jj",-1,-1),new n("kk",-1,-1),new n("ll",-1,-1),new n("mm",-1,-1),new n("nn",-1,-1),new n("pp",-1,-1),new n("rr",-1,-1),new n("ccs",-1,-1),new n("ss",-1,-1),new n("zzs",-1,-1),new n("tt",-1,-1),new n("vv",-1,-1),new n("ggy",-1,-1),new n("lly",-1,-1),new n("nny",-1,-1),new n("tty",-1,-1),new n("ssz",-1,-1),new n("zz",-1,-1)],_=[new n("al",-1,1),new n("el",-1,2)],v=[new n("ba",-1,-1),new n("ra",-1,-1),new n("be",-1,-1),new n("re",-1,-1),new n("ig",-1,-1),new n("nak",-1,-1),new n("nek",-1,-1),new n("val",-1,-1),new n("vel",-1,-1),new n("ul",-1,-1),new n("nál",-1,-1),new n("nél",-1,-1),new n("ból",-1,-1),new n("ról",-1,-1),new n("tól",-1,-1),new n("bõl",-1,-1),new n("rõl",-1,-1),new n("tõl",-1,-1),new n("ül",-1,-1),new n("n",-1,-1),new n("an",19,-1),new n("ban",20,-1),new n("en",19,-1),new n("ben",22,-1),new n("képpen",22,-1),new n("on",19,-1),new n("ön",19,-1),new n("képp",-1,-1),new n("kor",-1,-1),new n("t",-1,-1),new n("at",29,-1),new n("et",29,-1),new n("ként",29,-1),new n("anként",32,-1),new n("enként",32,-1),new n("onként",32,-1),new n("ot",29,-1),new n("ért",29,-1),new n("öt",29,-1),new n("hez",-1,-1),new n("hoz",-1,-1),new n("höz",-1,-1),new n("vá",-1,-1),new n("vé",-1,-1)],z=[new n("án",-1,2),new n("én",-1,1),new n("ánként",-1,3)],y=[new n("stul",-1,2),new n("astul",0,1),new n("ástul",0,3),new n("stül",-1,2),new n("estül",3,1),new n("éstül",3,4)],j=[new n("á",-1,1),new n("é",-1,2)],C=[new n("k",-1,7),new n("ak",0,4),new n("ek",0,6),new n("ok",0,5),new n("ák",0,1),new n("ék",0,2),new n("ök",0,3)],P=[new n("éi",-1,7),new n("áéi",0,6),new n("ééi",0,5),new n("é",-1,9),new n("ké",3,4),new n("aké",4,1),new n("eké",4,1),new n("oké",4,1),new n("áké",4,3),new n("éké",4,2),new n("öké",4,1),new n("éé",3,8)],F=[new n("a",-1,18),new n("ja",0,17),new n("d",-1,16),new n("ad",2,13),new n("ed",2,13),new n("od",2,13),new n("ád",2,14),new n("éd",2,15),new n("öd",2,13),new n("e",-1,18),new n("je",9,17),new n("nk",-1,4),new n("unk",11,1),new n("ánk",11,2),new n("énk",11,3),new n("ünk",11,1),new n("uk",-1,8),new n("juk",16,7),new n("ájuk",17,5),new n("ük",-1,8),new n("jük",19,7),new n("éjük",20,6),new n("m",-1,12),new n("am",22,9),new n("em",22,9),new n("om",22,9),new n("ám",22,10),new n("ém",22,11),new n("o",-1,18),new n("á",-1,19),new n("é",-1,20)],S=[new n("id",-1,10),new n("aid",0,9),new n("jaid",1,6),new n("eid",0,9),new n("jeid",3,6),new n("áid",0,7),new n("éid",0,8),new n("i",-1,15),new n("ai",7,14),new n("jai",8,11),new n("ei",7,14),new n("jei",10,11),new n("ái",7,12),new n("éi",7,13),new n("itek",-1,24),new n("eitek",14,21),new n("jeitek",15,20),new n("éitek",14,23),new n("ik",-1,29),new n("aik",18,26),new n("jaik",19,25),new n("eik",18,26),new n("jeik",21,25),new n("áik",18,27),new n("éik",18,28),new n("ink",-1,20),new n("aink",25,17),new n("jaink",26,16),new n("eink",25,17),new n("jeink",28,16),new n("áink",25,18),new n("éink",25,19),new n("aitok",-1,21),new n("jaitok",32,20),new n("áitok",-1,22),new n("im",-1,5),new n("aim",35,4),new n("jaim",36,1),new n("eim",35,4),new n("jeim",38,1),new n("áim",35,2),new n("éim",35,3)],W=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,1,17,52,14],L=new r;this.setCurrent=function(e){L.setCurrent(e)},this.getCurrent=function(){return L.getCurrent()},this.stem=function(){var n=L.cursor;return e(),L.limit_backward=n,L.cursor=L.limit,c(),L.cursor=L.limit,o(),L.cursor=L.limit,w(),L.cursor=L.limit,l(),L.cursor=L.limit,u(),L.cursor=L.limit,k(),L.cursor=L.limit,f(),L.cursor=L.limit,b(),L.cursor=L.limit,m(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.hu.stemmer,"stemmer-hu"),e.hu.stopWordFilter=e.generateStopWordFilter("a abban ahhoz ahogy ahol aki akik akkor alatt amely amelyek amelyekben amelyeket amelyet amelynek ami amikor amit amolyan amíg annak arra arról az azok azon azonban azt aztán azután azzal azért be belül benne bár cikk cikkek cikkeket csak de e ebben eddig egy egyes egyetlen egyik egyre egyéb egész ehhez ekkor el ellen elsõ elég elõ elõször elõtt emilyen ennek erre ez ezek ezen ezt ezzel ezért fel felé hanem hiszen hogy hogyan igen ill ill. illetve ilyen ilyenkor ismét ison itt jobban jó jól kell kellett keressünk keresztül ki kívül között közül legalább legyen lehet lehetett lenne lenni lesz lett maga magát majd majd meg mellett mely melyek mert mi mikor milyen minden mindenki mindent mindig mint mintha mit mivel miért most már más másik még míg nagy nagyobb nagyon ne nekem neki nem nincs néha néhány nélkül olyan ott pedig persze rá s saját sem semmi sok sokat sokkal szemben szerint szinte számára talán tehát teljes tovább továbbá több ugyanis utolsó után utána vagy vagyis vagyok valaki valami valamint való van vannak vele vissza viszont volna volt voltak voltam voltunk által általában át én éppen és így õ õk õket össze úgy új újabb újra".split(" ")),e.Pipeline.registerFunction(e.hu.stopWordFilter,"stopWordFilter-hu")}});
--------------------------------------------------------------------------------
/site/assets/javascripts/lunr/min/lunr.hy.min.js:
--------------------------------------------------------------------------------
1 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.hy=function(){this.pipeline.reset(),this.pipeline.add(e.hy.trimmer,e.hy.stopWordFilter)},e.hy.wordCharacters="[A-Za-z-֏ff-ﭏ]",e.hy.trimmer=e.trimmerSupport.generateTrimmer(e.hy.wordCharacters),e.Pipeline.registerFunction(e.hy.trimmer,"trimmer-hy"),e.hy.stopWordFilter=e.generateStopWordFilter("դու և եք էիր էիք հետո նաև նրանք որը վրա է որ պիտի են այս մեջ ն իր ու ի այդ որոնք այն կամ էր մի ես համար այլ իսկ էին ենք հետ ին թ էինք մենք նրա նա դուք եմ էի ըստ որպես ում".split(" ")),e.Pipeline.registerFunction(e.hy.stopWordFilter,"stopWordFilter-hy"),e.hy.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}(),e.Pipeline.registerFunction(e.hy.stemmer,"stemmer-hy")}});
--------------------------------------------------------------------------------
/site/assets/javascripts/lunr/min/lunr.ja.min.js:
--------------------------------------------------------------------------------
1 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r="2"==e.version[0];e.ja=function(){this.pipeline.reset(),this.pipeline.add(e.ja.trimmer,e.ja.stopWordFilter,e.ja.stemmer),r?this.tokenizer=e.ja.tokenizer:(e.tokenizer&&(e.tokenizer=e.ja.tokenizer),this.tokenizerFn&&(this.tokenizerFn=e.ja.tokenizer))};var t=new e.TinySegmenter;e.ja.tokenizer=function(i){var n,o,s,p,a,u,m,l,c,f;if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(t){return r?new e.Token(t.toLowerCase()):t.toLowerCase()});for(o=i.toString().toLowerCase().replace(/^\s+/,""),n=o.length-1;n>=0;n--)if(/\S/.test(o.charAt(n))){o=o.substring(0,n+1);break}for(a=[],s=o.length,c=0,l=0;c<=s;c++)if(u=o.charAt(c),m=c-l,u.match(/\s/)||c==s){if(m>0)for(p=t.segment(o.slice(l,c)).filter(function(e){return!!e}),f=l,n=0;n=C.limit)break;C.cursor++;continue}break}for(C.cursor=o,C.bra=o,C.eq_s(1,"y")?(C.ket=C.cursor,C.slice_from("Y")):C.cursor=o;;)if(e=C.cursor,C.in_grouping(q,97,232)){if(i=C.cursor,C.bra=i,C.eq_s(1,"i"))C.ket=C.cursor,C.in_grouping(q,97,232)&&(C.slice_from("I"),C.cursor=e);else if(C.cursor=i,C.eq_s(1,"y"))C.ket=C.cursor,C.slice_from("Y"),C.cursor=e;else if(n(e))break}else if(n(e))break}function n(r){return C.cursor=r,r>=C.limit||(C.cursor++,!1)}function o(){_=C.limit,d=_,t()||(_=C.cursor,_<3&&(_=3),t()||(d=C.cursor))}function t(){for(;!C.in_grouping(q,97,232);){if(C.cursor>=C.limit)return!0;C.cursor++}for(;!C.out_grouping(q,97,232);){if(C.cursor>=C.limit)return!0;C.cursor++}return!1}function s(){for(var r;;)if(C.bra=C.cursor,r=C.find_among(p,3))switch(C.ket=C.cursor,r){case 1:C.slice_from("y");break;case 2:C.slice_from("i");break;case 3:if(C.cursor>=C.limit)return;C.cursor++}}function u(){return _<=C.cursor}function c(){return d<=C.cursor}function a(){var r=C.limit-C.cursor;C.find_among_b(g,3)&&(C.cursor=C.limit-r,C.ket=C.cursor,C.cursor>C.limit_backward&&(C.cursor--,C.bra=C.cursor,C.slice_del()))}function l(){var r;w=!1,C.ket=C.cursor,C.eq_s_b(1,"e")&&(C.bra=C.cursor,u()&&(r=C.limit-C.cursor,C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-r,C.slice_del(),w=!0,a())))}function m(){var r;u()&&(r=C.limit-C.cursor,C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-r,C.eq_s_b(3,"gem")||(C.cursor=C.limit-r,C.slice_del(),a())))}function f(){var r,e,i,n,o,t,s=C.limit-C.cursor;if(C.ket=C.cursor,r=C.find_among_b(h,5))switch(C.bra=C.cursor,r){case 1:u()&&C.slice_from("heid");break;case 2:m();break;case 3:u()&&C.out_grouping_b(j,97,232)&&C.slice_del()}if(C.cursor=C.limit-s,l(),C.cursor=C.limit-s,C.ket=C.cursor,C.eq_s_b(4,"heid")&&(C.bra=C.cursor,c()&&(e=C.limit-C.cursor,C.eq_s_b(1,"c")||(C.cursor=C.limit-e,C.slice_del(),C.ket=C.cursor,C.eq_s_b(2,"en")&&(C.bra=C.cursor,m())))),C.cursor=C.limit-s,C.ket=C.cursor,r=C.find_among_b(k,6))switch(C.bra=C.cursor,r){case 1:if(c()){if(C.slice_del(),i=C.limit-C.cursor,C.ket=C.cursor,C.eq_s_b(2,"ig")&&(C.bra=C.cursor,c()&&(n=C.limit-C.cursor,!C.eq_s_b(1,"e")))){C.cursor=C.limit-n,C.slice_del();break}C.cursor=C.limit-i,a()}break;case 2:c()&&(o=C.limit-C.cursor,C.eq_s_b(1,"e")||(C.cursor=C.limit-o,C.slice_del()));break;case 3:c()&&(C.slice_del(),l());break;case 4:c()&&C.slice_del();break;case 5:c()&&w&&C.slice_del()}C.cursor=C.limit-s,C.out_grouping_b(z,73,232)&&(t=C.limit-C.cursor,C.find_among_b(v,4)&&C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-t,C.ket=C.cursor,C.cursor>C.limit_backward&&(C.cursor--,C.bra=C.cursor,C.slice_del())))}var d,_,w,b=[new e("",-1,6),new e("á",0,1),new e("ä",0,1),new e("é",0,2),new e("ë",0,2),new e("í",0,3),new e("ï",0,3),new e("ó",0,4),new e("ö",0,4),new e("ú",0,5),new e("ü",0,5)],p=[new e("",-1,3),new e("I",0,2),new e("Y",0,1)],g=[new e("dd",-1,-1),new e("kk",-1,-1),new e("tt",-1,-1)],h=[new e("ene",-1,2),new e("se",-1,3),new e("en",-1,2),new e("heden",2,1),new e("s",-1,3)],k=[new e("end",-1,1),new e("ig",-1,2),new e("ing",-1,1),new e("lijk",-1,3),new e("baar",-1,4),new e("bar",-1,5)],v=[new e("aa",-1,-1),new e("ee",-1,-1),new e("oo",-1,-1),new e("uu",-1,-1)],q=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],z=[1,0,0,17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],j=[17,67,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],C=new i;this.setCurrent=function(r){C.setCurrent(r)},this.getCurrent=function(){return C.getCurrent()},this.stem=function(){var e=C.cursor;return r(),C.cursor=e,o(),C.limit_backward=e,C.cursor=C.limit,f(),C.cursor=C.limit_backward,s(),!0}};return function(r){return"function"==typeof r.update?r.update(function(r){return n.setCurrent(r),n.stem(),n.getCurrent()}):(n.setCurrent(r),n.stem(),n.getCurrent())}}(),r.Pipeline.registerFunction(r.nl.stemmer,"stemmer-nl"),r.nl.stopWordFilter=r.generateStopWordFilter(" aan al alles als altijd andere ben bij daar dan dat de der deze die dit doch doen door dus een eens en er ge geen geweest haar had heb hebben heeft hem het hier hij hoe hun iemand iets ik in is ja je kan kon kunnen maar me meer men met mij mijn moet na naar niet niets nog nu of om omdat onder ons ook op over reeds te tegen toch toen tot u uit uw van veel voor want waren was wat werd wezen wie wil worden wordt zal ze zelf zich zij zijn zo zonder zou".split(" ")),r.Pipeline.registerFunction(r.nl.stopWordFilter,"stopWordFilter-nl")}});
--------------------------------------------------------------------------------
/site/assets/javascripts/lunr/min/lunr.no.min.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Lunr languages, `Norwegian` language
3 | * https://github.com/MihaiValentin/lunr-languages
4 | *
5 | * Copyright 2014, Mihai Valentin
6 | * http://www.mozilla.org/MPL/
7 | */
8 | /*!
9 | * based on
10 | * Snowball JavaScript Library v0.3
11 | * http://code.google.com/p/urim/
12 | * http://snowball.tartarus.org/
13 | *
14 | * Copyright 2010, Oleg Mazko
15 | * http://www.mozilla.org/MPL/
16 | */
17 |
18 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.no=function(){this.pipeline.reset(),this.pipeline.add(e.no.trimmer,e.no.stopWordFilter,e.no.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.no.stemmer))},e.no.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.no.trimmer=e.trimmerSupport.generateTrimmer(e.no.wordCharacters),e.Pipeline.registerFunction(e.no.trimmer,"trimmer-no"),e.no.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,i=new function(){function e(){var e,r=w.cursor+3;if(a=w.limit,0<=r||r<=w.limit){for(s=r;;){if(e=w.cursor,w.in_grouping(d,97,248)){w.cursor=e;break}if(e>=w.limit)return;w.cursor=e+1}for(;!w.out_grouping(d,97,248);){if(w.cursor>=w.limit)return;w.cursor++}a=w.cursor,a=a&&(r=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,e=w.find_among_b(m,29),w.limit_backward=r,e))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:n=w.limit-w.cursor,w.in_grouping_b(c,98,122)?w.slice_del():(w.cursor=w.limit-n,w.eq_s_b(1,"k")&&w.out_grouping_b(d,97,248)&&w.slice_del());break;case 3:w.slice_from("er")}}function t(){var e,r=w.limit-w.cursor;w.cursor>=a&&(e=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,w.find_among_b(u,2)?(w.bra=w.cursor,w.limit_backward=e,w.cursor=w.limit-r,w.cursor>w.limit_backward&&(w.cursor--,w.bra=w.cursor,w.slice_del())):w.limit_backward=e)}function o(){var e,r;w.cursor>=a&&(r=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,e=w.find_among_b(l,11),e?(w.bra=w.cursor,w.limit_backward=r,1==e&&w.slice_del()):w.limit_backward=r)}var s,a,m=[new r("a",-1,1),new r("e",-1,1),new r("ede",1,1),new r("ande",1,1),new r("ende",1,1),new r("ane",1,1),new r("ene",1,1),new r("hetene",6,1),new r("erte",1,3),new r("en",-1,1),new r("heten",9,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",12,1),new r("s",-1,2),new r("as",14,1),new r("es",14,1),new r("edes",16,1),new r("endes",16,1),new r("enes",16,1),new r("hetenes",19,1),new r("ens",14,1),new r("hetens",21,1),new r("ers",14,1),new r("ets",14,1),new r("et",-1,1),new r("het",25,1),new r("ert",-1,3),new r("ast",-1,1)],u=[new r("dt",-1,-1),new r("vt",-1,-1)],l=[new r("leg",-1,1),new r("eleg",0,1),new r("ig",-1,1),new r("eig",2,1),new r("lig",2,1),new r("elig",4,1),new r("els",-1,1),new r("lov",-1,1),new r("elov",7,1),new r("slov",7,1),new r("hetslov",9,1)],d=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],c=[119,125,149,1],w=new n;this.setCurrent=function(e){w.setCurrent(e)},this.getCurrent=function(){return w.getCurrent()},this.stem=function(){var r=w.cursor;return e(),w.limit_backward=r,w.cursor=w.limit,i(),w.cursor=w.limit,t(),w.cursor=w.limit,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.no.stemmer,"stemmer-no"),e.no.stopWordFilter=e.generateStopWordFilter("alle at av bare begge ble blei bli blir blitt både båe da de deg dei deim deira deires dem den denne der dere deres det dette di din disse ditt du dykk dykkar då eg ein eit eitt eller elles en enn er et ett etter for fordi fra før ha hadde han hans har hennar henne hennes her hjå ho hoe honom hoss hossen hun hva hvem hver hvilke hvilken hvis hvor hvordan hvorfor i ikke ikkje ikkje ingen ingi inkje inn inni ja jeg kan kom korleis korso kun kunne kva kvar kvarhelst kven kvi kvifor man mange me med medan meg meget mellom men mi min mine mitt mot mykje ned no noe noen noka noko nokon nokor nokre nå når og også om opp oss over på samme seg selv si si sia sidan siden sin sine sitt sjøl skal skulle slik so som som somme somt så sånn til um upp ut uten var vart varte ved vere verte vi vil ville vore vors vort vår være være vært å".split(" ")),e.Pipeline.registerFunction(e.no.stopWordFilter,"stopWordFilter-no")}});
--------------------------------------------------------------------------------
/site/assets/javascripts/lunr/min/lunr.ru.min.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Lunr languages, `Russian` language
3 | * https://github.com/MihaiValentin/lunr-languages
4 | *
5 | * Copyright 2014, Mihai Valentin
6 | * http://www.mozilla.org/MPL/
7 | */
8 | /*!
9 | * based on
10 | * Snowball JavaScript Library v0.3
11 | * http://code.google.com/p/urim/
12 | * http://snowball.tartarus.org/
13 | *
14 | * Copyright 2010, Oleg Mazko
15 | * http://www.mozilla.org/MPL/
16 | */
17 |
18 | !function(e,n){"function"==typeof define&&define.amd?define(n):"object"==typeof exports?module.exports=n():n()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.ru=function(){this.pipeline.reset(),this.pipeline.add(e.ru.trimmer,e.ru.stopWordFilter,e.ru.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.ru.stemmer))},e.ru.wordCharacters="Ѐ-҄҇-ԯᴫᵸⷠ-ⷿꙀ-ꚟ︮︯",e.ru.trimmer=e.trimmerSupport.generateTrimmer(e.ru.wordCharacters),e.Pipeline.registerFunction(e.ru.trimmer,"trimmer-ru"),e.ru.stemmer=function(){var n=e.stemmerSupport.Among,r=e.stemmerSupport.SnowballProgram,t=new function(){function e(){for(;!W.in_grouping(S,1072,1103);){if(W.cursor>=W.limit)return!1;W.cursor++}return!0}function t(){for(;!W.out_grouping(S,1072,1103);){if(W.cursor>=W.limit)return!1;W.cursor++}return!0}function w(){b=W.limit,_=b,e()&&(b=W.cursor,t()&&e()&&t()&&(_=W.cursor))}function i(){return _<=W.cursor}function u(e,n){var r,t;if(W.ket=W.cursor,r=W.find_among_b(e,n)){switch(W.bra=W.cursor,r){case 1:if(t=W.limit-W.cursor,!W.eq_s_b(1,"а")&&(W.cursor=W.limit-t,!W.eq_s_b(1,"я")))return!1;case 2:W.slice_del()}return!0}return!1}function o(){return u(h,9)}function s(e,n){var r;return W.ket=W.cursor,!!(r=W.find_among_b(e,n))&&(W.bra=W.cursor,1==r&&W.slice_del(),!0)}function c(){return s(g,26)}function m(){return!!c()&&(u(C,8),!0)}function f(){return s(k,2)}function l(){return u(P,46)}function a(){s(v,36)}function p(){var e;W.ket=W.cursor,(e=W.find_among_b(F,2))&&(W.bra=W.cursor,i()&&1==e&&W.slice_del())}function d(){var e;if(W.ket=W.cursor,e=W.find_among_b(q,4))switch(W.bra=W.cursor,e){case 1:if(W.slice_del(),W.ket=W.cursor,!W.eq_s_b(1,"н"))break;W.bra=W.cursor;case 2:if(!W.eq_s_b(1,"н"))break;case 3:W.slice_del()}}var _,b,h=[new n("в",-1,1),new n("ив",0,2),new n("ыв",0,2),new n("вши",-1,1),new n("ивши",3,2),new n("ывши",3,2),new n("вшись",-1,1),new n("ившись",6,2),new n("ывшись",6,2)],g=[new n("ее",-1,1),new n("ие",-1,1),new n("ое",-1,1),new n("ые",-1,1),new n("ими",-1,1),new n("ыми",-1,1),new n("ей",-1,1),new n("ий",-1,1),new n("ой",-1,1),new n("ый",-1,1),new n("ем",-1,1),new n("им",-1,1),new n("ом",-1,1),new n("ым",-1,1),new n("его",-1,1),new n("ого",-1,1),new n("ему",-1,1),new n("ому",-1,1),new n("их",-1,1),new n("ых",-1,1),new n("ею",-1,1),new n("ою",-1,1),new n("ую",-1,1),new n("юю",-1,1),new n("ая",-1,1),new n("яя",-1,1)],C=[new n("ем",-1,1),new n("нн",-1,1),new n("вш",-1,1),new n("ивш",2,2),new n("ывш",2,2),new n("щ",-1,1),new n("ющ",5,1),new n("ующ",6,2)],k=[new n("сь",-1,1),new n("ся",-1,1)],P=[new n("ла",-1,1),new n("ила",0,2),new n("ыла",0,2),new n("на",-1,1),new n("ена",3,2),new n("ете",-1,1),new n("ите",-1,2),new n("йте",-1,1),new n("ейте",7,2),new n("уйте",7,2),new n("ли",-1,1),new n("или",10,2),new n("ыли",10,2),new n("й",-1,1),new n("ей",13,2),new n("уй",13,2),new n("л",-1,1),new n("ил",16,2),new n("ыл",16,2),new n("ем",-1,1),new n("им",-1,2),new n("ым",-1,2),new n("н",-1,1),new n("ен",22,2),new n("ло",-1,1),new n("ило",24,2),new n("ыло",24,2),new n("но",-1,1),new n("ено",27,2),new n("нно",27,1),new n("ет",-1,1),new n("ует",30,2),new n("ит",-1,2),new n("ыт",-1,2),new n("ют",-1,1),new n("уют",34,2),new n("ят",-1,2),new n("ны",-1,1),new n("ены",37,2),new n("ть",-1,1),new n("ить",39,2),new n("ыть",39,2),new n("ешь",-1,1),new n("ишь",-1,2),new n("ю",-1,2),new n("ую",44,2)],v=[new n("а",-1,1),new n("ев",-1,1),new n("ов",-1,1),new n("е",-1,1),new n("ие",3,1),new n("ье",3,1),new n("и",-1,1),new n("еи",6,1),new n("ии",6,1),new n("ами",6,1),new n("ями",6,1),new n("иями",10,1),new n("й",-1,1),new n("ей",12,1),new n("ией",13,1),new n("ий",12,1),new n("ой",12,1),new n("ам",-1,1),new n("ем",-1,1),new n("ием",18,1),new n("ом",-1,1),new n("ям",-1,1),new n("иям",21,1),new n("о",-1,1),new n("у",-1,1),new n("ах",-1,1),new n("ях",-1,1),new n("иях",26,1),new n("ы",-1,1),new n("ь",-1,1),new n("ю",-1,1),new n("ию",30,1),new n("ью",30,1),new n("я",-1,1),new n("ия",33,1),new n("ья",33,1)],F=[new n("ост",-1,1),new n("ость",-1,1)],q=[new n("ейше",-1,1),new n("н",-1,2),new n("ейш",-1,1),new n("ь",-1,3)],S=[33,65,8,232],W=new r;this.setCurrent=function(e){W.setCurrent(e)},this.getCurrent=function(){return W.getCurrent()},this.stem=function(){return w(),W.cursor=W.limit,!(W.cursor=i&&(e-=i,t[e>>3]&1<<(7&e)))return this.cursor++,!0}return!1},in_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e<=s&&e>=i&&(e-=i,t[e>>3]&1<<(7&e)))return this.cursor--,!0}return!1},out_grouping:function(t,i,s){if(this.cursors||e>3]&1<<(7&e)))return this.cursor++,!0}return!1},out_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e>s||e>3]&1<<(7&e)))return this.cursor--,!0}return!1},eq_s:function(t,i){if(this.limit-this.cursor>1),f=0,l=o0||e==s||c)break;c=!0}}for(;;){var _=t[s];if(o>=_.s_size){if(this.cursor=n+_.s_size,!_.method)return _.result;var b=_.method();if(this.cursor=n+_.s_size,b)return _.result}if((s=_.substring_i)<0)return 0}},find_among_b:function(t,i){for(var s=0,e=i,n=this.cursor,u=this.limit_backward,o=0,h=0,c=!1;;){for(var a=s+(e-s>>1),f=0,l=o=0;m--){if(n-l==u){f=-1;break}if(f=r.charCodeAt(n-1-l)-_.s[m])break;l++}if(f<0?(e=a,h=l):(s=a,o=l),e-s<=1){if(s>0||e==s||c)break;c=!0}}for(;;){var _=t[s];if(o>=_.s_size){if(this.cursor=n-_.s_size,!_.method)return _.result;var b=_.method();if(this.cursor=n-_.s_size,b)return _.result}if((s=_.substring_i)<0)return 0}},replace_s:function(t,i,s){var e=s.length-(i-t),n=r.substring(0,t),u=r.substring(i);return r=n+s+u,this.limit+=e,this.cursor>=i?this.cursor+=e:this.cursor>t&&(this.cursor=t),e},slice_check:function(){if(this.bra<0||this.bra>this.ket||this.ket>this.limit||this.limit>r.length)throw"faulty slice operation"},slice_from:function(r){this.slice_check(),this.replace_s(this.bra,this.ket,r)},slice_del:function(){this.slice_from("")},insert:function(r,t,i){var s=this.replace_s(r,t,i);r<=this.bra&&(this.bra+=s),r<=this.ket&&(this.ket+=s)},slice_to:function(){return this.slice_check(),r.substring(this.bra,this.ket)},eq_v_b:function(r){return this.eq_s_b(r.length,r)}}}},r.trimmerSupport={generateTrimmer:function(r){var t=new RegExp("^[^"+r+"]+"),i=new RegExp("[^"+r+"]+$");return function(r){return"function"==typeof r.update?r.update(function(r){return r.replace(t,"").replace(i,"")}):r.replace(t,"").replace(i,"")}}}}});
--------------------------------------------------------------------------------
/site/assets/javascripts/lunr/min/lunr.sv.min.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Lunr languages, `Swedish` language
3 | * https://github.com/MihaiValentin/lunr-languages
4 | *
5 | * Copyright 2014, Mihai Valentin
6 | * http://www.mozilla.org/MPL/
7 | */
8 | /*!
9 | * based on
10 | * Snowball JavaScript Library v0.3
11 | * http://code.google.com/p/urim/
12 | * http://snowball.tartarus.org/
13 | *
14 | * Copyright 2010, Oleg Mazko
15 | * http://www.mozilla.org/MPL/
16 | */
17 |
18 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.sv=function(){this.pipeline.reset(),this.pipeline.add(e.sv.trimmer,e.sv.stopWordFilter,e.sv.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.sv.stemmer))},e.sv.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.sv.trimmer=e.trimmerSupport.generateTrimmer(e.sv.wordCharacters),e.Pipeline.registerFunction(e.sv.trimmer,"trimmer-sv"),e.sv.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,t=new function(){function e(){var e,r=w.cursor+3;if(o=w.limit,0<=r||r<=w.limit){for(a=r;;){if(e=w.cursor,w.in_grouping(l,97,246)){w.cursor=e;break}if(w.cursor=e,w.cursor>=w.limit)return;w.cursor++}for(;!w.out_grouping(l,97,246);){if(w.cursor>=w.limit)return;w.cursor++}o=w.cursor,o=o&&(w.limit_backward=o,w.cursor=w.limit,w.ket=w.cursor,e=w.find_among_b(u,37),w.limit_backward=r,e))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:w.in_grouping_b(d,98,121)&&w.slice_del()}}function i(){var e=w.limit_backward;w.cursor>=o&&(w.limit_backward=o,w.cursor=w.limit,w.find_among_b(c,7)&&(w.cursor=w.limit,w.ket=w.cursor,w.cursor>w.limit_backward&&(w.bra=--w.cursor,w.slice_del())),w.limit_backward=e)}function s(){var e,r;if(w.cursor>=o){if(r=w.limit_backward,w.limit_backward=o,w.cursor=w.limit,w.ket=w.cursor,e=w.find_among_b(m,5))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:w.slice_from("lös");break;case 3:w.slice_from("full")}w.limit_backward=r}}var a,o,u=[new r("a",-1,1),new r("arna",0,1),new r("erna",0,1),new r("heterna",2,1),new r("orna",0,1),new r("ad",-1,1),new r("e",-1,1),new r("ade",6,1),new r("ande",6,1),new r("arne",6,1),new r("are",6,1),new r("aste",6,1),new r("en",-1,1),new r("anden",12,1),new r("aren",12,1),new r("heten",12,1),new r("ern",-1,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",18,1),new r("or",-1,1),new r("s",-1,2),new r("as",21,1),new r("arnas",22,1),new r("ernas",22,1),new r("ornas",22,1),new r("es",21,1),new r("ades",26,1),new r("andes",26,1),new r("ens",21,1),new r("arens",29,1),new r("hetens",29,1),new r("erns",21,1),new r("at",-1,1),new r("andet",-1,1),new r("het",-1,1),new r("ast",-1,1)],c=[new r("dd",-1,-1),new r("gd",-1,-1),new r("nn",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1),new r("tt",-1,-1)],m=[new r("ig",-1,1),new r("lig",0,1),new r("els",-1,1),new r("fullt",-1,3),new r("löst",-1,2)],l=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,24,0,32],d=[119,127,149],w=new n;this.setCurrent=function(e){w.setCurrent(e)},this.getCurrent=function(){return w.getCurrent()},this.stem=function(){var r=w.cursor;return e(),w.limit_backward=r,w.cursor=w.limit,t(),w.cursor=w.limit,i(),w.cursor=w.limit,s(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return t.setCurrent(e),t.stem(),t.getCurrent()}):(t.setCurrent(e),t.stem(),t.getCurrent())}}(),e.Pipeline.registerFunction(e.sv.stemmer,"stemmer-sv"),e.sv.stopWordFilter=e.generateStopWordFilter("alla allt att av blev bli blir blivit de dem den denna deras dess dessa det detta dig din dina ditt du där då efter ej eller en er era ert ett från för ha hade han hans har henne hennes hon honom hur här i icke ingen inom inte jag ju kan kunde man med mellan men mig min mina mitt mot mycket ni nu när någon något några och om oss på samma sedan sig sin sina sitta själv skulle som så sådan sådana sådant till under upp ut utan vad var vara varför varit varje vars vart vem vi vid vilka vilkas vilken vilket vår våra vårt än är åt över".split(" ")),e.Pipeline.registerFunction(e.sv.stopWordFilter,"stopWordFilter-sv")}});
--------------------------------------------------------------------------------
/site/assets/javascripts/lunr/min/lunr.ta.min.js:
--------------------------------------------------------------------------------
1 | !function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.ta=function(){this.pipeline.reset(),this.pipeline.add(e.ta.trimmer,e.ta.stopWordFilter,e.ta.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.ta.stemmer))},e.ta.wordCharacters="-உஊ-ஏஐ-ஙச-ட-னப-யர-ஹ-ிீ-ொ-ௐ---௩௪-௯௰-௹௺-a-zA-Za-zA-Z0-90-9",e.ta.trimmer=e.trimmerSupport.generateTrimmer(e.ta.wordCharacters),e.Pipeline.registerFunction(e.ta.trimmer,"trimmer-ta"),e.ta.stopWordFilter=e.generateStopWordFilter("அங்கு அங்கே அது அதை அந்த அவர் அவர்கள் அவள் அவன் அவை ஆக ஆகவே ஆகையால் ஆதலால் ஆதலினால் ஆனாலும் ஆனால் இங்கு இங்கே இது இதை இந்த இப்படி இவர் இவர்கள் இவள் இவன் இவை இவ்வளவு உனக்கு உனது உன் உன்னால் எங்கு எங்கே எது எதை எந்த எப்படி எவர் எவர்கள் எவள் எவன் எவை எவ்வளவு எனக்கு எனது எனவே என் என்ன என்னால் ஏது ஏன் தனது தன்னால் தானே தான் நாங்கள் நாம் நான் நீ நீங்கள்".split(" ")),e.ta.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var t=e.wordcut;t.init(),e.ta.tokenizer=function(r){if(!arguments.length||null==r||void 0==r)return[];if(Array.isArray(r))return r.map(function(t){return isLunr2?new e.Token(t.toLowerCase()):t.toLowerCase()});var i=r.toString().toLowerCase().replace(/^\s+/,"");return t.cut(i).split("|")},e.Pipeline.registerFunction(e.ta.stemmer,"stemmer-ta"),e.Pipeline.registerFunction(e.ta.stopWordFilter,"stopWordFilter-ta")}});
--------------------------------------------------------------------------------
/site/assets/javascripts/lunr/min/lunr.te.min.js:
--------------------------------------------------------------------------------
1 | !function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.te=function(){this.pipeline.reset(),this.pipeline.add(e.te.trimmer,e.te.stopWordFilter,e.te.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.te.stemmer))},e.te.wordCharacters="ఀ-ఄఅ-ఔక-హా-ౌౕ-ౖౘ-ౚౠ-ౡౢ-ౣ౦-౯౸-౿఼ఽ్ౝ౷",e.te.trimmer=e.trimmerSupport.generateTrimmer(e.te.wordCharacters),e.Pipeline.registerFunction(e.te.trimmer,"trimmer-te"),e.te.stopWordFilter=e.generateStopWordFilter("అందరూ అందుబాటులో అడగండి అడగడం అడ్డంగా అనుగుణంగా అనుమతించు అనుమతిస్తుంది అయితే ఇప్పటికే ఉన్నారు ఎక్కడైనా ఎప్పుడు ఎవరైనా ఎవరో ఏ ఏదైనా ఏమైనప్పటికి ఒక ఒకరు కనిపిస్తాయి కాదు కూడా గా గురించి చుట్టూ చేయగలిగింది తగిన తర్వాత దాదాపు దూరంగా నిజంగా పై ప్రకారం ప్రక్కన మధ్య మరియు మరొక మళ్ళీ మాత్రమే మెచ్చుకో వద్ద వెంట వేరుగా వ్యతిరేకంగా సంబంధం".split(" ")),e.te.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var t=e.wordcut;t.init(),e.te.tokenizer=function(r){if(!arguments.length||null==r||void 0==r)return[];if(Array.isArray(r))return r.map(function(t){return isLunr2?new e.Token(t.toLowerCase()):t.toLowerCase()});var i=r.toString().toLowerCase().replace(/^\s+/,"");return t.cut(i).split("|")},e.Pipeline.registerFunction(e.te.stemmer,"stemmer-te"),e.Pipeline.registerFunction(e.te.stopWordFilter,"stopWordFilter-te")}});
--------------------------------------------------------------------------------
/site/assets/javascripts/lunr/min/lunr.th.min.js:
--------------------------------------------------------------------------------
1 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r="2"==e.version[0];e.th=function(){this.pipeline.reset(),this.pipeline.add(e.th.trimmer),r?this.tokenizer=e.th.tokenizer:(e.tokenizer&&(e.tokenizer=e.th.tokenizer),this.tokenizerFn&&(this.tokenizerFn=e.th.tokenizer))},e.th.wordCharacters="[-]",e.th.trimmer=e.trimmerSupport.generateTrimmer(e.th.wordCharacters),e.Pipeline.registerFunction(e.th.trimmer,"trimmer-th");var t=e.wordcut;t.init(),e.th.tokenizer=function(i){if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(t){return r?new e.Token(t):t});var n=i.toString().replace(/^\s+/,"");return t.cut(n).split("|")}}});
--------------------------------------------------------------------------------
/site/assets/javascripts/lunr/min/lunr.vi.min.js:
--------------------------------------------------------------------------------
1 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.vi=function(){this.pipeline.reset(),this.pipeline.add(e.vi.stopWordFilter,e.vi.trimmer)},e.vi.wordCharacters="[A-Za-ẓ̀͐́͑̉̃̓ÂâÊêÔôĂ-ăĐ-đƠ-ơƯ-ư]",e.vi.trimmer=e.trimmerSupport.generateTrimmer(e.vi.wordCharacters),e.Pipeline.registerFunction(e.vi.trimmer,"trimmer-vi"),e.vi.stopWordFilter=e.generateStopWordFilter("là cái nhưng mà".split(" "))}});
--------------------------------------------------------------------------------
/site/assets/javascripts/lunr/min/lunr.zh.min.js:
--------------------------------------------------------------------------------
1 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r(require("@node-rs/jieba")):r()(e.lunr)}(this,function(e){return function(r,t){if(void 0===r)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===r.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var i="2"==r.version[0];r.zh=function(){this.pipeline.reset(),this.pipeline.add(r.zh.trimmer,r.zh.stopWordFilter,r.zh.stemmer),i?this.tokenizer=r.zh.tokenizer:(r.tokenizer&&(r.tokenizer=r.zh.tokenizer),this.tokenizerFn&&(this.tokenizerFn=r.zh.tokenizer))},r.zh.tokenizer=function(n){if(!arguments.length||null==n||void 0==n)return[];if(Array.isArray(n))return n.map(function(e){return i?new r.Token(e.toLowerCase()):e.toLowerCase()});t&&e.load(t);var o=n.toString().trim().toLowerCase(),s=[];e.cut(o,!0).forEach(function(e){s=s.concat(e.split(" "))}),s=s.filter(function(e){return!!e});var u=0;return s.map(function(e,t){if(i){var n=o.indexOf(e,u),s={};return s.position=[n,e.length],s.index=t,u=n,new r.Token(e,s)}return e})},r.zh.wordCharacters="\\w一-龥",r.zh.trimmer=r.trimmerSupport.generateTrimmer(r.zh.wordCharacters),r.Pipeline.registerFunction(r.zh.trimmer,"trimmer-zh"),r.zh.stemmer=function(){return function(e){return e}}(),r.Pipeline.registerFunction(r.zh.stemmer,"stemmer-zh"),r.zh.stopWordFilter=r.generateStopWordFilter("的 一 不 在 人 有 是 为 為 以 于 於 上 他 而 后 後 之 来 來 及 了 因 下 可 到 由 这 這 与 與 也 此 但 并 並 个 個 其 已 无 無 小 我 们 們 起 最 再 今 去 好 只 又 或 很 亦 某 把 那 你 乃 它 吧 被 比 别 趁 当 當 从 從 得 打 凡 儿 兒 尔 爾 该 該 各 给 給 跟 和 何 还 還 即 几 幾 既 看 据 據 距 靠 啦 另 么 麽 每 嘛 拿 哪 您 凭 憑 且 却 卻 让 讓 仍 啥 如 若 使 谁 誰 虽 雖 随 隨 同 所 她 哇 嗡 往 些 向 沿 哟 喲 用 咱 则 則 怎 曾 至 致 着 著 诸 諸 自".split(" ")),r.Pipeline.registerFunction(r.zh.stopWordFilter,"stopWordFilter-zh")}});
--------------------------------------------------------------------------------
/site/assets/stylesheets/palette.06af60db.min.css.map:
--------------------------------------------------------------------------------
1 | {"version":3,"sources":["src/templates/assets/stylesheets/palette/_scheme.scss","../../../../src/templates/assets/stylesheets/palette.scss","src/templates/assets/stylesheets/palette/_accent.scss","src/templates/assets/stylesheets/palette/_primary.scss","src/templates/assets/stylesheets/utilities/_break.scss"],"names":[],"mappings":"AA2BA,cAGE,6BAME,sDAAA,CACA,6DAAA,CACA,+DAAA,CACA,gEAAA,CACA,mDAAA,CACA,6DAAA,CACA,+DAAA,CACA,gEAAA,CAGA,mDAAA,CACA,gDAAA,CAGA,0BAAA,CACA,mCAAA,CAGA,iCAAA,CACA,kCAAA,CACA,mCAAA,CACA,mCAAA,CACA,kCAAA,CACA,iCAAA,CACA,+CAAA,CACA,6DAAA,CACA,gEAAA,CACA,4DAAA,CACA,4DAAA,CACA,6DAAA,CAGA,6CAAA,CAGA,+CAAA,CAGA,uDAAA,CACA,6DAAA,CACA,2DAAA,CAGA,iCAAA,CAGA,yDAAA,CACA,iEAAA,CAGA,mDAAA,CACA,mDAAA,CAGA,qDAAA,CACA,uDAAA,CAGA,8DAAA,CAKA,8DAAA,CAKA,0DAAA,CAvEA,iBCeF,CD6DE,kHAEE,YC3DJ,CDkFE,yDACE,4BChFJ,CD+EE,2DACE,4BC7EJ,CD4EE,gEACE,4BC1EJ,CDyEE,2DACE,4BCvEJ,CDsEE,yDACE,4BCpEJ,CDmEE,0DACE,4BCjEJ,CDgEE,gEACE,4BC9DJ,CD6DE,0DACE,4BC3DJ,CD0DE,2OACE,4BC/CJ,CDsDA,+FAGE,iCCpDF,CACF,CC/CE,2BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCD2CN,CCrDE,4BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDkDN,CC5DE,8BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDyDN,CCnEE,mCACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDgEN,CC1EE,8BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDuEN,CCjFE,4BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCD8EN,CCxFE,kCACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDqFN,CC/FE,4BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCD4FN,CCtGE,4BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDmGN,CC7GE,6BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCD0GN,CCpHE,mCACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDiHN,CC3HE,4BACE,4BAAA,CACA,2CAAA,CAIE,8BAAA,CACA,qCD2HN,CClIE,8BACE,4BAAA,CACA,2CAAA,CAIE,8BAAA,CACA,qCDkIN,CCzIE,6BACE,yBAAA,CACA,2CAAA,CAIE,8BAAA,CACA,qCDyIN,CChJE,8BACE,4BAAA,CACA,2CAAA,CAIE,8BAAA,CACA,qCDgJN,CCvJE,mCACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDoJN,CEzJE,4BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFsJN,CEjKE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCF8JN,CEzKE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFsKN,CEjLE,oCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCF8KN,CEzLE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFsLN,CEjME,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCF8LN,CEzME,mCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFsMN,CEjNE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCF8MN,CEzNE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFsNN,CEjOE,8BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCF8NN,CEzOE,oCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFsON,CEjPE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,+BAAA,CACA,sCFiPN,CEzPE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,+BAAA,CACA,sCFyPN,CEjQE,8BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,+BAAA,CACA,sCFiQN,CEzQE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,+BAAA,CACA,sCFyQN,CEjRE,oCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCF8QN,CEzRE,8BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFsRN,CEjSE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCAAA,CAKA,4BF0RN,CE1SE,kCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCAAA,CAKA,4BFmSN,CEpRE,sEACE,4BFuRJ,CExRE,+DACE,4BF2RJ,CE5RE,iEACE,4BF+RJ,CEhSE,gEACE,4BFmSJ,CEpSE,iEACE,4BFuSJ,CE9RA,8BACE,mDAAA,CACA,4DAAA,CACA,0DAAA,CACA,oDAAA,CACA,2DAAA,CAGA,4BF+RF,CE5RE,yCACE,+BF8RJ,CE3RI,kDAEE,0CAAA,CACA,sCAAA,CAFA,mCF+RN,CG3MI,mCD1EA,+CACE,8CFwRJ,CErRI,qDACE,8CFuRN,CElRE,iEACE,mCFoRJ,CACF,CGtNI,sCDvDA,uCACE,oCFgRJ,CACF,CEvQA,8BACE,kDAAA,CACA,4DAAA,CACA,wDAAA,CACA,oDAAA,CACA,6DAAA,CAGA,4BFwQF,CErQE,yCACE,+BFuQJ,CEpQI,kDAEE,0CAAA,CACA,sCAAA,CAFA,mCFwQN,CEjQE,yCACE,6CFmQJ,CG5NI,0CDhCA,8CACE,gDF+PJ,CACF,CGjOI,0CDvBA,iFACE,6CF2PJ,CACF,CGzPI,sCDKA,uCACE,6CFuPJ,CACF","file":"palette.css"}
--------------------------------------------------------------------------------
/site/java/images/Exceptions.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/site/java/images/Exceptions.png
--------------------------------------------------------------------------------
/site/java/images/Life-Cycle-Thread.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/site/java/images/Life-Cycle-Thread.png
--------------------------------------------------------------------------------
/site/java/images/Shallow-Vs-Deep-cloning.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/site/java/images/Shallow-Vs-Deep-cloning.png
--------------------------------------------------------------------------------
/site/java/images/hashMap-internal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/site/java/images/hashMap-internal.png
--------------------------------------------------------------------------------
/site/java/images/hashing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/site/java/images/hashing.png
--------------------------------------------------------------------------------
/site/java/images/intermediate and terminal operations.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/site/java/images/intermediate and terminal operations.png
--------------------------------------------------------------------------------
/site/sitemap.xml.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/site/sitemap.xml.gz
--------------------------------------------------------------------------------
/site/spring/images/JpaRepositoryUml.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/site/spring/images/JpaRepositoryUml.png
--------------------------------------------------------------------------------
/site/spring/images/spring-mvc-flow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/site/spring/images/spring-mvc-flow.png
--------------------------------------------------------------------------------
/site/spring/security/images/ExceptionTranslationFilter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/site/spring/security/images/ExceptionTranslationFilter.png
--------------------------------------------------------------------------------
/site/spring/security/images/Figure 2. DelegatingFilterProxy .png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/site/spring/security/images/Figure 2. DelegatingFilterProxy .png
--------------------------------------------------------------------------------
/site/spring/security/images/Figure 3. FilterChainProxy .png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/site/spring/security/images/Figure 3. FilterChainProxy .png
--------------------------------------------------------------------------------
/site/spring/security/images/Figure 4. SecurityFilterChain .png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/site/spring/security/images/Figure 4. SecurityFilterChain .png
--------------------------------------------------------------------------------
/site/spring/security/images/Figure 5. Multiple SecurityFilterChain .png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/site/spring/security/images/Figure 5. Multiple SecurityFilterChain .png
--------------------------------------------------------------------------------
/site/spring/security/images/Figure1-FilterChain .png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunilsoni/interview-notes/c746a428f8aa89a6a9cc098a014c68d8a77a22b6/site/spring/security/images/Figure1-FilterChain .png
--------------------------------------------------------------------------------