├── .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 --------------------------------------------------------------------------------